テキストファイルを実行するのではなく、エディタで自動的に開きますか?

テキストファイルを実行するのではなく、エディタで自動的に開きますか?

任意の種類のエディタコマンドなしで誤ってテキストファイルの名前を入力したが、テキストファイルがシェルスクリプトではない場合、ファイルが実行不能であるため、「許可拒否」エラー*が発生し、テキストファイルの最初のトークンコマンドラインで実行されるコマンドと見なされます。

しかし、これは常に誤ってエディタコマンドを入力することを忘れてしまったことを意味するので、シェルが最初のトークンが「実行」ビットセットを持たない既存のテキストファイルであることを何らかの形で認識して自動的に開くことができれば、両方$EDITORに非常に便利です$VISUAL

BashやZshでこれを達成する方法はありますか? (私はBashを使用していますが、とにかく切り替えを検討しています。)これは標準の「ディレクトリです」というエラーを表示するのではなく、最初のトークンがディレクトリであるかどうかをautocd自動的に検出し、それに入ろうとするBashのオプションと似ています。cd

理想的には、ファイルリスト(globなど)や他のパラメータセットを提供する場合みんなこれらのパラメータのいくつかはエディタコマンドに渡されます。

*もちろん、./

ベストアンサー1

では、zshテキストファイルにファイル拡張子()がある場合は、file.ext次のものを使用できます。サフィックスエイリアス。コマンドラインの最初の単語が空でない文字列と一致すると実行されますalias -s name=valuevalue text.nametext.nametext

たとえば、

定義すれば

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

おすすめ記事