vim使用引线键重新映射折叠导航
我在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:
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(视图)
恩迪夫
端功能
如您所见,myleader
键设置为,
因此,现在如果我发出命令,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
映射到您想要的行为