Когда я открываю вертикальное разбиение в vim, он берет мою текущую строку и поднимает ее до верхней части буфера (прокручивая весь файл вверх). Как мне получить vim, чтобы сохранить свою текущую позицию?
2 ответа
РЕДАКТИРОВАТЬ: РЕАЛЬНЫЙ ОТВЕТ: см. Https://stackoverflow.com/questions/9625028/vim-buffer-position-change-on-window-split-annoyance
TLDR: это происходит только при первом создании нового окна. Если вы закроете окно и сделаете это снова, курсор в новом буфере будет таким же, как в старом буфере. Ответ на этот вопрос заключался в том, чтобы сделать что-то бесполезное, которое откроет, затем закроет окно, а затем сделать вертикальное разделение.
Вот еще одно сопоставление .vimrc
которое оборачивает ответ от stackoverflow, чтобы сделать это для вас:
map <C-S-O> :tabnew<CR>bwipeout<CR>:vs<CR>
Поэтому, когда вы нажимаете ctrl-shift-o
он открывает новую пустую вкладку (:tabnew<CR>
), удаляет буфер (:bwipeout<CR>
) и затем выполняет вертикальное разделение (:vs<CR>
)
Надеюсь, что это лучше - отлично работает для меня. Спасибо, что заставили меня захотеть найти что-то полезное, чтобы обойти это раздражающее поведение!
Это происходит со мной все время! Недавно я пришел с ответом, который работает большую часть времени (хотя лучше, чем ничего). Поместите это в ваш .vimrc
:
map <C-S-O> mmH:vs<CR>`m<C-W>l`m<C-W>h
Каждый раз, когда вы нажимаете ctrl+shift+o
он должен выполнять вертикальное разбиение и помещать курсор на ту же строку и столбец, в котором он находился, в исходном буфере до разделения.
Поведение в vim
которое пытается обойти это, - это когда буфер, который вы редактируете, больше, чем может отображаться в данный момент. В зависимости от того, где находится курсор в буфере (точно в середине, в верхней половине, в нижней половине), после того, как вы выполните a :vs
(вертикальное разделение), он будет прокручивать новый буфер вниз или вверх, туда, где он считает себя лучшим.
Отображение .vimrc
выше делает:
map <C-S-O> map ctrl-shift-o to run this
mm mark the current cursor position
H move the cursor to the top of
the buffer
:vs<CR> do a vertical split
`m move to line and column of mark
<C-W>l move focus to the right to the
original buffer
`m move the cursor in the orig buffer
back to the marked position
<C-W>h move back to the new buffer on
the left
Опять же, это работает для меня большую часть времени, не уверен, почему это не работает все время. В любом случае, надеюсь, это помогло некоторым
Это может произойти, потому что у вас есть длинные линии, которые сгруппированы по вертикали. Если вы :set nowrap
а затем :vsp
вы заметите, что этого не происходит.