5

Intellij Ideaには、機能があります。myCamelCaseコードのどこかで変数を使用したとしましょう。次に、入力mCCしてCtrl-Enterまたはそのようなキーの組み合わせを押すと、に展開されmyCamelCaseます。Vimに似たようなものはありますか?

4

2 に答える 2

8

さて、2回答えてくれて許してください。でも、最初の試みがポイントを逃したので、もう一度やり直します。これは私が思っていたよりも複雑ですが、おそらく私が作ったほど複雑ではありません(!)。

これは、一致するすべての変数名を提案するように変更されました。

まず、「myCamelCase」文字列から「mCC」の省略形を生成する関数を次に示します。

function! Camel_Initials(camel)
    let first_char = matchstr(a:camel,"^.")
    let other_char = substitute(a:camel,"\\U","","g")
    return first_char . other_char
endfunction

ここで、省略形('mCC')を取得し、現在のバッファー(現在の行から逆方向)をスキャンして、この省略形を持つ「単語」を探す関数を次に示します。すべての一致のリストが返されます。

function! Expand_Camel_Initials(abbrev)
    let winview=winsaveview()
    let candidate=a:abbrev
    let matches=[]
    try
        let resline = line(".")
        while resline >= 1
            let sstr = '\<' . matchstr(a:abbrev,"^.") . '[a-zA-Z]*\>'
            keepjumps let resline=search(sstr,"bW")
            let candidate=expand("<cword>")
            if candidate != a:abbrev && Camel_Initials(candidate) == a:abbrev
                call add( matches, candidate )
            endif
        endwhile
    finally
        call winrestview(winview)
        if len(matches) == 0
            echo "No expansion found"
        endif
        return sort(candidate)
    endtry
endfunction

次に、カーソルの下の単語を読み取り、上記の関数によって返される一致を提案するカスタム完了関数を次に示します。

function! Camel_Complete( findstart, base )
    if a:findstart
        let line = getline('.')
        let start = col('.') - 1
        while start > 0 && line[start - 1] =~ '[A-Za-z_]'
            let start -= 1
        endwhile
        return start
    else
        return Expand_Camel_Initials( a:base )
    endif
endfunction

これを利用するには、「completefunc」を定義する必要があります。

setlocal completefunc=Camel_Complete

挿入モードの完了を使用するには、と入力CTRL-X CTRL-Uしますが、通常はこれを次のようにマップしCTRL-Lます。

inoremap <c-l> <c-x><c-u>

このコードをvimrcに含めると、入力mCCに続いて入力CTRL-Lすると、期待どおりの置換が行われることがわかります。一致する展開が見つからない場合、省略形は変更されません。

コードは完全ではありませんが、私がテストしたすべての単純なケースで機能します。それが役に立てば幸い。何か解明が必要な場合はお知らせください。

于 2011-07-01T16:26:45.580 に答える
0

Vimにはvim- abolishと呼ばれるこのプラグインがあります。マップcrcを使用して、キャメルケースに展開します。

于 2016-03-31T13:50:03.840 に答える