1) С помощью команд { и } в vim я могу перейти на предыдущую или следующую полностью пустую строку (или начало или конец файла). Как мне изменить эти команды, чтобы перейти на предыдущую или следующую строку, которая полностью пуста или содержит только пробелы (или начало или конец файла)?
2) Как создать команды для перехода к началу или концу текущего блока кода, определенного текущим отступом? Например, я хочу легко перейти от строки F к строке D или G (или к строке C или H):
A
B
C
D
E
F
G
H
I
решение1
Вопрос 1 кажется относительно простым (и мой ответ, вероятно, немного наивен):
nnoremap } /^\s*$<CR>
nnoremap { ?^\s*$<CR>
Но я думаю, вам следует найти другой короткий путь.
Также вам уже нужно gg
перейти на первую строку буфера и G
перейти на его последнюю строку. Разве этого не достаточно?
Я не знаю, как ответить на вопрос 2 простым языком. Вы пробовалиvim-indent-объект?
решение2
Объединив замечательные советы romainl и garyjohn, я получил именно ту функциональность, которую искал для части №1:
nnoremap <silent> { :call MyPrevParagraph()<CR>
nnoremap <silent> } :call MyNextParagraph()<CR>
function MyNextParagraph()
let myline = search('^\s*$', 'W')
if myline <= 0
execute 'normal! G$'
else
execute 'normal! '.myline.'G0'
endif
endfunction
function MyPrevParagraph()
let myline = search('^\s*$', 'bW')
if myline <= 0
execute 'normal! gg0'
else
execute 'normal! '.myline.'G0'
endif
endfunction