VIM:我怎样才能从这个eval创建一个键映射?

时间:2014-11-05 22:12:09

标签: vim

例如,另一个带有映射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会将其解释为过早关闭评估。

有任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

nnoremap <expr> sj foldclosed('.') == -1? ']s':NextClosedFold('j')

注意:

  • 我认为NextClosedFold()是你自己的函数,我也不知道j参数是什么意思,我只是在映射中使用它。你的函数应该返回一个字符串,表示那种情况下的击键。

  • 您应该使用<expr>制图

  • 您不应在call Func()<cr>映射中使用<expr>au也没有任何意义。