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>
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 удалит файл и буфер. Есть ещё несколько команд, но к этим я прибегаю чаще всего.