Intellij Ideaには、機能があります。myCamelCase
コードのどこかで変数を使用したとしましょう。次に、入力mCC
してCtrl-Enterまたはそのようなキーの組み合わせを押すと、に展開されmyCamelCase
ます。Vimに似たようなものはありますか?
2 に答える
さて、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すると、期待どおりの置換が行われることがわかります。一致する展開が見つからない場合、省略形は変更されません。
コードは完全ではありませんが、私がテストしたすべての単純なケースで機能します。それが役に立てば幸い。何か解明が必要な場合はお知らせください。
Vimにはvim- abolishと呼ばれるこのプラグインがあります。マップcrc
を使用して、キャメルケースに展開します。