![修改 vim 段落跳轉指令到包含空格的行或程式碼區塊](https://rvso.com/image/1313355/%E4%BF%AE%E6%94%B9%20vim%20%E6%AE%B5%E8%90%BD%E8%B7%B3%E8%BD%89%E6%8C%87%E4%BB%A4%E5%88%B0%E5%8C%85%E5%90%AB%E7%A9%BA%E6%A0%BC%E7%9A%84%E8%A1%8C%E6%88%96%E7%A8%8B%E5%BC%8F%E7%A2%BC%E5%8D%80%E5%A1%8A.png)
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