![](/img/trans.png)
[英]Can I remap the “,” command in VIM before using it as the leader key?
[英]vim remap fold navigation using leader key
我选择了这个方便的功能来跳过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
正如你所看到的,我的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
和zk
,也始终可以恢复其默认行为。 然后,我们只需将zj
和zk
映射到所需的行为即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.