26

Vimでコマンドを使用してアプリケーションをビルドする:makeと、出力は色付けされません。Cコンパイラとしてclangを使用するようにmakefileを構成しましたがmake、Vimの外部で実行する場合、または実行する場合:!make、clangの出力は色付けされます。:set makeprg参考のために、を返しますmakeprg=make

grep:を実行する:grepと、出力が色付けされないという同じ問題があります。走っている時:!grepはそうです。私は、--colorオプションを使用してみましたが:grep、役に立ちませんでした。:set grepprgを返しますgrepprg=grep -n $* /dev/null

カラーで印刷されたVIMUnixコマンド、vimgrepの結果パターンに色を付ける方法を読みました。前者には逆の問題があるようです(つまり、:!command出力が色付けされていません)。後者には、シェルにドロップダウンする以外の方法はありません。これは、この問題の「正しい」修正ではないと思います。

4

2 に答える 2

24

問題は、Vimが:makeまたはを介して他のコマンドを実行すると、 Vimが出力をキャプチャしているため:grep、それらのコマンドが標準出力の端末を取得しないことです。ターミナルに表示されています。一方、またはを使用すると、標準出力端末に送られます。:!make:!grep

Clangはデフォルトで、grep --color=auto(おそらくエイリアス化の方法ですが)stdoutの終端性を使用して、出力を色付けするかどうかを決定します。これは、端末でカラフルな出力を取得しながら、出力をファイルにリダイレクトするときにテキストだけをキャプチャするという点で便利です。すべて、コマンドラインオプションを追加する必要はありません。

したがって、実行したいのは、これらのコマンドの通常のスマートをオーバーライドして、出力を常に色付けすることです。

の場合、 Vim内で実行されるときにgrep使用できます。--color=always:grep

:set grepprg=grep\ --color=always\ -n\ $*\ /dev/null

色の設定とバージョンによっては、grep十分に機能します。

clangの場合、使用するMakefileを変更して、色付けclang -fcolor-diagnostics強制するか、 Vim内で$(CC)実行したときにオーバーライドされる変数をより柔軟に追加できます。:make

:set makeprg=make\ EXTRA_CFLAGS=-fcolor-diagnostic

ただし(少なくともclang3.0とvim7.3では)clangの色付けのスタイルにより、Vimが診断からファイル名と行番号を選択できないことがわかります。そのため、これを行うと、:makeではなくを使用する利点が失われ:!makeます。

errorformat色付けされたclangスタイルの診断に一致するようにVimのオプションにエントリを追加することで、色付けを行う周囲のANSIエスケープシーケンスからファイル名などを選択するようにVimに教えることができる場合があります。(そしてgrepformat、あなたのgrep色付けがファイル名や行番号を着色する場合も同様です。)

于 2012-10-07T19:09:59.373 に答える
0

:greporを実行すると:make:!grepまたは:!makeではなく)、出力はターミナルに表示されるだけでなく、クイックフィックスウィンドウにも送信され、そこから処理されます。vim-commandを使用してクイックフィックスwindoにアクセスできます:copen。クイック修正ウィンドウは、基本的に読み取り専用モードで開かれるテキストファイルです。他のテキストファイルと同様に、クイックフィックスファイルでは色はサポートされていません。代わりに、のようなエスケープ文字で表され[01;34mます。したがって、make(またはgrep)から色付きの出力を生成すると、vimに処理させて、選択したエラー/警告/検索メッセージにカーソルを送信できたとしても、クイック修正ウィンドウに表示される出力が台無しになります。

出力が色付けされているかどうかという質問は少し微妙になります。端末出力は色付けされないままにすることをお勧めしますが、クイックフィックス出力は色付けする必要があります。クイックフィックスウィンドウの配色は、ファイル自体の色表示ではなく、ファイル(コンピューター上) で定義されているクイックフィックスウィンドウの構文の強調表示で定義されます。で定義されている配色は、クイックフィックスウィンドウに多くの色を追加しませんが、ファイルを作成することにより、構文の強調表示スキームを拡張できます。および/またはコンパイラと組み合わせて 使用​​すると、次の内容で見栄えの良い結果が得られます 。qf.vim/usr/share/vim/vim81/syntax/qf.vimqf.vim~/.vim/syntax/after/qf.vimcmakegnuintel~/.vim/syntax/after/qf.vim

syn match qBuilt            "Built target *" nextgroup=qTarget
syn match qTarget           ".*$"   contained

syn match qEnteringLeaving  ": \(Entering\|Leaving\) directory *" nextgroup=qdSeparator
syn match qdSeparator       "'"     nextgroup=qdName contained
syn match qdName            "[^']*" contained

syn match qbProgress        "\[ *[0-9]*%\]"
syn match qBuild            "Building .* object"
syn match qWarn             "warning\( *#[0-9]*\|\):"
syn match qError            "error\( *#[0-9]*\|\):"
syn match qRemark           "remark\( *#[0-9]*\|\):"

hi def link qTarget          Constant
hi def link qError           Error
hi def link qWarn            Error
hi def link qRemark          WarningMsg
hi def link qEnteringLeaving Keyword
hi def link qBuild           Keyword
hi def link qBuilt           Keyword
hi def link qdName           Include
hi def link qbProgress       Special
于 2022-02-20T13:47:48.763 に答える