Как заставить vim сохранить позицию курсора при открытии сплита
Когда я открываю вертикальное разбиение в 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
это пытается обойти, когда буфер, который вы редактируете, больше, чем может отображаться в данный момент. В зависимости от того, где находится курсор в буфере (точно в середине, в верхней половине, в нижней половине), как только вы сделаете :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
Вы заметите, что этого не происходит.