在Vim中,我經常發現自己想要做一個快速žķ或žĴ跳轉到上一個或下一個摺疊在一個文件中。問題是,我經常想跳過所有打開的摺疊,並跳到最近的封閉摺疊。是否有可能跳到Vim中的關閉摺疊?
有沒有辦法做到這一點?我在手冊中沒有看到內置的鍵盤映射。
在Vim中,我經常發現自己想要做一個快速žķ或žĴ跳轉到上一個或下一個摺疊在一個文件中。問題是,我經常想跳過所有打開的摺疊,並跳到最近的封閉摺疊。是否有可能跳到Vim中的關閉摺疊?
有沒有辦法做到這一點?我在手冊中沒有看到內置的鍵盤映射。
讓我建議實現上述行爲的以下映射。
nnoremap <silent> <leader>zj :call NextClosedFold('j')<cr>
nnoremap <silent> <leader>zk :call NextClosedFold('k')<cr>
function! NextClosedFold(dir)
let cmd = 'norm!z' . a:dir
let view = winsaveview()
let [l0, l, open] = [0, view.lnum, 1]
while l != l0 && open
exe cmd
let [l0, l] = [l, line('.')]
let open = foldclosed(l) < 0
endwhile
if open
call winrestview(view)
endif
endfunction
不,沒有(據我所知)一種構建方法來做到這一點。雖然有趣的想法。
如果我在此刻一段時間,我可能會嘗試找出一個辦法做到這一點 - 可惜的是,忙碌現在我可以建議你是看Detecting a folded line or an incremental search問題(特別是foldclosed
功能)並嘗試自己做一個功能。檢查每一行,如果摺疊打開,跳過...沿着這些行。
令人敬畏。奇蹟般有效。非常感謝! – David 2012-02-23 17:11:58
@David:謝謝!我對代碼進行了重構,以簡化跳轉循環,並在所需方向沒有關閉摺疊的情況下將光標保持在原位。 (後者的行爲符合'zj' /'zk'命令的行爲,當在下面/上面找不到摺疊時。) – 2012-02-24 07:11:37
@ib。你能否提供更改後的腳本? – 2016-08-23 09:57:23