我试图复制像IntelliJ这样的IDE的vim功能,执行以下操作,是光标:
我有以下一组重映射,它们复制1-3的功能,当我输入()时:
inoremap ( ()<Esc>i
inoremap () ()<Esc>i
似乎我需要一种方法来检测我的光标后面的字符是否是a),以便使函数能够执行我想要的操作.4。vim是否支持这个?
答案 0 :(得分:2)
正确实施此功能存在许多缺陷;几个插件试图这样做。至少你应该检查一下,了解他们做了什么;也许其中一个已经满足了你的所有要求!您将在Automatically append closing characters找到有关实现详细信息的完整讨论以及插件列表。
答案 1 :(得分:1)
我不相信你可以通过一个简单的地图来做到这一点,因为你需要结合一些条件逻辑来决定何时何时不添加右括号。相反,您必须定义一个函数来执行繁重的工作,然后映射右括号以调用函数。 Vim的帮助中有一些关于功能的信息,但我发现这个页面是一个非常宝贵的资源:http://learnvimscriptthehardway.stevelosh.com/
也就是说,有许多vim插件已经执行了这种功能。我使用的那个被称为&#34;自动配对&#34;可以在这里找到:https://github.com/jiangmiao/auto-pairs。作为奖励,您可以看到代码,如果您真正感兴趣的是它的工作原理,而不仅仅是对自己拥有功能感兴趣。
答案 2 :(得分:1)
试试此代码
inoremap <expr> ) getline('.')[col('.') -1] == ')' ? "\<Right>" : ')'
但我建议使用插件,因为这样的设置会让你的vimrc感到困惑。
我喜欢vim-smartchr和vim-smartinput