bashでzshサフィックスエイリアスを置き換える

bashでzshサフィックスエイリアスを置き換える

zshでは、ファイル名のみを入力すると、プログラムを使用して.logや.txtなどの特殊なサフィックスまたは拡張子を持つすべてのファイルを開くことができます。

$ alias -s txt=nano
$ word.txt 

nanoを使用してword.txtファイルを開きます。 Bashでどうすればいいですか?

答え1

どうですかexec zsh

ただし、この機能は実際にbashで利用できます(バージョン4.0では、OSXユーザーは前の段落を参照)。ほとんど。 Bashが で見つからないコマンドを見つけた場合は、次PATHのコマンドを実行します。command_not_found_handle。ファイルが現在のディレクトリにある場合は、ファイルを開こうとする関数を作成できます。

typeset -A extension_aliases
command_not_found_handle () {
  if [[ $# -eq 1 && -e $1 && $1 = *.* ]]; then
    local handler="${extension_aliases[${1##*.}]}"
    if [[ -n $local_handler ]]; then
      eval "$local_handler \"\$@\""
      return
    fi
  fi
  return 127
}

alias -s txt=nano使用する代わりにextension_aliases[txt]=nano

このアプローチには制限があります。ファイルはcommand_not_found_handleスラッシュを含まないコマンド名でのみ呼び出されるため、現在のディレクトリに存在する必要があります。また、ファイル名を完成させることはできません。

既存のメカニズムを使用する方がはるかに簡単です。

xdg-open word.txt

または Debian とその派生物から

see word.txt

いくつかの利点を得ることができます。プログラムの拡張をマップするシステムデータベースが既に存在し、完成が機能し、シェルで特別な処理は必要ありません。より多くの入力が必要ですが、単一文字のエイリアスを定義するか(後にスペースが必要です)、行の先頭xdg-openにキーバインディングを挿入できます。

bind -x '"\eo": READLINE_LINE="xdg-open $READLINE_LINE"; READLINE_POINT+=9'

関連情報