web-dev-qa-db-ja.com

Vimで強調表示されているクラス名と関数名

モーダル入力に夢中になってから、最近、TextmateからVim環境をセットアップしました。

ただし、Vimでは構文の強調表示はそれほど美しくないようです。私はC++でコーディングしますが、関数呼び出しとクラス名は強調表示できないため、コードは読みにくくなります。カラースキームを少し試しましたが、「クラス名」または「関数名」に対応するフィールドが見つかりませんでした。

以下の図では、_DroughtLayer::_および*.size()がMacVimの右側で強調表示されていないことに注意してください。

Picture comparison between Textmate(left) and Vim(right)
(ソース: ivzhao.com

これを解決する方法はありますか?私は視覚に敏感な人間なので、本当にイライラさせられます。

68
ivanTheTerrible

興味深いことに、VIMの構文強調表示機能は、識別子または関数名への構文の適用をサポートしていません-少なくともCおよびC++の構文強調表示機能はサポートしていません。

:hi Function guifg=red

または

:hi Identifier guifg=red

これらに色は付けません。私は、これらの言語のキーワードと定数以上のものではないようです。

ここで、誰かがメソッド名をサポートするためにcpp構文ファイルを拡張し始めました。それは私が推測するスタートです。 http://vim.wikia.com/wiki/Highlighting_of_method_names_in_the_definition

17
thomasrutter

Vimを使い始めたとき、これと同じ問題がありました。解決策は簡単です。vimで使用されるc構文ファイルを編集するだけで、次のようになります。

CまたはC++ファイルの編集を開始すると、vimは次の場所にあるデフォルトのc構文ファイルを読み取ります。

$VIMRUNTIME/syntax/c.vim

($ VIMRUNTIMEはvimがインストールされている場所です。vimを開いてコマンド ":echo $ VIMRUNTIME"を使用すると、デフォルト値を確認できます)。

このファイルを単純に上書きするか、次の場所にカスタムC構文ファイル(デフォルトの代わりにvimによってロードされる)を作成できます。

$HOME/.vim/syntax/c.vim      (for UNIX)
$HOME/vimfiles/syntax/c.vim  (for PC or OS/2)

(私はMacを使用したことがないので、どれがあなたのために働くのかわからない。詳細については、vimヘルプの「:help vimfiles」を参照してください)

楽しい部分です。デフォルトの「$ VIMRUNTIME/syntax/c.vim」ファイルをvimfilesディレクトリ(UNIXの場合は「$ HOME/.vim/syntax/c.vim」)にコピーし、次の行を追加して編集します。

" Highlight Class and Function names
syn match    cCustomParen    "(" contains=cParen,cCppParen
syn match    cCustomFunc     "\w\+\s*(" contains=cCustomParen
syn match    cCustomScope    "::"
syn match    cCustomClass    "\w\+\s*::" contains=cCustomScope

hi def link cCustomFunc  Function
hi def link cCustomClass Function

それでおしまい!これで、関数とクラス名が「関数」強調表示で定義された色で強調表示されます(「:hi関数」)。色をカスタマイズする場合は、上の最後の2行を次のように変更できます。

hi def cCustomFunc  gui=bold guifg=yellowgreen
hi def cCustomClass gui=reverse guifg=#00FF00

または、C構文ファイルをそのままにして、vimrcファイルで色を定義できます( ":help vimrc"):

hi cCustomFunc  gui=bold guifg=yellowgreen
hi cCustomClass gui=reverse guifg=#00FF00

(「def」キーワードがないことに注意してください。詳細については、「:help highlight-default」に進んでください)。 「:hi」コマンドで使用可能なパラメーターについては、「:help:highlight」を参照してください。

このリンクでVim 7.2の完全なc.vimファイルを見つけることができます(注:変更されていないVimバージョン7.2がある場合にのみ使用してください)。

http://Pastebin.com/f33aeab77

そして必須のスクリーンショット:

enter image description here

120
Eduardo

これはここでの私の最初の投稿であり、私は観察方法を知りませんでした、エドゥアルドの答えは「(」と「{」を未加工に見せ、バグ構文をフォールドインします。これを修正するために少し変更しました。

syn match    cCustomParen    "?=(" contains=cParen,cCppParen
syn match    cCustomFunc     "\w\+\s*(\@=" contains=cCustomParen
syn match    cCustomScope    "::"
syn match    cCustomClass    "\w\+\s*::" contains=cCustomScope
hi def cCustomFunc  gui=bold guifg=yellowgreen
hi def link cCustomClass Function
33
Janosimas

1つの解決策は、ビルドされたctagsデータベースを使用することです。 ctags ユーティリティで作成してください。次に、「tags」変数を設定し、次を

~/.vim/after/syntax/c.vim

function! s:highlight()
    let list = taglist('.*')

    for item in list
        let kind = item.kind

        if kind == 'f' || kind == 'c'
            let name = item.name
            exec 'syntax keyword Identifier '.name
        endif
    endfor
endfunction

call s:highlight()

非常に大きなctagsデータベースでは、これが非常に遅くなる可能性があることに注意してください。

また、vim.orgには one solution がありますが、私はこれを試しませんでした。うまくいくかどうか教えてください。

10
Mykola Golubyev

編集:color_codedはあなたにとって重すぎるかもしれません。 try octol/vim-cpp-enhanced-highlight C++ 11/14をサポートし、@ Eduardoの答えを統合します。 

セマンティックベースの蛍光ペン:
お勧めします jeaye/color_coded 、libclangベースの強調表示のためのvimプラグイン
ごめんなさい、stackoverflowが初めてなので、画像を投稿するのに十分な評判がありません。試してみたい場合は、効果を確認してください。 :)

長所:

  • 簡単インストール
  • セマンティックハイライト
  • 上記のClighterには、python2.7でコンパイルされたvimが必要です。ただし、color_codedはC++で記述されており、luaバインディング-> C++を提供します。

短所:

  • いくつかのvimイベントを作成してアクティブにしない限り、遅延します。
  • カスタマイズは少し難しくなります。自分でsyntax/color_coded.vimを編集する必要があります。しかし、ロードマップにはカスタマイズが置かれています。

まだ開発中ですが、ますます注目を集めています。

beforeafter

6
Charles

セルゲイ、最初の行を

syn match    cCustomParen    "(" contains=cParen,cCppParen

syn match    cCustomParen    "(" contains=cParen contains=cCppParen

私のためにそれを修正するようです。

3
user176963

このプラグインを使用してみてください http://www.vim.org/scripts/script.php?script_id=2646 すべてのctagが非常に効率的に強調表示します

2
Yogesh Arora

Taglist のようなvimのプラグインを使用するか、vimとのctagsまたはcscope統合をセットアップします(- here's vim /のチュートリアルcscope。)

2
dirkgently

taghighlightプラグインをお勧めします。Webサイトの here をクリックします。

1
shengy

Clighter プラグインも考慮できます。

plugin for c-family semantic source code highlighting, based on Clang

ただし、かなり最近のバージョンとソフトウェアが必要です:vim 7.4.330 +python2およびlibclang

1
Hotschke