0

最近AutoComplPopを使い始めましたが、コメントを書いているときにポップアップが煩わしいと感じています(通常、コメントを書くときに自動補完は必要ないため)。

挿入ポイントがコメント内にあるときにAutoComplPopを効果的に無効にできる構成オプションまたはクイックハックはありますか?

4

2 に答える 2

2

カーソルを移動するたびに構文をチェックするときのパフォーマンスの問題に答えるには、これを自分で実装し、OnSyntaxChangeプラグインに組み込む必要がありました。

このプラグインを使用すると、この設定はわずか 3 行 (.vimrc など) で実行できます。

call OnSyntaxChange#Install('Comment', '^Comment$', 0, 'i')
autocmd User SyntaxCommentEnterI silent! AcpLock
autocmd User SyntaxCommentLeaveI silent! AcpUnlock

私にとっては、パフォーマンスへの影響は顕著ですが (ファイルの種類と構文によって異なります)、許容範囲内です。自分で試してみてください!

于 2012-05-25T20:28:11.143 に答える
2

CursorMovedIフックを介して現在コメントにいることを確認する必要があり、 AutoComplPop:AcpLockを使用して一時的に無効にすることができます。:AcpUnlock(そして、コメントから移動したら元に戻します。)

さまざまなファイルタイプのコメントを検出するには、構文の強調表示を照会するのが最適です。このようにして、既存のファイルタイプの構文定義を利用できます。

これについてのスニペットを次に示します。

function! IsOnSyntaxItem( syntaxItemPattern )
    " Taking the example of comments:
    " Other syntax groups (e.g. Todo) may be embedded in comments. We must thus
    " check whole stack of syntax items at the cursor position for comments.
    " Comments are detected via the translated, effective syntax name. (E.g. in
    " Vimscript, 'vimLineComment' is linked to 'Comment'.)
    for l:id in synstack(line('.'), col('.'))
        let l:actualSyntaxItemName = synIDattr(l:id, 'name')
        let l:effectiveSyntaxItemName = synIDattr(synIDtrans(l:id), 'name')
        if l:actualSyntaxItemName =~# a:syntaxItemPattern || l:effectiveSyntaxItemName =~# a:syntaxItemPattern
            return 1
        endif
    endfor
    return 0
endfunction

これで、ソリューションをつなぎ合わせることができるはずです。

于 2012-05-23T16:19:56.570 に答える