在vimscript中使用当前单词作为if语句中的参数

时间:2014-04-02 03:10:52

标签: vim

我想做这样的事情

if exists(expand('<cword>'))
  inoremap ( (<esc>g_i)<left>
else
  inoremap ( ()<left>
endif

这背后的逻辑是,如果我的光标下面有某些东西,用括号括起来,否则只需创建一个闭括号。

if当前不识别光标下的元素。

有解决方案吗?

1 个答案:

答案 0 :(得分:1)

要使映射在调用时对当前条件做出反应,您无法重新定义映射本身。相反,您必须使映射的右侧对条件作出反应。使用:help :map-expr可以最简单地完成此操作,如下所示:

:inoremap <expr> ( (empty(expand('<cword>')) ? '()<Left>' : '(<Esc>g_i)<Left>')

请注意,我刚刚翻译了您的示例,我没有检查它是否有意义或按预期工作。