Ответ 1
Я не использую это сам, и мне может не хватать точки, но
:set cursorbind
похоже, делает именно то, что вы хотите.
Два окна в режиме просмотра разделенных окон Vim могут быть связаны друг с другом для прокрутки, установив :set scrollbind
для обоих из них. После этого, если я прокручу вниз курсор в одном окне, другие окна прокручиваются вместе с ним.
Но курсоры в двух окнах не связаны друг с другом. Я использовал :set cursorline
, чтобы выделить текущую строку, на которой находится курсор. Как сделать выделенную курсорную строку для прокрутки одновременно в другом окне?
Я не использую это сам, и мне может не хватать точки, но
:set cursorbind
похоже, делает именно то, что вы хотите.
Я столкнулся с одной и той же ситуацией (только для сравнения двух окон), и я сделал это:
:set cursorbind
:set scrollbind
:set cursorline
а затем
:map <Down> j<C-w><C-w><C-w><C-w>
:map <Up> k<C-w><C-w><C-w><C-w>
Это приводит к тому, что каждое нажатие стрелок вверх или вниз переключается между окнами один раз, что обновляет позицию курсора в другом окне (вы можете :redraw!<CR>
вместо уродливого переключения окон, но это выглядит плохо при перемещении слишком быстро). Конечно, существует множество способов перемещения между строками без стрелок, поэтому это далеко не идеально.
Однако, поскольку это не основной способ работы для меня, полезно в первую очередь для сравнения файлов, на которых diff
слишком сложно смотреть по какой-либо причине, я считаю, что этот параметр будет практически достаточно хорошим.
Я придумал это решение, когда захотел выполнить "отслеживание столбцов в кросс-окнах" в сеансе vimdiff
(в дополнение к "отслеживанию строк в нескольких окнах" ). Вероятно, это также решит вашу проблему.
Сначала включите cursorcolumn
, cursorbind
, cursorline
и scrollbind
в каждом окне.
:windo set cursorcolumn | set cursorbind | set cursorline | set scrollbind
Затем map
клавиши перемещения hjkl
для изменения положения курсора для каждого движения.
:nmap h h:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
:nnoremap j j:let curwin=winnr()<CR>:keepjumps windo redraw<CR>j:execute curwin . "wincmd w"<CR>
:nmap k k:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
:nmap l l:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
Я нашел эту страницу в документации vim, которая вам может показаться полезной: http://vimdoc.sourceforge.net/htmldoc/scroll.html#scroll-binding
Иногда я нахожу, что прямо из уст лошадей лучше всего.
Я сделал небольшое изменение cychoi
answer. Remap h,j,k,l
в режиме diff и удалите "j" в исходном сопоставлении cychoi
:
if &diff
au VimEnter * windo set cursorcolumn | set cursorbind | set cursorline | set scrollbind
nmap h h:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
nmap j j:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
nmap k k:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
nmap l l:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
endif
Я думаю, что этот параметр хорош для линейного разбора CSV.