1

現在、自動クローズのニーズに closepairs を使用していますが、かなりうまく機能しています。ただし、注意点が 1 つあります。アポストロフィです。誤解しないでください。常にアポストロフィを閉じる必要があります。それらを無効にしたくありません。しかし、プレーンテキストを入力するときはいつでも、短縮形 (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

Python での入力など、この控えめな例でも例外があることに注意してください。そのr'regex'ため、ファイルタイプ固有の動作を定義することも理にかなっています。

于 2013-01-21T09:29:32.740 に答える