任意の種類のエディタコマンドなしで誤ってテキストファイルの名前を入力したが、テキストファイルがシェルスクリプトではない場合、ファイルが実行不能であるため、「許可拒否」エラー*が発生し、テキストファイルの最初のトークンコマンドラインで実行されるコマンドと見なされます。
しかし、これは常に誤ってエディタコマンドを入力することを忘れてしまったことを意味するので、シェルが最初のトークンが「実行」ビットセットを持たない既存のテキストファイルであることを何らかの形で認識して自動的に開くことができれば、両方$EDITOR
に非常に便利です$VISUAL
。
BashやZshでこれを達成する方法はありますか? (私はBashを使用していますが、とにかく切り替えを検討しています。)これは標準の「ディレクトリです」というエラーを表示するのではなく、最初のトークンがディレクトリであるかどうかをautocd
自動的に検出し、それに入ろうとするBashのオプションと似ています。cd
。
理想的には、ファイルリスト(globなど)や他のパラメータセットを提供する場合みんなこれらのパラメータのいくつかはエディタコマンドに渡されます。
*もちろん、./
。
答え1
では、zsh
テキストファイルにファイル拡張子()がある場合は、file.ext
次のものを使用できます。サフィックスエイリアス。コマンドラインの最初の単語が空でない文字列と一致すると実行されますalias -s name=value
。value text.name
text.name
text
たとえば、
定義すれば
alias -s txt=vim
その後、入力
$ foo.txt
コマンドラインから実行されます。
vim foo.txt
これは、一致するすべての項目?*.txt
、さらにはワイルドカードを含む単語にも適用されます。
$ *.txt
実行できます
vim *.txt
また、コマンドの最初の単語のみを確認しますが、他の単語にサフィックスエイリアスがある場合でも、コマンドライン全体を引数として渡します。
$ foo.txt bar.c baz.vim
実行できます
vim foo.txt bar.c baz.vim
重要:これは、拡張子が一致するすべてのコマンドにも影響しますPATH
。たとえば。
alias -s sh=vim
というコマンドがあり、something.sh
実行したいです。
something.sh -p1 -p2 arg1 arg2
それは実行されるでしょう
vim something.sh -p1 -p2 arg1 arg2
コマンドに対してこの機能を無効にするには、組み込みcommand
コマンドを追加するだけです。
command something.sh -p1 -p2 arg1 arg2
明らかな欠点は次のとおりです。
- ファイル拡張子を持つファイルでのみ機能します。
- 各拡張子のエイリアスを明示的に定義する必要があります。
肯定的な側面:
- ファイル拡張子を持つファイルでのみ機能するため、ほとんどの
/bin
実行可能ファイルは/usr/bin
エイリアスに置き換えられません。 *.jpg
ファイルが*.o
突然開かないように、拡張子に対して(別の)エイリアスを定義できます。vim