【问题标题】:How to auto close a matching quotes while using autoclose plugin on Vim?如何在 Vim 上使用自动关闭插件时自动关闭匹配的引号?
【发布时间】:2019-02-07 02:37:33
【问题描述】:

我使用这个autoclose.vim 插件,因为我想要自动关闭功能。

在编辑 HTML 时使用 Omnicompletion,这是我得到的。

<p id="

注意开头的引号...

输入一些数据后,我继续关闭引号,这是输出(注意第三个不正确的双引号):

<p id="sometext""

我知道我可以使用 ToggleAutoCloseMappings 切换插件。 我还想删除现有的引号并使用自动关闭插件打开一些引号,然后可能会有所帮助。

更优雅的解决方案是关闭现有引号而不切换插件(它不必自动关闭)。

如何告诉它自动关闭匹配的报价?

【问题讨论】:

    标签: vim autocomplete quotes


    【解决方案1】:

    我会建议以下两种解决方案之一:

    1. 最简单的一种:在完成后插入引号时使用&lt;C-v&gt;"
    2. 在您尝试检查情况并仅在需要时运行该插件时使用&lt;expr&gt; 映射。

      " Put to ~/.vim/after/plugin/autoclose.vim
      let g:old_quote_rhs=substitute(maparg('"', 'i'), '<[^>]*>', '\=eval(''"\''.submatch(0).''"'')', 'g')
      inoremap <expr> " (HasUnclosedQuote() ? '"' : g:old_quote_rhs)
      

      最棘手的部分是编写函数HasUnclosedQuote 对。这是一个简单的实现,仅适用于同一行的未闭合引号:

      function HasUnclosedQuote()
          return getline('.')[:(col('.')-1)]!~#'\v^%([^"]+|\"%(\\.|[^"\\]+)*\")*$'
      endfunction
      

    【讨论】:

      【解决方案2】:

      插件仅识别已明确输入的引号。当您从自动完成(或注册粘贴)中引入引号时,系统无法识别,因此会导致重复引用。

      我想除了在插件处于活动状态时避免插入此类不完整的引用片段之外,您几乎无能为力。

      【讨论】:

        猜你喜欢
        • 2012-02-16
        • 1970-01-01
        • 2012-09-08
        • 2011-09-10
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 2012-08-20
        • 2014-05-15
        相关资源
        最近更新 更多