Быстрое переключение буферов в нормальном режиме Vim - PullRequest
52 голосов
/ 06 апреля 2011

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

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

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

Ответы [ 11 ]

41 голосов
/ 06 апреля 2011

Добавьте это к вашему .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> ключ.

39 голосов
/ 06 апреля 2011

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

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

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

30 голосов
/ 06 апреля 2011

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

14 голосов
/ 06 апреля 2011

У меня есть следующие строки в .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 к предыдущему.

13 голосов
/ 13 апреля 2017

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

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

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

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

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

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

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

  1. С этот ответ У меня есть это в моем .vimrc:

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

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

  2. У меня также есть

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

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

12 голосов
/ 06 апреля 2011

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

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

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

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

6 голосов
/ 26 мая 2015

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

4Ctrl-^

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

:help CTRL-^

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

:buffers
6 голосов
/ 06 апреля 2011

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

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

2 голосов
/ 08 октября 2017

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

:Buffers

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

Также стоит отметить:

:Lines

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

2 голосов
/ 29 августа 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...