2

vim を主要なコーディング プログラムとして構成しようとしています。単一のファイルをコンパイルする方法を理解しましたが、vim 内からプログラムを実行しようとすると、127 エラー コードが表示され続けます。ボックスでにaエイリアスを設定しましたが、vim から./a.outコマンドを発行し:!aても機能しません。:!./a.outします。これがなぜなのか誰か知っていますか?

4

2 に答える 2

3

エイリアスは、インタラクティブシェルのみをソースとする rc ファイルで定義され、インタラクティブ モードでのみ動作します (vimすべてをシェルに渡しますが、fork+execve を使用してシェルを直接実行する以外は何も実行しません)。

デフォルトでは、vim から起動されたシェルは非対話モードで開始されるためbashrc、読み取られず、エイリアスは定義されていません (定義されていても、非対話モードでは使用されません)。設定できます

set shellcmdflag=-ic

、シェルが対話モードで起動さ.bashrcれ、エイリアスを持つファイルが読み取られます。

于 2012-11-22T04:46:07.123 に答える
2

エイリアスはシェルの機能です (たとえばbash)。!演算子はファイルを直接実行します-シェルはそれを認識せず、エイリアス展開を実行できません。(編集:ZyXを参照)

実行を./a.out簡単にしたい場合は、次のようにすることができます。

command XX !./a.out

その後、行うことができます:XX。または、

nnoremap X :!./a.out<CR>

1 つのキーXで十分です。

別のオプション (セキュリティ上の理由から嫌われています) は、現在のディレクトリを次のように追加することPATHです。

PATH="./$PATH"

a.outこれにより、とは対照的にでプログラムを実行できます./a.out。次に、プログラムを (言語依存の同形)-oスイッチでコンパイルすると、次のように名前を付けることができますa

gcc -o a foo.c

これを考えると、!aうまくいくでしょう。自己責任。

編集: ZyX は正しいです。:) 他の情報については、ここに回答を残しておきます。

于 2012-11-22T02:31:16.933 に答える