В моей Ubuntu LTS 12.04 есть редактор vim. Если я открою файл, перейду к абзацу и снова открою vim, то курсор всегда переместится в начало файла.
Это не ожидаемое поведение. Как vim может запомнить последнюю прочитанную позицию после закрытия файла?
Я также пытался vi
, но результат тот же.
В моем случае vi была символической ссылкой: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny
. Последний не имеет реальных возможностей Vim. Установка пакета 'vim' (с использованием synaptic или apt-get) заставила эту символическую ссылку указывать на /usr/bin/vim.basic
, и это решило проблему.
У меня была такая же проблема, и оказалось, что файл .viminfo в моем домашнем каталоге имел неправильное право собственности. Он принадлежал пользователю root: root.
Как только я зафиксировал владельца файла, изменив его на себя, запоминание позиции файла снова заработало для меня
Я думаю, что эта публикация в вики может дать решение. Я не верю, что восстановление позиции - это ожидаемое поведение. http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session
Ошибка в решении Лунных грибов. Здесь поправка:
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
Решено:
/ 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)
Существует плагин vim-lastplace (я автор), который будет открывать ваши файлы там, где вы остановились. Он улучшает приведенные выше предложения, игнорируя сообщения о коммитах, потому что вы обычно редактируете новое сообщение и хотите начать с верхней части файла сообщений о коммитах.
Хорошим соглашением является создание собственного файла .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. У меня настроено множество полезных опций и даже несколько пользовательских функций.