Vim: Как прокрутить строку курсора? - PullRequest
13 голосов
/ 08 марта 2011

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

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

Ответы [ 5 ]

16 голосов
/ 08 марта 2011

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

:set cursorbind

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

6 голосов
/ 24 ноября 2013

Я только что столкнулся с той же ситуацией (только с двумя окнами для сравнения), и то, что я сделал, было:

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

4 голосов
/ 04 мая 2014

Я пришел к этому решению, когда хотел выполнить «отслеживание столбцов между окнами» в сеансе 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>
2 голосов
/ 29 декабря 2011

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

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

1 голос
/ 19 ноября 2014

Я внес небольшое изменение в ответ cychoi . Переназначить h,j,k,l в режиме сравнения и удалить удар 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...