現在の行が属するC関数を表示したい。マシンの機能と構成が異なる複数のオペレーティングシステムで作業しているため、プラグインを使用したくない。私はほとんどのプラグインを試しましたが、何らかの理由でうまくいきません。私は非常に基本的で最小限のものを書かなければならず、それは非常に基本的なvim機能で動作します。
現在の解決策:
関数名の先頭に一致する正規表現を本質的に検索する同僚からvim関数をコピーしました。画面下部に名前が数秒間表示され、消えます
fun! ShowFuncName()
let lnum = line(".")
let col = col(".")
echohl ModeMsg
echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW'))
echohl None
call search("\\%" . lnum . "l" . "\\%" . col . "c")
endfun
問題
問題は、これがラベルでは機能しないことです。関数定義と現在の行の間の行にラベルが存在する場合、スクリプトは関数名の代わりにラベル名を表示します。
それ以外の場合、スクリプトは機能します。これは、コードベースでは常に関数定義を列1から開始し、中括弧を2行目以降で開始することが難しいためです。
提案された修正
正規表現を検索する代わりに、vim移動キーを使用してみませんか。それは次のことです:
上記のステップ2の方法がわかりません。
私はあなたがこれが欲しいと信じています
_function! ShowFuncName()
let cursor_pos = getpos('.')
echohl ModeMsg
normal! [[k
echo getline('.')
echohl None
call setpos('.', cursor_pos)
endfunction
_
normal
コマンドは、通常モードで_[[k
_を実行し、カーソルを関数定義に移動します。次に、カーソルが置かれている行を印刷します。
カーソル位置は、getpos()
およびsetpos()
関数を使用して元の位置に復元されます。