Как вы предпочитаете переключаться между буферами в Vim?

Я пробовал MiniBufExplorer, но я обычно заканчиваю несколькими окнами, показывающими его или вообще закрывая. Я бы хотел что-то вроде LustyJuggler с инкрементным поиском, как я переключаюсь между буферами в Emacs. Неужели есть script как это?

Ответ 1

Я использую Wincent Colaiuta Command-T vim plugin уже пару месяцев. Wincent написал части, которые должны быть быстрыми в C, и я должен сказать, что это так! И, я думаю, его логика соответствия шаблону файла еще лучше, чем Textmate Command-T. Проверьте screencast.

Плагин Command-T для VIM обеспечивает чрезвычайно быстрый, интуитивный механизм для открытия файлов с минимальным количество нажатий клавиш. Он назвал "Command-T", потому что он вдохновлен окно "Перейти к файлу", привязанное к Command-T в TextMate.

Файлы выбираются путем ввода символы, которые появляются на их пути, и упорядочиваются алгоритмом, который знает, что символы, которые появляются в в некоторых местах (например, сразу после разделителя путей) следует придавать больший вес.

Простое переключение буфера содержит много полезных советов. Я адаптировал следующее к моему .vimrc, который выполняет автоматическое завершение имени буфера, отображает наиболее полезные команды переключения буфера на мой <Leader> и левые клавиши на домашней строке и показывает текущий номер буфера в строке состояния:

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

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

Ответ 2

Я использовал комбинацию вкладок и нескольких экземпляров gvim, сохраняя группы связанных файлов в виде вкладок в каждом экземпляре. До тех пор, пока у меня не будет слишком много вкладок в одном экземпляре, панель вкладок покажет вам имя каждого редактируемого файла с первого взгляда.

Затем я прочитал сообщение Jamis Buck о том, как он переключил fuzzyfinder.vim, который дает вам автозаполнение поиска файлов в вашем текущем каталоге или буферах, которые вы в настоящее время открываете.

→ → fuzzyfinder_textmate, которые немного изменяют, как работает fuzzyfinder, чтобы вести себя как аналогичная функция в TextMate (насколько я могу судить, разница в том, что она совпадает в любом месте в имени файла, а не только с самого начала). Смотрите это видео, чтобы увидеть его в действии.

Теперь у меня только один экземпляр gvim, увеличен и разбит на несколько окон, чтобы сразу увидеть несколько файлов. Я привязал Ctrl-F к fuzzyfinder_textmate, так что теперь, если я наберу (скажем) Ctrl-F mod/usob, откроется приложение /models/user _observer.rb. Я больше никогда не беспокоюсь о вкладах.

Обновление 2010/08/07

В то время как fuzzyfinder_textmate остается удивительным, как отмечает Кейси в комментариях, он больше не поддерживается. Кроме того, он (и/или fuzzyfinder.vim) становится немного медленным и нестабильным при работе с большими проектами (много каталогов или файлов), поэтому я искал альтернативу.

К счастью, кажется, очень хорошая альтернатива в виде Wincent Colaiuta Плагин Command-T. Это очень похожее (если не немного лучше) поведение на fuzzyfinder_textmate, но заметно быстрее; он также имеет приятные функции, такие как возможность открыть найденный файл в разделенном или вертикальном разрезе. Спасибо (и отдайте!) Дэвиду Риверсу за то, что он указал на него.

Ответ 3

Я использую основы - ':ls' + ':bn'/':bp' + ':b <part-of-name>'

Ответ 4

Мне нравится "ctrl-w s" и "ctlr-w v", чтобы разбить окно. Затем я сопоставляю клавиши перемещения (h, j, k, l) с нажатой клавишей Ctrl для перемещения между разделенными окнами:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

При переносе моей руки на клавиши со стрелками раздражает.

Затем я установил ctlr-tab для переключения между буферами в текущем окне (как и в других средах):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Они работали очень хорошо для меня в течение последних нескольких лет, хотя у vim всегда есть больше секретов, чем вы можете знать.

Ответ 5

nmap <Leader>bb :ls<CR>:buffer<Space>

и никто не упомянул хороший плагин ctrlp.vim. Используя этот плагин, вы можете искать буфер по имени.

Ответ 6

Я использую

CTRL - J для следующего буфера

CTRL - K для предыдущего буфера

CTRL - L для следующей вкладки

CTRL - H для предыдущей вкладки

Вот конфигурация .vimrc:

map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
map <C-L> :tabn<CR>
map <C-H> :tabp<CR>

См. http://syskall.com/my-biggest-vim-productivity-boost/

Ответ 7

Недавно я стал более минималистичным.

Для циклических буферов я использую ]b и [b от unimpaired: https://github.com/tpope/vim-unimpaired

Чтобы перейти прямо в открытый буфер, просто используйте вкладку Vim tab с помощью :b. Несколько букв достаточно, чтобы добраться до любого открытого буфера с помощью вкладки или двух.

Аналогично открытым буферам я использую :e с относительными путями и вкладкой.

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

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

Все минибуфы, которые я пробовал, просто закончили раздражать меня, и я не хочу, чтобы какая-то умная штука открывала случайные файлы для меня. Если мне действительно нужно искать что-то, я использую NERDtree (:e .).

IDK, В последнее время я также сбросил Yankring (потому что он закручивает xp) и начал использовать регистры, и я недавно решил, что движения f/t - это самая великая вещь когда-либо...

Ответ 8

imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>

Ответ 9

Отличный Buffer Explorer, он получил такую ​​сильную мышечную память, что я хочу, чтобы я мог использовать его в других приложениях, Я считаю, что это очень быстро, когда вы активно редактируете более двух файлов.

Ответ 10

Я потратил немало времени на создание моего .vimrc для работы с этим проектом HTML:: Mason, с которым я работал четыре года, поэтому у меня есть странное сочетание вкладок и разделенных окон. Для вашего удовольствия:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

Ответ 11

Я использую tselectbuffer. Это очень быстро и в отличие от bufexplorer не занимает места в вашем окне. Он также имеет инкрементный поиск. Я попробовал minibufexplorer, и я обнаружил, что навигация в буфере немного сложна.

Ответ 12

Чтобы перечислить и переключить между буферами, я использую:

nnoremap <Leader>l :ls<CR>:b<space>

Для переключения между буферами:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>

Ответ 13

Я сопоставил <S-J> и <S-K> с :bp и :bn, хотя я признаю, что не использую его, поскольку количество файлов больше 10. Я тогда отобразил <C-J> и <C-K> на предыдущий и следующий вкладки Gnome Terminal, и я обычно запускаю 4 экземпляра vim для каждого из четырех различных проектов, над которыми я работаю. Я по-прежнему желаю, чтобы следующий и предыдущий буфер переходили к истории буферов, над которыми я работал, а не к списку его буферов.

Ответ 14

Я использую tselectbuffer. Это очень быстро и в отличие от bufexplorer не занимает места в вашем окне. Он также имеет инкрементный поиск. Я попробовал minibufexplorer, и я нашел навигацию в буфере немного сложнее.

Ответ 15

Я использую simple: vsplit с ^ W + w/^ W + r и: tabnew с комбинациями клавиш Ctrl + Alt + PgUp/PgDown.

Ответ 16

Когда на сеансе Vim открыто несколько буферов, может быть сложно отслеживать буферы и их соответствующие номера буферов. Если это так, переключение на другой файл можно упростить с помощью простой карты:

: nnoremap (F5): буферы (CR): буфер (пробел)

vim.wikia.com