Недавняя история файлов в Vim?


132

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

Хранит ли GVim последние файлы где-нибудь, как Word и многие другие настольные приложения? Как получить к ним доступ?


Подобно вопросу: stackoverflow.com/questions/309723/…
malgca

Ответы:


229

По крайней мере, терминал vim сохраняет предыдущие десять файлов ~/.viminfoв разделе меток файлов. Вы можете использовать '0, '1, '2, ... , '9чтобы прыгать среди них.

(Возможно, полезно только для '0возврата к последнему редактируемому вами файлу, если только ваша память сильнее моей.)

Вы также можете использовать :browse oldfilesкоманду, чтобы получить меню с числами.


2
Если вы хотите использовать 0- в 9качестве отметок для навигации, не помечайте их вручную
юань

16
используйте :browse oldполучить список файлов. и введите, qчтобы выбрать файл для редактирования.
songhir

5
:e #<1открывает последний файл, см :h c_#<.
Hotschke

: bro ol работает .. но вам нужно набрать много клавиш .. сначала, чтобы получить список файлов, затем нажать q, а затем выбрать номер. Я считаю, что упомянутый ниже плагин MRU намного лучше: stackoverflow.com/a/3171323/4752883 вам нужно нажать <leader> f, затем либо перейти к файлу с помощью hjkl, либо с помощью других клавиш / найти имя файла. Затем нажмите o, enter, t или v, чтобы быстро открыть файл под курсором.
alpha_989

Я восстановил файл, который по ошибке удалил, используя rmвышеупомянутый метод.
тандем

55

Лучший способ, которым я пользуюсь, это

:browse oldfiles

Самый простой способ на vim.


1
Ницца! Я сопоставил это выражение как "nmap bo: browse oldfiles <CR>" (без кавычек) в моем ~ / .vimrc. Просто введите это сопоставление (bo) в нормальном режиме, чтобы выполнить эту команду
Виктория Стюарт


22

Очень поздний ответ здесь ... объяснение ответа @sarnolds - вы можете просмотреть историю файлов с помощью команды oldfiles @see: h oldfiles или: h viminfo

:oldfiles 

Кроме того, вы можете иметь детальное управление файлами с представлениями и сеансами ... @see: h mkview и: h mksession для уточнения ...


4
Полезно знать, как на самом деле открыть файл, если вы знаете его номер из списка :oldfiles. Это можно сделать в интерактивном режиме с помощью :browseкоманды, как объяснено @sarnold, но также можно сделать это вручную, используя :e #<Nгде N - число из oldfilesсписка.
Кшиштоф Адамски

11

Есть швейцарский нож для переключения файлов CtrlP plugin , который также является частью дистрибутива janus . Он имеет :CtrlPMRUкоманду с умным поиском среди недавно использованных файлов.

Примечание: CtrlP поддерживает собственный список последних использованных файлов в формате g:ctrlp_cache_dir."mru/cache.txt". Он не использует повторно viminfo ( set viminfo?), которая содержит список файловых меток. Это полезно, если вы хотите очистить этот список.


1
Интерфейс CtrlP не интуитивно понятен для пользователей vim? Не стоит тратить силы на изучение сложного интерфейса, чтобы сделать простую вещь, как найти файл MRU = ~ / regexp / (это легко сделать с помощью perl / grep regexp ~ / _viminfo).
mosh

Да .. Я пытался понять, как использовать Ctrlp, но MRU кажется намного проще в использовании, если у вас есть простой набор файлов ( stackoverflow.com/a/3171323/4752883 ). В MRU вы также можете выполнить поиск VIM regexp, чтобы найти нужный вам файл ...
alpha_989

9

Используйте, а :bro olзатем нажмите номер, соответствующий файлу, который вы хотите открыть.


5

CtrlP плагин позволяет осуществлять поиск через ваши недавно используемые файлы, а также файлы в текущем каталоге с помощью следующей команды:

nnoremap <c-p> :CtrlPMixed<cr>

Это избавляет вас от необходимости иметь дело со встроенными командами Vim и плагином MRU, ни один из которых не позволяет выполнять нечеткий поиск файлов, что критично при работе над более крупными проектами.


Для тех, кто сопротивляется функциональному повторному отображению Ctrl-P по умолчанию: вы можете открыть Ctrl-P в обычном режиме и использовать Ctrl-F или Ctrl-B для переключения между режимами (MRU является одним из них)
Густаво Матиас,


2

Как видно из комментариев здесь (http://stackoverflow.com/questions/571955/undo-close-tab-in-vim), ваш файл, вероятно, все еще открыт в буфере:

:ls " get the buffer number
:tabnew +Nbuf " where N is the buffer number

Например, вы можете повторно открыть третий буфер в новой вкладке (вместо этого используйте: e, если вы не используете вкладки):

:tabnew +3buf

1
Да, это работает. Но ведь задача редактора - упростить задачу? Если вам нужно выполнить команду, визуально идентифицировать что-то, запомнить идентификатор, а затем выполнить другую команду, которая является пустой тратой времени пользователя. Ваш ответ правильный, и я не имею в виду оскорбление, но он не соответствует одной из убойных функций Vim!
artfulrobot

У меня такая же проблема. вы пробовали buffexplorer? Он сочетает в себе ls и: tabnew + Nbuf. Теперь вы можете открыть список буферов и открыть его в новой вкладке и т. Д. Одним нажатием клавиши (o, t, v) etcc.
alpha_989

2

Вы можете получить доступ к списку из командной строки с помощью:

grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'"$HOME"','

Объяснение:

grep '^>' ~/.viminfo  #find the list of recent files
cut -c3-              #remove the first 2 characters
sed 's,~,'"$HOME"','  #replace ~ with absolute path

У вас может быть псевдоним bash, если вы используете его регулярно

alias vim_mru="grep '^>' ~/.viminfo|cut -c3-|sed 's,~,'\"$HOME\"','"

2

Добавляю сюда мои 2 цента, потому что fzf не упоминался ранее, и это такой замечательный инструмент:
fzf.vim имеет :Historyкоманду, которая позволяет вам искать самые последние использованные файлы нечетко и искать, пока вы печатаете.
Я настраиваю (по умолчанию) поведение этой команды, не позволяя fzf переупорядочивать список результатов поиска в соответствии с наилучшим соответствием: я хочу, чтобы порядок всех совпадающих имен файлов оставался в том порядке, в котором эти файлы использовались в последний раз.
Чтобы выполнить эту настройку, я добавил в свой .vimrc следующее, чтобы переопределить команду по умолчанию, Historyопределенную плагином fzf.vim:

    command! -bang -nargs=* History
      \ call fzf#vim#history({'options': '--no-sort'})

1

Еще один плагин, позволяющий выбирать файл из списка последних измененных, - это staritfy . Он заменяет ваш начальный экран списком последних измененных файлов. Вы всегда можете открыть эту страницу позже, используя :Startifyкоманду.


1
Не удалось даже начать установку - нужны дополнительные документы по базовой установке и использованию. Используя MRU, потому что его было легко установить и использовать.
мош

1

:ls для вывода списка последних файлов с номером буфера в левом столбце.

Тогда сделай :b{buffer-number}прыжок туда.

Пример: :lsпоказывает список файлов. Я хочу перейти к третьему последнему посещенному мной файлу. :b3отвезет меня туда.

Для более быстрого поиска сопоставьте :lsчто-нибудь, например, <Leader>.в вашем файле .vimrc.


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