Вим не помнит последнюю позицию

89

В моей Ubuntu LTS 12.04 есть редактор vim. Если я открою файл, перейду к абзацу и снова открою vim, то курсор всегда переместится в начало файла.

Это не ожидаемое поведение. Как vim может запомнить последнюю прочитанную позицию после закрытия файла?

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

Лунные грибы
источник
1
Я извиняюсь, но, кажется, есть 0 документов, в которых говорится, что это должно Вы на 100% уверены, что дело в Vim? И, извините, я понятия не имел, как настроить его, чтобы запомнить последнюю позицию. Может быть, ненужный комментарий от меня, но я должен знать, если вы испытали программу, делающую это ранее.
Денни
4
Например, в Redhat последняя ссылочная строка в файле запоминается vim. Vim кажется неудобным в Ubuntu 12.04
Lunar Mushrooms
Также в Ubuntu 10.04 это определенно не поведение по умолчанию. Я давно пользуюсь Vim в Ubuntu, никогда не видел твоего ожидаемого поведения. Вы, вероятно, настроили это для такой установки - см., Например, ответ @GaryBishop.
gertvdijk
Извините, это была не Ubuntu 10.04, это была красная шляпа, которая работала. Обновлено мой комментарий
Лунные грибы

Ответы:

117

Решено это:

/ И т.д. / 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. Раскомментировав их там включили его для всех пользователей.
17
66

У меня была такая же проблема, и оказалось, что файл .viminfo в моем домашнем каталоге был неправильным владельцем. Он принадлежал пользователю root: root.

Как только я установил владельца файла, изменив его на себя, запоминание позиции файла снова заработало для меня

TikiTavi
источник
3
Это работает в моем случае. У меня была такая же проблема. Я изменил владельца .viminfo (присутствует в домашнем каталоге), который устраняет проблемы с vim. Но почему он был создан с root: root?
Бриеш Валера
1
@BrijeshValera скорее всего потому, что вы запустили vim от имени root, когда файл еще не существовал.
Руслан
1
@Ruslan Но тогда не должен ли файл быть создан в домашнем каталоге пользователя root?
ankush981
5
@ dotslash это сложно sudo. Это не меняет среду (по крайней мере, в основном): попробуйте запустить sudo bash -c 'echo $HOME', вы получите свой домашний каталог вместо корневого.
Руслан
1
Это было причиной в моем 18.04
Hanynowsky
2

Существует плагин vim-lastplace (я автор), который откроет ваши файлы там, где вы остановились. Он улучшает приведенные выше предложения, игнорируя сообщения о коммитах, потому что вы обычно редактируете новое сообщение и хотите начать с верхней части файла сообщений о коммите.

Грег Дитче
источник
почему отрицание? vim-lastplace делает именно то, что спросил OP, и делает это даже лучше, чем принятый ответ (в котором есть множество ошибок).
Грег
0

В моем случае, VI была символическая: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Последний не имеет реальных возможностей Vim. Установка пакета 'vim' (с использованием synaptic или 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
Arnaud
источник
Почему вы считаете ваше решение правильным? Это выглядит очень похоже, но для обратной косой черты в начале строки. Если таковые имеются, не должны ли они быть в конце строки, указывающей, что команда продолжается на следующей строке ...? Кроме того, принятый ответ просто говорит о том, что раскомментирован раздел в глобальном конфигурационном файле, который устанавливается вместе с vim. Видимо, это решило проблему. Где ошибка?
Нефенте
Потому что, если я копирую / вставляю первое решение, я получаю ошибку. И я опубликовал содержимое моего /usr/share/vim/vim74/vimrc_example.vim (который включал обратные слеши в начале).
Арно
1
@ Поместите область строк, уже предоставленную в файле, но прокомментированную. Вам просто нужно удалить "символ в начале строки, чтобы раскомментировать их. Нет необходимости «копировать / вставлять первое решение».
ADTC