修改 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

相關內容