Vim函数用于测试光标后的字符

Vim函数用于测试光标后的字符,vim,macros,intellij-idea,Vim,Macros,Intellij Idea,我试图在vim中复制IDE(如IntelliJ)的功能,它们可以执行以下操作,让|成为光标: 我键入一个打开的参数:( 它会自动关闭并将光标放在中间:(|) 我在中间键入了一些文本:(此处有一些文本|) 我键入了一个关闭参数,而不是插入一个关闭参数,它只是将光标移动到已经插入的参数上:(此处有一些文本)| 我有以下一组重映射,它们复制了1-3的功能,当我只键入()时: inoremap(()i inoremap()i 似乎我需要一种方法来检测光标后的字符是否为a)为了让函数实现我在4中想要的功

我试图在vim中复制IDE(如IntelliJ)的功能,它们可以执行以下操作,让|成为光标:

  • 我键入一个打开的参数:(
  • 它会自动关闭并将光标放在中间:(|)
  • 我在中间键入了一些文本:(此处有一些文本|)
  • 我键入了一个关闭参数,而不是插入一个关闭参数,它只是将光标移动到已经插入的参数上:(此处有一些文本)|
  • 我有以下一组重映射,它们复制了1-3的功能,当我只键入()时:

    inoremap(()i
    inoremap()i
    

    似乎我需要一种方法来检测光标后的字符是否为a)为了让函数实现我在4中想要的功能,vim是否支持这一点?

    我不相信您可以通过简单的映射来实现这一点,因为您需要合并一些条件逻辑来决定何时以及何时不添加右括号。相反,您必须定义一个函数来完成繁重的提升,然后映射右括号调用函数的括号。Vim的帮助中有一些关于函数的信息,但我发现这一页是非常宝贵的资源:


    也就是说,有很多vim插件已经执行了这种类型的功能。我使用的一个叫做“自动对”并且可以在这里找到:。作为奖励,如果您真的对它的工作方式感兴趣,而不仅仅是对功能本身感兴趣,那么您可以看到代码。

    我不相信您可以通过简单的映射来实现这一点,因为您需要结合一些条件逻辑来决定何时以及何时不添加结束父级相反,您必须定义一个函数来完成繁重的工作,然后映射右括号来调用该函数。Vim的帮助中有一些关于函数的信息,但我发现这一页是非常宝贵的资源:

    也就是说,有很多vim插件已经执行了这种类型的功能。我使用的一个插件叫做“自动对”,可以在这里找到:。作为奖励,如果你真的对它的工作方式感兴趣,而不仅仅是对功能本身感兴趣,你可以看到代码。

    试试这段代码

    inoremap <expr> ) getline('.')[col('.') -1] == ')' ? "\<Right>" : ')'
    
    inoremap)getline('.')[col('.')-1]==')'?"\" : ')'
    
    但我建议使用插件,因为这样的设置会让您的vimrc感到困惑

    我喜欢vim smartchr和vim smartinput

    试试这个代码

    inoremap <expr> ) getline('.')[col('.') -1] == ')' ? "\<Right>" : ')'
    
    inoremap)getline('.')[col('.')-1]==')'?"\" : ')'
    
    但我建议使用插件,因为这样的设置会让您的vimrc感到困惑

    我喜欢vim smartchr和vim smartinput


    正确实现此功能存在许多缺陷;有几个插件试图做到这一点。至少你应该检查他们,了解他们做了什么;也许其中一个已经满足了你的所有要求!您将在上找到关于实现细节的完整讨论和插件列表。

    正确实现此功能有许多缺陷;有几个插件试图做到这一点。至少你应该检查他们,了解他们做了什么;也许其中一个已经满足了你的所有要求!您将在中找到关于实现细节的完整讨论和插件列表