1

我目前正在使用 closepairs 来满足我的自动关闭需求,并且效果很好。然而,有一个警告——撇号。不要误会我的意思,我需要一直关闭撇号。我不想只是禁用它们。但是每当我输入纯文本时,只要有任何收缩(I'm,Don't,Can't)......这些撇号就会产生。

现在我可以键入以尽快删除它们,但每次都这样做有点不切实际。

有谁知道如果它们是单词的开头,我如何修改 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
4

2 回答 2

3

我不知道closepairs,但AutoClose - 插入匹配括号、括号、大括号或引号插件可以很好地处理这个问题。您可以在Vim Tips Wiki上找到插件替代列表。

于 2013-01-21T08:58:40.320 回答
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

请注意,即使在这个保守的示例中也有例外,例如r'regex'在 Python 中键入,因此定义特定于文件类型的行为也可能有意义。

于 2013-01-21T09:29:32.740 回答