我目前正在使用closepairs来满足我的自动关闭需求,而且效果非常好。但是,有一个警告 - 撇号。别误会我的意思,我需要一直关闭撇号。我不想只是禁用它们。但每当我输入纯文本时,只要有任何收缩(我,不,不能)......这些撇号都会被制作出来。
现在我可以输入以尽快删除它们,但每次都这样做有点不切实际。
有没有人知道我怎么可能修改closepairs脚本只能自动关闭单引号/撇号,如果它们是单词的开头?也就是说,它们前面有一个空格字符?
以下是当前代码:
inoremap <expr> " <SID>pairquotes('"')
inoremap <expr> ' <SID>pairquotes("'")
function! s:pairquotes(pair)
let l:col = col('.')
let l:line = getline('.')
let l:chr = l:line[l:col-1]
if a:pair == l:chr
return "\<right>"
else
return a:pair.a:pair."\<left>"
endf
答案 0 :(得分:3)
我不知道密码,但AutoClose - Inserts matching bracket, paren, brace or quote插件处理得很好。您可以在Vim Tips Wiki上找到插件备选列表。
答案 1 :(得分:0)
你确定只想在空白之后自动完成吗?在这种情况下,function('string')
之类的内容在括号后不会自动完成。
无论如何,您可以针对某些正则表达式检查前一个字符。例如,要避免在字母后自动完成:
function! s:pairquotes(pair)
let l:line = getline('.')
let l:col = col('.')
let l:chr = l:line[l:col - 1]
let l:prev = l:line[l:col - 2]
if l:chr == a:pair
return "\<right>"
elseif l:prev !~ "[A-Za-z]"
return a:pair . a:pair . "\<left>"
else
return a:pair
endif
endfunction
请注意,即使使用这个保守的示例也存在异常,例如在Python中键入r'regex'
,因此定义特定于文件类型的行为也可能有意义。