1) С помощью команд {и} в vim я могу перейти к предыдущей или следующей полностью пустой строке (или началу или концу файла). Как мне изменить эти команды, чтобы перейти к предыдущей или следующей строке, которая была бы полностью пустой или содержала только пробел (или начало, или конец файла)?

2) Как создать команды для перехода к началу или концу текущего блока кода, определенного текущим отступом? Например, я хочу легко перейти от строки F к строке D или G (или к строке C или H):

A
  B
  C
    D
    E
    F
    G
  H
I

2 ответа2

2

Вопрос 1 кажется относительно простым (и мой ответ, вероятно, немного наивным):

nnoremap } /^\s*$<CR>
nnoremap { ?^\s*$<CR>

Но вы должны найти другой ярлык, я думаю.

Также у вас уже есть gg для перехода к первой строке буфера и G для перехода к его последней строке. Разве этого не достаточно?

Я не знаю, как ответить на вопрос 2 простым способом. Вы пробовали vim-indent-object?

1

Комбинируя отличные советы от romainl и garyjohn, я получил именно ту функциональность, которую искал для первой части:

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

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