5

В vim, как я могу переместить курсор вниз (или вверх) к первой строке, содержащей непустой символ в том же столбце?

Например, в следующем тексте:

item1
    item2
    item3
item4
    item5
    item6

Если курсор находится на e в item1 , переместите курсор на e в item4 .

Если на m в item3 , перейдите к m в item5 .

К вашему сведению, я ищу быстрый и эффективный способ навигации по форматированному тексту.

(PS Это пробелы, а не табуляции.)

3 ответа3

2

Вы можете использовать следующие сопоставления для этого. (Могут быть некоторые крайние случаи, о которых я не думал)

nnoremap <leader>d m':exec '/\%' . col(".") . 'c\S'<CR>``n
nnoremap <leader>u m':exec '?\%' . col(".") . 'c\S'<CR>``n

Важная часть :exec '/\%' . col(".") . 'c' Это соответствует текущему столбцу. Это взято непосредственно из :h %c . Затем я добавил \S для соответствия без пробелов. m' и `` используются для хранения текущей позиции и восстановления ее вокруг оператора execute. Это необходимо, поскольку использование execute помещает нас в начало строки, что может привести к ошибочному поведению (в некоторых случаях пропуск слишком большого количества строк). После выполнения этого я иду на первый матч с n . Единственная разница между версией вверх и вниз заключается в том, в каком направлении мы ищем / вниз, и ? наверх.

Если вы хотите сделать это с виртуальными столбцами (т. Е. Вкладками), замените \%c на \%v .

2

Мой плагин JumpToVerticalOccurrence предоставляет ]| и [| отображения, которые обеспечивают именно это, поддерживая [count] и не перекрывая текущий шаблон поиска.

0

Если вы хотите это для кода или файлов конфигурации с определенной системой отступов (при условии, что это относится к "форматированному тексту"), jeetsukumaran/vim-indentwise хорошо работает для относительных, абсолютных перемещений или перемещений в пределах блока между отступами блоков.

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