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

StackOverflow https://stackoverflow.com/questions/327411

  •  11-07-2019
  •  | 
  •  

Вопрос

я пробовал МиниБуфПроводник, но обычно я его показываю в нескольких окнах или вообще закрываю.Мне бы хотелось что-то вроде ЛастиЖонглер с инкрементальным поиском — способ переключения между буферами в 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): буфер (пробел)

vim.wikia.com

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top