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

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

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

Я также пытался vi, но результат тот же.

90
задан 14 May 2015 в 21:35

7 ответов

В моем случае vi была символической ссылкой: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Последний не имеет реальных возможностей Vim. Установка пакета 'vim' (с использованием synaptic или apt-get) заставила эту символическую ссылку указывать на /usr/bin/vim.basic, и это решило проблему.

0
ответ дан 14 May 2015 в 21:35

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

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

0
ответ дан 14 May 2015 в 21:35

Я думаю, что эта публикация в вики может дать решение. Я не верю, что восстановление позиции - это ожидаемое поведение. http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session

0
ответ дан 14 May 2015 в 21:35

Ошибка в решении Лунных грибов. Здесь поправка:

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
0
ответ дан 14 May 2015 в 21:35

Решено:

/ etc / 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)

0
ответ дан 14 May 2015 в 21:35

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

0
ответ дан 14 May 2015 в 21:35

Хорошим соглашением является создание собственного файла .vimrc в вашем каталоге $HOME и включение этой строки, которая заставит Vim перейти к последняя известная позиция в ранее отредактированном файле.

В $HOME/.vimrc добавьте следующие строки:

" Reopen the last edited position in files
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif

Нет необходимости редактировать общесистемный файл /etc/vim/vimrc.

Создание и использование собственного .vimrc в каталоге $HOME также лучше для удобства сопровождения. Системный файл конфигурации vimrc может быть обновлен, когда пакет приложения Vim получит обновление в следующий раз, или отредактирован кем-то другим. Ваш собственный файл в вашем собственном домашнем каталоге будет учитываться при запуске Vim.

Я действительно рекомендую вам изучить все замечательные вещи, которые вы можете сделать с вашим собственным файлом .vimrc. У меня настроено множество полезных опций и даже несколько пользовательских функций.

4
ответ дан 13 August 2020 в 23:24

Другие вопросы по тегам:

Похожие вопросы: