Как вы предпочитаете переключаться между буферами в Vim?
Вопрос
я пробовал МиниБуфПроводник, но обычно я его показываю в нескольких окнах или вообще закрываю.Мне бы хотелось что-то вроде ЛастиЖонглер с инкрементальным поиском — способ переключения между буферами в Emacs.Наверняка есть такой скрипт?
Решение
Я пользуюсь плагином Command-T vim Винсента Колаюты уже пару месяцев. Винсент написал части этого, которые должны быть быстрыми в C, и я должен сказать, что это так! И я думаю, что его логика сопоставления с образцом файла даже лучше, чем в Textmate Command-T. Ознакомьтесь с скринкаст .
Плагин Command-T для VIM обеспечивает чрезвычайно быстрый, интуитивно понятный механизм для открытия файлов с минимальным количество нажатий клавиш. Это называется & Quot; & Command-T Quot; потому что это вдохновлено " Перейти в файл " окно привязано к Command-T в TextMate.
Файлы выбираются путем ввода символы, которые появляются на их пути, и упорядочены по алгоритму, который знает, что символы, которые появляются в определенные места (например, сразу после пути разделитель) должно быть уделено больше веса.
Упрощенное переключение буфера содержит множество полезных советов. Я адаптировал следующее к моему .vimrc, который выполняет автозаполнение имени буфера, отображает наиболее полезные команды переключения буфера на мой & Lt; Leader & Gt; и левые клавиши домашней строки, и показывает текущий номер буфера в строке состояния:
"" 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 , который предоставляет компактный список каждого перечислил буфер в его собственной горизонтальной верхней части.
Другие советы
Раньше я использовал комбинацию вкладок и несколько экземпляров gvim, сохраняя группы связанных файлов в виде вкладок в каждом экземпляре.Пока у меня не получилось слишком много вкладок в одном экземпляре, панель вкладок сразу показывает имя каждого файла, который вы редактируете.
Затем я прочитал пост Джеймиса Бака о том, как он перешел из TextMate обратно в vim, и научился нескольким замечательным трюкам:
- Ctrl-w s и Ctrl-w v, чтобы разделить текущее окно
- Ctrl-6 для переключения между двумя буферами в одном окне.
- удивительным fuzzyfinder.vim который дает вам автозаполнение поиска файлов в вашем текущем каталоге или буферов, которые вы в данный момент открыты
- собственный fuzzy_file_finder и fuzzyfinder_textmate, которые немного изменяют работу fuzzyfinder, чтобы он больше походил на аналогичную функцию в TextMate (насколько я могу судить, разница в том, что она соответствует где угодно в имени файла, а не только с начала).Смотреть это видео чтобы увидеть это в действии.
Теперь у меня есть только один экземпляр gvim, развернутый и разделенный на несколько окон, чтобы я мог видеть несколько файлов одновременно.Я привязал Ctrl-F к fuzzyfinder_textmate, так что теперь, если я наберу (скажем) Ctrl-F mod/usob
он открывает app/models/user_observer.rb.Я почти никогда больше не заморачиваюсь с вкладками.
Обновление 2010/08/07
Хотя fuzzyfinder_textmate остается потрясающим, как отмечает Кейси в комментариях, он больше не поддерживается.Кроме того, он (и/или fuzzyfinder.vim) работает немного медленно и нестабильно при работе с большими проектами (множество каталогов или файлов), поэтому я искал альтернативу.
К счастью, кажется, есть очень хорошая альтернатива в виде Винсент Колайута's Плагин Command-T.Поведение очень похоже (если не немного лучше) на fuzzyfinder_textmate, но заметно быстрее;у него также есть приятные функции, такие как возможность открыть найденный файл в виде разделения или вертикального разделения.Спасибо (и голосуем!) Дэвиду Риверсу за указание на это.
Я использую основы - ':ls
' + ':bn
' / ':bp
' + ':b <part-of-name>
'
Мне нравится " 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 всегда есть больше секретов, чем вы можете знать.
nmap <Leader>bb :ls<CR>:buffer<Space>
и никто не упомянул хороший плагин ctrlp.vim . С помощью этого плагина вы можете искать буфер по имени.
Я использую
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- увеличение /
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>
Я недавно стал более минималистичным.
Для циклического использования буферов я использую ] b и [b из неповрежденных: https://github.com/tpope/vim-unimpaired р>
Чтобы перейти прямо к открытому буферу, используйте завершение вкладки Vim с помощью : b . Достаточно нескольких букв, чтобы попасть в любой открытый буфер с одной или двумя вкладками.
Аналогично для открытия буферов я использую : e с относительными путями и завершением табуляции.
Я также иногда использую : ls , чтобы посмотреть, какие буферы у меня открыты (и проверить их измененный статус).
Чтобы избавиться от буфера, я использую : bw , чтобы стереть буфер. Я обычно делаю временное разделение и изменяю буферы, чтобы сохранить мой макет, так как : bw также закрывает активное окно.
Все то, что я пробовал в мини-буфере, просто раздражало меня, и я не хочу, чтобы какая-то умная вещь открывала мне случайные файлы. Если мне действительно нужно что-то найти, я использую NERDtree (: e. ).
IDK, в последнее время я также отбросил Янкринг (потому что он испортил xp ) и начал использовать регистры, и недавно я решил f / t движения - величайшая вещь когда-либо ...
Превосходный Буферный обозреватель . такая сильная мышечная память, что я чувствую, что хочу использовать ее в других приложениях. Я считаю, что это очень быстро при активном редактировании более двух файлов.
Я потратил довольно много времени на создание своего .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>
Я использую tselectbuffer . Это действительно быстро и в отличие от bufexplorer не занимает места в вашем окне. У него также есть пошаговый поиск. Я попробовал минибуфэксплорер и нашел навигацию в буфере немного сложной. Р>
Для перечисления и переключения между буферами, которые я использую:
nnoremap <Leader>l :ls<CR>:b<space>
Для переключения между буферами:
map <Leader>n :bn<CR>
map <Leader>p :bp<CR>
Я сопоставил < S-J >
и < S-K >
с : bp
и : bn
, хотя я признаю, что не использую его, поскольку число файлов больше 10. Затем я сопоставил < C-J >
и < C-K >
к предыдущей и следующей вкладкам Gnome Terminal, и я обычно запускаю 4 экземпляра vim для каждого из 4 различных проектов, над которыми я работаю. Я все еще очень хочу, чтобы следующий и предыдущий буферы обращались к истории буферов, над которыми я работал, а не к порядку в списке буферов.
Я использую tselectbuffer. Это действительно быстро и в отличие от bufexplorer не занимает места в вашем окне. У него также есть инкрементный поиск. Я попробовал минибуфэксплорер и нашел навигацию в буфере немного сложной.
Я использую простые: vsplit с ^ W + w / ^ W + r и: tabnew с комбинациями клавиш Ctrl + Alt + PgUp / PgDown.
Когда в сеансе Vim открыто несколько буферов, может возникнуть проблема с отслеживанием буферов и их соответствующих номеров буферов. В этом случае переключение на другой файл можно упростить с помощью простой карты:
: nnoremap (F5): буферы (CR): буфер (пробел)