vim使用引线键重新映射折叠导航

vim使用引线键重新映射折叠导航,vim,Vim,我在vim中选择了上下跳跃闭合折叠: let mapleader = "," nnoremap <silent> <leader>zj :call NextClosedFold('j')<cr> nnoremap <silent> <leader>zk :call NextClosedFold('k')<cr> function! NextClosedFold(dir) let cmd = 'norm!z' . a:

我在vim中选择了上下跳跃闭合折叠:

let mapleader = ","
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
让mapleader=“,”
nnoremap zj:调用NextClosedFold('j')
nnoremap zk:调用NextClosedFold('k')
功能!NextClosedFold(目录)
让cmd='norm!z’。a:迪尔
let view=winsaveview()
让[l0,l,open]=[0,view.lnum,1]
而我l0&打开
exe命令
设[l0,l]=[l,线('.')]
让打开=折叠关闭(l)<0
循环结束
如果打开
调用winrestview(视图)
恩迪夫
端功能
如您所见,my
leader
键设置为

因此,现在如果我发出命令
,zj
我的光标将移动到下一个闭合的折叠处。但是,我想要的是将
zj
命令默认移动到下一个闭合折叠,并且我想要
,zj
移动到下一个折叠(打开或闭合)


编写重新映射以使我的vim按我所希望的方式运行的最优雅的方式是什么?

听起来您希望这样

nnoremap <silent> <leader>zj zj
nnoremap <silent> <leader>zk zk
nnoremap <silent> zj :call NextClosedFold('j')<cr>
nnoremap <silent> 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
nnoremap zj zj
nnoremap zk zk
nnoremap zj:调用NextClosedFold('j')
nnoremap zk:调用NextClosedFold('k')
功能!NextClosedFold(目录)
让cmd='norm!z’。a:迪尔
let view=winsaveview()
让[l0,l,open]=[0,view.lnum,1]
而我l0&打开
exe命令
设[l0,l]=[l,线('.')]
让打开=折叠关闭(l)<0
循环结束
如果打开
调用winrestview(视图)
恩迪夫
端功能
nnoremap
使映射成为非递归的,因此即使您重新定义了
zj
zk
所做的事情,也始终可以恢复它们的默认行为。然后我们将
zj
zk
映射到您想要的行为