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 は正しいです。:) 他の情報については、ここに回答を残しておきます。