Vim函数在光标后测试字符

时间:2015-01-14 01:57:38

标签: vim macros intellij-idea

我试图复制像IntelliJ这样的IDE的vim功能,执行以下操作,是光标:

  1. 我输入一个开放的paren :(
  2. 自动关闭它并将光标放在中间:(|)
  3. 我在中间输入一些文字:(有些文字在这里|)
  4. 我键入了一个关闭的paren,而不是插入一个关闭的paren,它只是将我的光标移动到已经插入的那个上:(这里有一些文字)|
  5. 我有以下一组重映射,它们复制1-3的功能,当我输入()时:

    inoremap ( ()<Esc>i    
    inoremap () ()<Esc>i
    

    似乎我需要一种方法来检测我的光标后面的字符是否是a),以便使函数能够执行我想要的操作.4。vim是否支持这个?

3 个答案:

答案 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