Откройте буфер как вертикальное разделение в VIM


176

Если вы редактируете файл в VIM, а затем вам нужно открыть существующий буфер (например, из списка буферов:), :buffersкак вы можете открыть его в вертикальном разделении?

Я знаю, что вы уже можете открыть его с нормальным разделением, как:

:sbuffer N

Здесь указан нужный Nвам номер буфера, однако вышеизложенное открывает этот Nбуфер по горизонтали, а не по вертикали.

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

Ctrl-W H
Ctrl-W L

Который будет вертикально разделять окно вправо или влево.

Мне кажется, что если есть, sbufferто должно быть, vsbufferно его не существует (не то, что я знаю)

Также обратите внимание, что я не ищу плагин для решения этого вопроса. Я знаю о множестве плагинов, которые позволят вам сделать это.

Я уверен, что я мог бы пропустить что-то, что уже есть.

РЕДАКТИРОВАТЬ: в лучшем духе сотрудничества, я создал простую функцию с сопоставлением, если кто-то еще сталкивается с этой проблемой и не хочет устанавливать плагин:

Функция:

" Vertical Split Buffer Function
function VerticalSplitBuffer(buffer)
    execute "vert belowright sb" a:buffer 
endfunction

Отображение:

" Vertical Split Buffer Mapping
command -nargs=1 Vbuffer call VerticalSplitBuffer(<f-args>)

Это решает задачу открытия буфера в правильном разделении, поэтому для буфера 1 вы бы назвали его следующим образом:

:Vbuffer 1

Ответы:


206

Пытаться:

:vert sb N

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

Чтобы открыть разделение справа, с другой стороны:

:vert belowright sb N

5
не кажется ли это странным, что нет vsbuffer N? Раздражает. Ваш ответ прибивает это. Спасибо!
Альфредодеза

13
Я всегда чувствую, что должно быть vsbufferтоже, и я часто забываю Ctrl-w Tоткрыть буфер на новой вкладке (или я хочу сделать это с буфером, который в данный момент не активен или не виден). Таким образом, в качестве альтернативы, вы можете использовать столбец для любого из этих случаев, который мне легче запомнить, чем правильный ответ @ Jeet: :vsp | b Nи :tabe | b N.
ches

Мне нравится, что эта команда позволяет Nавтозаполняться (что не представляется возможным с командой в другом ответе). Оба проголосовали, тем не менее.
Дэвид Риверс

124

:vsp | b1

1 является некоторым номером буфера. Используйте buffersдля перечисления всех буферов.

Вот некоторая дополнительная информация о разделении, если вам интересно. Ссылка на сайт


9
Вы также можете использовать :ls, что, кажется, ярлык для :buffers.
dskecse

3
Вы также можете сделать:vsp | b <buffer name>
Кенни Бамбридж

4
@KennyBambridge еще лучше - вам нужно только ввести часть имени буфера (чувствительно к регистру), а затем нажать
клавишу

Имейте в виду, что хотя ссылка, предоставленная @Jerinaw, хороша, терминология на этой странице серьезно вводит в заблуждение, поэтому вам необходимо прочитать комментарии на этой странице, чтобы уточнить.
NeilG

5

Вы можете облегчить свою боль, добавив следующее в ваш .vimrc

cabbrev vb vert sb

Теперь вы можете использовать его следующим образом.

:vb <buffer>

Это хорошо, расширенная версия также предлагает автозаполнение буфера! Я тоже не знал каббрев, спасибо.
kidpixo

2

Вы также можете комбинировать :lsсписок текущих буферов и команды, чтобы открыть нужный буфер в любом

  1. текущее окно: :b <N/bufname>
  2. вертикальное разделение: :vsp | b <N/bufname>
  3. горизонтальное разделение: :sp | b <N/bufname>

Для этого я добавил следующие сопоставления в свой ~/.vimrc(порядок сопоставлений представляет приведенный выше список нужных окон)

 nnoremap <leader>b :ls<cr>:b<space>
 nnoremap <leader>v :ls<cr>:vsp<space>\|<space>b<space>
 nnoremap <leader>s :ls<cr>:sp<space>\|<space>b<space>

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

  1. <leader>b
  2. <leader>v
  3. <leader>s

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

Я очерчен <leader>на ,основе на

let mapleader = ","

Для некоторых людей (например, для меня) это может даже заменить плагины, такие как MiniBufExpl, и, таким образом, сэкономить место на экране.


0

Вы можете использовать Neovim, вот так:

autocmd FileType python nmap <F5> :rightbelow vertical split <bar> :term python %<cr>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.