1

В Vim у меня есть следующий набор для правильной мягкой обтекания строк:

set linebreak
set wrap

При одновременном прохождении нескольких строк неприятным побочным эффектом является то, что 5j не будет перемещать курсор вниз на 5 строк, а будет перемещать его вниз на 5 строк. Если у меня есть строка, мягко обернутая в 6 строк, если мой курсор находится на верхней строке, и я 5j я не буду опускаться вниз на 5 фактических строк, а скорее на нижнюю часть текущей строки, на 5 вниз линий.

Как я могу остановить это поведение, чтобы j перемещал курсор вниз на 1 строку дисплея (в мягком или ином виде), а 5j перемещал курсор вниз на 5 реальных строк?

1 ответ1

2

По умолчанию движения j и k всегда перемещаются по физическим линиям, а не по линиям экрана. Поэтому я думаю, что у вас должна быть карта типа nmap j gj где-то в вашем .vimrc.

Для поведения, которое вы хотите, у меня есть следующее .vimrc:

" Map j and k to gj/gk, but only when no count is given
" However, for larger jumps like 6j add the current position to the jump list
" so that you can use <c-o>/<c-i> to jump to the previous position
nnoremap <expr> j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj'
nnoremap <expr> k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .