Подтвердить что ты не робот

Быстрое переключение буферов в обычный режим Vim

Недавно я узнал, что я "неправильно использует вкладки" в Vim. Я пытаюсь просто использовать буферы в Vim, поскольку с помощью MiniBufExplorer, но я нахожу это болезненным из-за того, сколько нажатий клавиш требуется изменить буферов из обычного режима. С вкладками я могу просто сделать g t или g t для перехода назад и вперед между вкладками в нормальном режиме, и я также могу сделать NUMBER g t, чтобы перейти к конкретному вкладка.

С буферами я либо должен войти в командный режим с помощью :bn, :bp, либо с помощью MiniBufExplorer, используйте Ctrl + k или Ctrl + Up для перехода к окну буфера, прокрутите влево или вправо с помощью h и l, а затем нажмите Enter, чтобы выбрать нужный буфер. Или я могу сделать что-то, связанное с лидера, но это всегда требует удаления нескольких пальцев из домашней строки. Это настоящая боль.

Как я могу получить что-то эквивалентное переключение вкладок в нормальном режиме для переключения буферов в нормальном режиме, поэтому я могу сделать что-то вроде g n/g p для :bn/:bp и NUMBER g n для :buf NUMBER?

4b9b3361

Ответ 1

Добавьте это в свой .vimrc

map gn :bn<cr>
map gp :bp<cr>
map gd :bd<cr>  

Обратите внимание, что вы переназначаете gp и gd, но, возможно, вас это не волнует (:help gp, :help gd).

Для получения дополнительной информации о том, как сопоставить штрихи клавиш, см. :help map-overview и :help map.txt.

Кстати, я лично использую <leader> вместо g в отображении. Мой <leader> установлен на ;. Это помещает мой ключ <leader> в домашнюю строку, что заставляет меня отображать все виды вещей, используя <leader>. :help mapleader, если вы хотите изменить свой <leader> ключ.

Ответ 2

Обычно я переключаюсь между буферами - это использовать команду :buffer со встроенным автозаполнением, например. :b prof<Tab> для перехода на folder/path/LoginProfileFactory.php.

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

Реже, я действительно помню числа буферов, которые я хочу, и использую что-то вроде :b 3 или :3b. Я вижу, вы упоминаете, что вам не нравится :buf 3, хотя Rumple Stiltskin имеет альтернативу стилю :3b, который вы можете предпочесть.

Ответ 3

` Ctrl- ^ ' переключается на нумерованный буфер.

Ответ 4

У меня есть следующие строки в .vimrc:

nnoremap  <silent>   <tab>  :if &modifiable && !&readonly && &modified <CR> :write<CR> :endif<CR>:bnext<CR>
nnoremap  <silent> <s-tab>  :if &modifiable && !&readonly && &modified <CR> :write<CR> :endif<CR>:bprevious<CR>

Теперь вкладка позволяет перейти к следующему буферу и Shift-Tab к предыдущему.

Ответ 5

Это основано на ответе Ника Ноулсона, но я хотел бы расширить свой комментарий там...

Введите :b <Tab> (обратите внимание на пробел), затем прокрутите открытые буферы с помощью Tab или /.

... что приближает нас к Ctrl + Tab во всех других редакторах и браузерах, которые я использую.

На самом деле это даже лучше, в некоторых случаях вы можете двигаться вперед и назад с помощью стрелок /. Он избегает большого пальца + пальца, чтобы набрать Ctrl + Shift + Tab, чтобы вернуться назад через вкладки в редакторах и браузерах.

NB Shift + Tab делает то же самое, что и Tab

Тогда это на самом деле что-то вроде Win + Tab в Windows 10, где, как только вы впервые открываете окно, вы можете перемещаться с помощью клавиш со стрелками.

Редактировать: у меня есть еще два трюка, которые я выбрал для использования буферов:

  1. Из этого ответа у меня есть это в моем .vimrc:

    nnoremap <leader>bb :buffers<cr>:b<space> 
    

    он открывает команду :ls/:buffers и предварительно вводит :b так что вам просто нужно ввести номер буфера, так как вы увидите список со всеми буферами и их номерами.

  2. у меня тоже есть

    nnoremap <leader><tab> :b#<cr>
    

    который переключается между текущим и последним используемыми буферами, это немного похоже на выполнение cd - при переключении между каталогами и обратно

Ответ 6

Я использую плагин unimpaired.vim

он определяет сопоставления [b и ]b, которые переходят в предыдущий и следующий буфер в списке.

Для прыжка для конкретного буфера наилучшим вариантом, который я знаю, является тот, который вы упомянули: :b<number>

Если вы перейдете в другой буфер, вы можете быстро вернуться, набрав <c-^>

Ответ 7

Я использую LustyExplorer: я нажал <leader>b, чтобы открыть список буферов, а затем пару букв из имени буфера, который я хочу для открытия тогда enter. Легко.

Но вы не используете неправильно вкладки, вы используете вкладки так, как хотите. Если бы это сработало для вас, почему нужно пройти через боль, чтобы разобраться в своем пути, чтобы научиться "правильному пути"?

Ответ 8

Расширяя ответ Rumple Stiltskin, если вы знаете, что файл, к которому вы хотите получить, находится, например, в буфере 4, вы можете быстро туда добраться с помощью

4Ctrl-^

На моей британской клавиатуре я действительно могу сделать 4Ctrl-6, как объяснено в

:help CTRL-^

Кстати, вы можете увидеть номера буфера с

:buffers

Ответ 9

Я использую F9 и F10 для перемещения между предыдущим/следующим буфером с помощью этого сопоставления:

map <F9> :bprevious<CR>
map <F10> :bnext<CR>

Для меня это самый быстрый способ переключения буферов.

Ответ 10

fzf.vim - еще один быстрый способ изменения буферов с использованием нечеткого соответствия. Этот плагин поставляется с командой по умолчанию:

:Buffers

который открывает список всех открытых буферов, похожих на: ls, но буфер можно (нечетко) искать и выбирать. Открытие буфера в текущем окне осуществляется через enter, но его можно также открыть в новом расколе (h или v) или вкладке, используя ^ X ^ V или ^ T соответственно.

Примечательно также:

:Lines

Позволяет искать содержимое всех открытых буферов. Это может быть удобно, если вы забудете имя буфера, но знаете, что он должен содержать.

Ответ 11

Я думаю, bufexplorer - хороший плагин для использования. <leader> b e выводит интерактивный буферный проводник, в котором перечислены все открытые буферы. Вы можете быстро перемещаться по списку, а Enter помещает вас в выбранный буфер. В отличие от LustyExplorer Он не имеет никакого отношения к ruby.