我使用这个autoclose.vim插件,因为我想要自动关闭功能。
在编辑HTML时使用Omnicompletion,这就是我得到的。
<p id="
请注意初始引号...
输入一些数据后,我继续关闭引号,这是输出(注意第三个不正确的双引号):
<p id="sometext""
我知道我可以使用ToggleAutoCloseMappings切换插件。 我还想删除现有的引号并使用autoclose插件打开一些引号然后它可能会有所帮助。
更优雅的解决方案是在不切换插件的情况下关闭现有的引号(它不必自动关闭)。
如何告诉它自动关闭匹配的报价?
答案 0 :(得分:1)
我建议使用以下两种解决方案之一:
<C-v>"
。使用<expr>
映射,尝试检查情况并仅在需要时运行该插件。
" 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
答案 1 :(得分:0)
该插件仅识别已明确输入的引号。当您从自动完成(或注册粘贴)引入引号时,这不会被识别,因此会产生重复的引用。
我想除了在插件处于活动状态时避免插入这些不完整的引用片段,你几乎无能为力。