Подтвердить что ты не робот

Vim: Как прокручивать строку курсора тоже?

Два окна в режиме просмотра разделенных окон Vim могут быть связаны друг с другом для прокрутки, установив :set scrollbind для обоих из них. После этого, если я прокручу вниз курсор в одном окне, другие окна прокручиваются вместе с ним.

Но курсоры в двух окнах не связаны друг с другом. Я использовал :set cursorline, чтобы выделить текущую строку, на которой находится курсор. Как сделать выделенную курсорную строку для прокрутки одновременно в другом окне?

4b9b3361

Ответ 1

Я не использую это сам, и мне может не хватать точки, но

:set cursorbind

похоже, делает именно то, что вы хотите.

Ответ 2

Я столкнулся с одной и той же ситуацией (только для сравнения двух окон), и я сделал это:

: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 слишком сложно смотреть по какой-либо причине, я считаю, что этот параметр будет практически достаточно хорошим.

Ответ 3

Я придумал это решение, когда захотел выполнить "отслеживание столбцов в кросс-окнах" в сеансе 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>

Ответ 4

Я нашел эту страницу в документации vim, которая вам может показаться полезной: http://vimdoc.sourceforge.net/htmldoc/scroll.html#scroll-binding

Иногда я нахожу, что прямо из уст лошадей лучше всего.

Ответ 5

Я сделал небольшое изменение 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.