2

Vimのmakeから「成功の場合は0、エラーの場合はゼロ以外」の戻りコードを取得しようとしています。具体的には、私はUbuntuを使用していますが、使用v:shell_errorできません。

この質問を掘り下げて調べたところ、シェルパイプの設定が原因のようです。

shellpipe=2>&1| tee

makeのtee出力をパイプで vim に戻します。シェルは、make からではなく、tee から vim にエラー コードを返しているようです。代わりに make のエラー コードを取得するにはどうすればよいですか?

4

2 に答える 2

4

そのためのカスタム関数を作成してみることができます。たとえば:call system("make > make.out")、出力をファイルにリダイレクトする run make を使用します。その後、 を使用してエラー ファイルをロードします:cf make.out。ただし、自分で試したことはありません。

最後にmake、ファイル システムに結果が存在するかどうかをテストすることで、結果を簡単に確認することもできます。

:make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif

(ここで '|' 記号は vim のコマンド セパレータです。) それをキーボード ショートカットに割り当てると、入力する必要がなくなります。

PS私は通常、プログラムが警告を出さないようにしようとしているので、実際に問題に遭遇したことはありません. ところで、別の可能な解決策につながるものgrep -v tabooword: 'makeprg'. ヘルプで実際に説明されていること: :h 'makeprg'.

PPS VIM を使い始めました... bash もシェルとして使用している場合。シェルパイプの出口 ${PIPESTATUS[0]} に追加しようとしましたか? 例えば:

:set shellpipe=2>&1\ \|\ tee\ %s;exit\ \${PIPESTATUS[0]}

Debianでそれをテストしたところ、うまくいきました。:h 'shellpipe'多くのための。

于 2010-06-20T00:35:21.113 に答える
1

現在考えられる唯一のことは、make と tee の 2 つのラッパー スクリプトを作成することです。もっと簡単な方法があると思いますが、今のところ、次の方法を試してみてください。

make ラッパー スクリプトを作成します。

#!/bin/bash

make $@
echo $? > ~/exit_code_cache

ティー ラッパー スクリプトを作成します。

#!/bin/bash

tee $@
return `cat ~/exit_code_cache` # (or do something else with the exit code)

新しい makeを使用して、ティー ラッパーを使用する:set makeprg=mymake独自の設定を行います ( )。shellpipeshellpipe=2>&1 | mytee

テストされていませんが、アイデアは明確なはずです。それが役に立てば幸い。

于 2010-06-19T23:01:43.653 に答える