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

132

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

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

Мерт Нухоглу
источник
Подобно вопросу: stackoverflow.com/questions/309723/…
malgca

Ответы:

229

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

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

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

sarnold
источник
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затем нажмите номер, соответствующий файлу, который вы хотите открыть.

nenchev
источник
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
user886333
источник
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.

Брайан Перес
источник
1

Также вы можете вернуться с помощью ctrl+ O.

IvanDi
источник