例如,另一个带有映射k的三元运算符:
nnoremap <expr> k (v:count == 0 ? 'gk' : 'k')
nnoremap <expr> j (v:count == 0 ? 'gj' : 'j')
当你在一条包裹的线上划线时,gk会让你进入下一条虚线的包裹线。但是当你做5j时,它会越过包裹线。它工作正常。
就我而言,我已将zj映射到NextClosedFold()函数。
但是我认为如果我目前处于打开的折叠状态会更好,并且使用zj,我可以在打开的折叠结束时使用,例如] z。
所以我决定创建一张地图:
nnoremap <silent> sj (foldclosed('.') == -1 ? ]s : au call NextClosedFold('j')<cr>)
:echo foldclosed('.')
表示您是否在折叠线上。如果你没有关闭折叠(-1),它将给出s,但是当不是这种情况时,它将移动到下一个闭合折叠。但地图不起作用。我认为它与右括号有关,Vim会将其解释为过早关闭评估。
有任何想法如何解决这个问题?
答案 0 :(得分:3)
nnoremap <expr> sj foldclosed('.') == -1? ']s':NextClosedFold('j')
注意:
我认为NextClosedFold()
是你自己的函数,我也不知道j
参数是什么意思,我只是在映射中使用它。你的函数应该返回一个字符串,表示那种情况下的击键。
您应该使用<expr>
制图
您不应在call Func()<cr>
映射中使用<expr>
,au
也没有任何意义。