vim を主要なコーディング プログラムとして構成しようとしています。単一のファイルをコンパイルする方法を理解しましたが、vim 内からプログラムを実行しようとすると、127 エラー コードが表示され続けます。ボックスでにaエイリアスを設定しましたが、vim から./a.outコマンドを発行し:!aても機能しません。:!./a.outします。これがなぜなのか誰か知っていますか?
2 に答える
エイリアスは、インタラクティブシェルのみをソースとする rc ファイルで定義され、インタラクティブ モードでのみ動作します (vimはすべてをシェルに渡しますが、fork+execve を使用してシェルを直接実行する以外は何も実行しません)。
デフォルトでは、vim から起動されたシェルは非対話モードで開始されるためbashrc、読み取られず、エイリアスは定義されていません (定義されていても、非対話モードでは使用されません)。設定できます
set shellcmdflag=-ic
、シェルが対話モードで起動さ.bashrcれ、エイリアスを持つファイルが読み取られます。
エイリアスはシェルの機能です (たとえば(編集:ZyXを参照)bash)。!演算子はファイルを直接実行します-シェルはそれを認識せず、エイリアス展開を実行できません。
実行を./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 は正しいです。:) 他の情報については、ここに回答を残しておきます。