zshコマンドラインですべてのエイリアスを確認してください。

zshコマンドラインですべてのエイリアスを確認してください。

ネストされたエイリアスがあり、コマンドを実行する前にすべてのエイリアスを確認したいと思います。どうすればいいですか?

どのキーにもバインドされていない機能がある場合は、M-x foobar私も大丈夫です。外部コマンド(、、、など)も使用できますtype。スレッド内のすべてを試しました。commandwhich「which」を使わないのはなぜですか?それでは何を使うべきですか?しかし、何も動作しません。

ベストアンサー1

Ctrl-Alt-Eはbash単にエイリアスを拡張するものではありません。また、変数、コマンド置換(!)、プロセス置換(!)、算術拡張、および引用符の削除(ファイル名の生成(ワイルドカード)、またはチルダ拡張を実行しない)も拡張します。

エイリアスを拡張することは必ずしも可能ではありません。したがって、用途がありますが、その結果、コマンドラインの意味が変わり、副作用があり、潜在的に危険である可能性があることを認識することが重要です。

たとえば、

$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done

ここをクリックすると、M-C-E次の内容が表示されます。

$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done

rm -rf *これはまったく異なるコマンドラインを提供します(上記のコマンドラインを代わりに使用するとどうなるか想像してください)、エイリアスを拡張しませんpwdfoo

を使用すると、zsh関数内で拡張されたエイリアスのGillesの説明に基づいて、次のことができます。

expand-aliases() {
  unset 'functions[_expand-aliases]'
  functions[_expand-aliases]=$BUFFER
  (($+functions[_expand-aliases])) &&
    BUFFER=${functions[_expand-aliases]#$'\t'} &&
    CURSOR=$#BUFFER
}

zle -N expand-aliases
bindkey '\e^E' expand-aliases

エイリアスは、現在のコマンドラインが構文的に有効な場合にのみ拡張されます(したがって、構文チェッカーとしても機能します)。

MCEとは異なり、エイリアスもbash完全に解決します。たとえば、次のような場合があります。

$ alias ll='ls -l'; alias ls='ls --color'
$ ll

次に展開されます。

$ ls --color -l

また、構文を正規化します。たとえば、次のようになります。

$ for i (*) cmd $i; foo

に変更:

$ for i in *
        do
                cmd $i
        done
        foo

おすすめ記事