vvpoloskin
@vvpoloskin
Инженер связи

Как быстро переключать буфферы в VIM?

Постоянные пользователи VIM, а ну-ка расскажите, как настроили под себя VIM для быстрого переключения буферов и какие плагины используете. Я использую плагин minibufexplorer и нижеприведенные маппинги для команд. Может у кого есть варианты поинтереснее?

set hidden
nnoremap <Leader>l :ls<CR>
nnoremap <Leader>p :bp<CR>
nnoremap <Leader>n :bn<CR>
nnoremap <Leader>g :e#<CR>
nnoremap <Leader>1 :1b<CR>
nnoremap <Leader>2 :2b<CR>
nnoremap <Leader>3 :3b<CR>
nnoremap <Leader>4 :4b<CR>
nnoremap <Leader>5 :5b<CR>
nnoremap <Leader>6 :6b<CR>
nnoremap <Leader>7 :7b<CR>
nnoremap <Leader>8 :8b<CR>
nnoremap <Leader>9 :9b<CR>
nnoremap <Leader>0 :10b<CR>
nnoremap <Leader>b :ls<CR>:b<Space>
  • Вопрос задан
  • 1178 просмотров
Пригласить эксперта
Ответы на вопрос 4
@SilentFl
если конкретно по буферам - то я использую их только в варианте :b part_of_filename
а если по навигации в целом - то у меня открыто несколько табов (gt), окна поделены (благо монитор большой), переходы по файлам и классам (gf), плюс в основном работаю с рельсой - юзаю rails.vim, который дает переходы между контроллерами/вьюхами/моделями как :Eview, :Econtroller и прочее. ну и nerdtree для навигации по фс
Ответ написан
031071
@031071
с 2015 г изучаю веб.разработку.
:ls - посмотреть все буферы;
:ls :b1 (к примеру) - посмотреть все открытые, сразу перейти;
:bf - b - буфер, f - first;
:bl - - , - ;
:b1 - если известен номер необходимого;
:ls :b name file;
Ответ написан
@nrgian
https://habr.com/ru/company/mailru/blog/340740/
FZF сопровождается базовым Vim-плагином, но его функциональность минимальна, так что FZF.vim предназначен для предоставления всех нужных вам возможностей. Самые полезные команды — :Buffers, :Files и :Tags, я привязал их к ;, ,t и ,r соответственно:

nmap ; :Buffers
nmap t :Files
nmap r :Tags

Для меня важна привязка ;, потому что я живу буферами. Я практически не использую вкладки — об этом поговорим ниже, — поэтому мне важно, что я могу с минимальными усилиями переключаться на то, о чём размышляю.



Буферы, буферы, буферы

Я убеждённый сторонник использования буферов. Я пытался работать с вкладками, но не нашёл в них пользы. Вкладки — это дополнительный способ спрятать информацию, а чтобы в них переходить, нужно запоминать дополнительные сочетания клавиш или команды. Если у вас tmux, то проще открыть в другой панели Vim. А если вы хорошо используете буферы, то можно легко получить нужный файл в несколько нажатий кнопок — при помощи FZF, как описано выше.

С буферами легко разобраться: после запуска Vim любой открытый или созданный вами файл превращается в именованный буфер. Вы можете просматривать их с помощью команды :buffers и перемещаться к какому-то из них с помощью :buf , где — любая часть имени файла буфера. Либо с помощью номеров, которые выводятся по команде :buffers.

Если вы запускаете Vim из командной строки с несколькими файлами в виде аргументов, то каждый файл уже будет открыт в буфере. Если вы установили vim-unimpaired, то для простой навигации между буферами помогут биндинги [b и ]b.

Я существенно ускорил этот процесс, забиндив на клавишу ; FZF-команду :Buffers, так что по одному нажатию кнопки получаю список буферов с функцией нечёткого поиска. Например, если я открыл в командной строке три файла vim foo.txt bar.txt quux.txt, то для перехода к quux.txt достаточно набрать ;qEnter. (Да, похоже на использование :buf, но FZF показывает живой предпросмотр, когда у вас открыто много файлов с похожими названиями.)

Иногда я случайно создаю буферы, например, когда пытаюсь открыть файл, ввожу :e и слишком быстро жму Enter. Команду :bd можно использовать для стирания буфера и удаления его из списка, но тогда ещё закроется окно Vim или сплит, в котором открыт этот буфер. Хорошее решение — bufkill.vim, предоставляющий :BD для стирания текущего буфера и сохранения открытым текущего окна. Я часто им пользуюсь, поэтому привязал к Meta-w.

Если нужно переименовать, сделать chmod или удалить файл, то можете перейти в терминал и внести изменение, но тогда буфер Vim перестанет быть синхронизирован и покажет раздражающее предупреждение «File is no longer available». Лучше взять NERDTree и подсвечивать текущий файл с помощью :NERDTreeFind, нажав m для изменения и выбрав действие вроде перемещения или переименования. Я предпочитаю vim-eunuch, добавляющий ряд команд: :Chmod применяет chmod к текущему файлу, :Rename переименовывает файл в его родительской директории, :Move может перемещать файл в другое место, а :Delete удалит файл и буфер. Есть ещё несколько команд, но к этим я прибегаю чаще всего.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы