Как в vim открыть файл с тем же номером строки, который я закрыл в последний раз?


145

Я хочу настроить vim для открытия файла в том же месте, где я остановился.

vim 

1
: '"апостроф, за которым следуют двойные кавычки, перенаправляет строку последних изменений
Дхирен Хамал

Ответы:


200

/etc/vim/vimrcЭтот пример закомментирован из файла Ubuntu :

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

Если это не сработает, обычная проблема заключается в том, что вы не владеете своим ~/.viminfoфайлом. В этом случае запустите:

sudo chown user:group ~/.viminfo

где user - это ваше имя usernameи groupчасто совпадает с вашим именем пользователя.


9
Autocmd создается прямо из документа vim. См .: help last-position-jump
user55400

20
Если одинарная кавычка в предпоследней строке заменена на \| exe "normal! g`\"" | endif
обратную кавычку, она переместится

4
Эта chownчасть устранила проблему для меня. Снимаю шляпу!
slowpoison

2
Наконец, кто-то указывает, что мой .viminfo по какой-то причине принадлежит root! Это должно быть в других 100 документах, которые я прочитал.
Джек

2
Просто хочу +1 к chown user ~/.viminfoдобавлению. Я пытаюсь понять это уже час, и ты только что спас мне день.
Кристофер Рид

49

Если вы не против автоматизации торговли для простоты, просто нажмите клавишу '"(апостроф, а затем двойные кавычки) при открытии файла, и вы переместитесь туда, где вы были. По сути, это то, что делает ответ @marcog.


27
  :h views-sessions

Вы можете поместить это в свой .vimrc :

  autocmd BufWinLeave *.* mkview
  autocmd BufWinEnter *.* silent loadview 

просмотры будут помещены в .vim / view. Возможно, вам потребуется создать эти каталоги.


1
Мне нравится этот ответ, потому что другой относится к файлу / etc / vim /, которого не было на моем Mac.
MarkHu

17

Вы можете запустить vim без указания имени файла, используя

vim 

Затем дважды нажмите CTRL + O, чтобы перейти к последнему месту в любом файле, с которым вы работали.


Если у вас установлено NERDTree, двойное нажатие Co может открыть NERDTree в текущем буфере. В моем случае мне иногда нужно нажимать Co до пяти раз, но в итоге я получаю эффект, описанный @MatAff.
ашрасмун

Нажатие кнопки Ctrl-cдостаточно один раз для меня. Кроме того, нажатие кнопки « Ctrl-cmore» возвращает меня обратно в положение курсора histroy (даже при открытии соответствующих неоткрытых файлов). Я использую Neovim 0.4.2, но, насколько я понимаю, он применим и к vim.
T_T 02

8

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


все, что вы можете делать без плагинов, лучше всего. стремитесь к .vimrc: чем меньше код, тем легче и быстрее
nilon

7

Если у вас включен viminfo, это так же просто, как `0перейти к последней редактированной позиции файла. Вы заметите, что это просто команда «перейти к отметке»;

В самом деле, позже вы можете сделать '3, чтобы перейти к третьему отредактированному ранее месту (возможно, в другом файле), а затем вернуться к последнему, `0снова нажав

Посмотри на

 :marks

чтобы увидеть запомненные места. Также обратите внимание, что viminfo хранит все виды других вещей (например, содержимое регистров, метки для файла, историю команд и поиска). Большинство людей включили это по очевидным причинам.


`0 у меня не работает на vim версии 7.4.1689 на Mac. Но 0 делает свое дело. Это опечатка в ответе?
alamoot

@alamoot нет, см. vimdoc motion.txt - Проверьте, какой символ на `самом деле генерирует ваш ключ, или сделайте:verbose map `
см.

Ты прав. По vimdoc оба верны!
alamoot

2

Иногда ~/.viminfoстановится доступным только для чтения или у вашего пользователя нет доступа к файлу. Это также может быть причиной того, что vim не сохраняет позицию курсора при закрытии файла.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.