vim не запам’ятовує останню позицію


89

Мій Ubuntu LTS 12.04 має редактор vim. Якщо я відкрию файл, перейду до абзацу і знову відкрию vim, курсор завжди переходить до початку файлу.

Це не очікувана поведінка. Як vim може запам'ятати останню прочитану позицію після закриття файлу?

Я viтакож спробував , але результат той же.


1
Мені дуже шкода, але, здається, є 0 документація, яка говорить, що вона повинна. Ви на 100% впевнені, що це стосується Vim? І, вибачте, я не мав уявлення, як налаштувати його на запам'ятовування останньої позиції. Можливо, зайвий коментар від мене, але я повинен знати, якщо ви відчували програму, яка робила це раніше.
Денні

4
Наприклад, у Redhat останній реферований рядок у файлі запам'ятовується vim. vim здається незручним для ubuntu 12.04
Місячні гриби

Також в Ubuntu 10.04 це звичайно не поведінка за замовчуванням. Я давно використовую Vim на Ubuntu, ніколи не бачив вашої очікуваної поведінки. Ви, мабуть, налаштували це для цього під час встановлення - див. Наприклад, відповідь @GaryBishop.
gertvdijk

Вибачте, що це не Ubuntu 10.04, спрацював червоний капелюх. Оновлено мій коментар
Місячні гриби

Відповіді:


116

Вирішили:

/ тощо / vim / vimrc

Вже містить необхідну функцію. Просто потрібно прокоментувати це:

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

(Infact, ви можете посилатися на /usr/share/vim/vim73/vimrc_example.vim також)


Здається, це працює лише з користувачем root, а не з іншими користувачами. Мій файл vimrc є -rw-r--r-- 1 root root; чи це буде проблема?
ADTC

2
У мене була дивна проблема, коли один користувач запам’ятав останню позицію, а жоден інший. Виявляється, ці рядки були у файлі .vimrc користувача, але були прокоментовані у / etc / vim / vimrc. Відмітивши їх там, це ввімкнуло це для всіх користувачів.
Початок

66

У мене була ця сама проблема, і виявилося, що файл .viminfo у моєму домашньому каталозі мав неправильне право власності. Він належав root: root.

Як тільки я зафіксував право власності на файл, змінивши його на себе, запам'ятавши положення файлу, знову почав працювати для мене


3
Ці речі спрацювали в моєму випадку. У мене було таке ж питання. Я змінив право власності на .viminfo (присутній у домашньому каталозі), який виправляє проблеми з vim. Але чому він був створений з root: root?
Бріеш Валера

1
@BrijeshValera, ймовірно, тому що ви почали vim як root, коли файл ще не існував.
Руслан

1
@Ruslan Але чи не слід було б створити файл у домашній довідці користувача root?
ankush981

5
@dotslash, що складно sudo. Це не змінює оточення (принаймні в основному): спробуйте запустити sudo bash -c 'echo $HOME', ви отримаєте домашній каталог замість кореневого.
Руслан

1
Це було причиною в моїй 18.04
Ганиновський


2

Є плагін під назвою vim-lastplace (я автор), який відкриє ваші файли там, де ви зупинилися. Це вдосконалюється в наведених вище пропозиціях, ігноруючи повідомлення про фіксацію, оскільки ти зазвичай редагуєш нове повідомлення і хочеш розпочати вгорі файлу повідомлень про фіксацію.


чому потік? vim-lastplace робить саме те, що запитував ОП, і робить це навіть краще, ніж прийнята відповідь (у якій є кількість помилок).
Грег Дієше

0

У моєму випадку, VI була символічна: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Останній не має реальних особливостей vim. Встановлення пакету "vim" (використовуючи синаптичний або apt-get) призвело до цього символьного посилання /usr/bin/vim.basic, і це вирішило проблему.


-1

У рішенні місячних грибів є помилка. Тут виправлення:

if has("autocmd")
  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

endif

Чому ви вважаєте, що ваше рішення є правильним? Це виглядає дуже схоже, але для зворотних нахилів на початку рядка. Якщо вони є, чи не повинні вони знаходитися в кінці рядка, що вказує, що команда продовжується в наступному рядку ...? Крім того, прийнята відповідь говорить лише про коментар до розділу в глобальному конфігураційному файлі, встановленому разом з vim. Мабуть, це вирішило проблему. Де помилка?
Нефенте

Тому що якщо скопіювати / вставити перше рішення, я отримав помилку. І я розмістив вміст мого /usr/share/vim/vim74/vimrc_example.vim (який включав зворотні риски на початку).
Арно

1
@Amaud область рядків уже надана у файлі, але прокоментована. Вам просто потрібно видалити "персонаж на початку рядків, щоб їх скаментувати. Не потрібно «копіювати / вставляти перше рішення».
ADTC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.