8

つまり、Makefileで`makeがViMから呼び出されているかどうかを知る必要があります。ViMが特定の値に設定する特定の変数(ENVIRONMENTなど)はありますか?

これが必要な理由は次のとおりです。

bashから呼び出された場合、どのサブシステムが構築されているかに関するメッセージを表示したり、エラーや警告を強調表示したりするなど、ユーザー(または自分自身)のためにあらゆる種類のすばらしいことを行うことができます。

ただし、問題は、ViMから呼び出されたときに、エラーメッセージがすでにキャプチャされており、\x1bコマンド(カラー用)を導入すると、メッセージがViMに理解できなくなることです。私がやりたいのは:make、ViMで発行されたときに基本的にカラーリングを無効にすることです。

Makefileに解決してもらいたいのですが、他の解決策を受け入れることができます。

4

4 に答える 4

4

色を付けたくないことをメイクファイルに明示的に伝えるか、フィルターで除外します。makefile の内部を推測しようとすると、別のエディターやシェルを使用したり、環境を微調整したりすると壊れる可能性があります。

私の好みは、印刷できない文字を除外することです。

:set makeprg=make\ $*\ \\\|filter

これは、makefile で明示的な回避策を必要としないためです。ただし、必要なフィルター自体は自明ではありません。たとえば、unix.stackexchange に関するこの質問を参照してください。

または、既に提案したように、makefile に明示的に伝える最も簡単な方法は、呼び出しに変数を追加することです。

:set makeprg=make\ NO_COLOUR=1

または何でも(makeの現在の値でなければなりませんmakeprg)。

.

于 2012-09-04T10:43:57.073 に答える
2

Vim 内では、開いているシェルによって継承される環境変数を設定できます。例えば

:let $INSIDE_VIM = 1

これが約である場合、何が呼び出されるかを決定する:makeを操作できます。'makeprg'

:set makeprg=export\ INSIDE_VIM=1;make

色付けのエスケープ シーケンスだけが気になる場合は、$TERM色を理解できないものに設定するだけで (dumb多分?)、色付けがハードコードされていない場合 (残念ながら、多くのツールでは大きな問題です)。 、端末の設定に従い、エスケープシーケンスを出力しないようにする必要があります。

于 2012-09-04T10:34:42.440 に答える
1

vim バインディングを に変更できるSOURCE="vim" makeため、makefile で$$SOURCE変数が「vim」に設定されます。

編集:実際にはvimでバインディングを使用していないことがわかります。次のように.vimrc(または/etc/vimrc)の次の行でそれらを使用できます:

:nmap <F5> <CR>SOURCE="vim" :make<CR>

これにより、F5が必要なものにバインドされます

于 2012-09-04T10:06:17.213 に答える
1

環境変数を確認MYVIMRCまたは確認できます。VIMRUNTIME私の GNU/Linux ディストリビューションでSHLVLは、bash からの値は 1 で、make が 内から呼び出されたときの値は 2vimです。

于 2012-09-04T10:06:53.923 に答える