在vimscript中,使用当前单词作为if语句中的参数
我想做这样的事情在vimscript中,使用当前单词作为if语句中的参数,vim,Vim,我想做这样的事情 if exists(expand('<cword>')) inoremap ( (<esc>g_i)<left> else inoremap ( ()<left> endif 如果存在(展开(“”)) inoremap((g_i) 其他的 inoremap() 恩迪夫 这背后的逻辑是,如果我的游标下面有什么东西,用括号括起来,否则就创建一个闭括号 if当前无法识别光标下的元素 有解决方案吗?要使映射在调用时对当前条件作
if exists(expand('<cword>'))
inoremap ( (<esc>g_i)<left>
else
inoremap ( ()<left>
endif
如果存在(展开(“”))
inoremap((g_i)
其他的
inoremap()
恩迪夫
这背后的逻辑是,如果我的游标下面有什么东西,用括号括起来,否则就创建一个闭括号
if当前无法识别光标下的元素
有解决方案吗?要使映射在调用时对当前条件作出反应,您不能重新定义映射本身。相反,您必须使映射的右侧对条件作出反应。使用
:help:map expr
最容易做到这一点,如下所示:
:inoremap <expr> ( (empty(expand('<cword>')) ? '()<Left>' : '(<Esc>g_i)<Left>')
:inoremap((空(展开(“”))?“()”:“(g_i)”
请注意,我刚刚翻译了您的示例,我没有检查它是否有意义或是否按预期工作。我认为这是由内而外的。而不是几行(可能是函数的一部分)有条件地定义一个
:inoremap
,您不想要一个调用具有条件代码的函数的:inoremap
吗?在尝试编写完整函数之前,以交互方式检查::echo expand(“”)
和:exists(expand(“”))
等等。我认为第一个会做你想做的,而不是第二个。也许你想要strlen()
而不是exists()
。这非常有用strlen()正是我需要的。