修改 vim 段落跳转命令为包含空格的行或代码块

修改 vim 段落跳转命令为包含空格的行或代码块

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 缩进对象

答案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

相关内容