以前は、stderrに文字列をエコーするBashスクリプトフラグメントを見つけました。
echoerr() { echo "$@" 1>&2; }
echoerr hello world
これはまだ私のクリップボードにあり(VIMを使用して)ファイルを編集しようとしたときに誤ってファイル名の代わりにこのフラグメントを再貼り付けました。
vim echoerr() { echo "$@" 1>&2; }
echoerr hello world
echoerr
次のユーザーに再割り当てされたようですvim
。
$ where vim
vim () {
echo "$@" 1>&2;
}
/usr/bin/vim
VIMを使用してファイルを開こうとすると、ファイル名のみがエコーされます。
vim path/to/some-file
印刷:
path/to/some-file
どうしたの?(tmux内でzshを実行しています)
答え1
zsh
複数の名前で関数を定義できるからです。からman zshmisc
:
function word ... [ () ] [ term ] { list }
word ... () [ term ] { list }
word ... () [ term ] command
where term is one or more newline or ;. Define a function which
is referenced by any one of word. Normally, only one word is
provided; multiple words are usually only useful for setting
traps. The body of the function is the list between the { and
}. See the section `Functions'.
答え2
という関数を正常に作成しましたvim()
。これは、zshを使用すると同時に複数の名前を持つ単一の関数を生成できるためです。
% vim dud() { echo ran dud function }
% dud
ran dud function
% vim path/to/some-file
ran dud function
vim()
とがどのように関数dud()
に設定されているかを確認してください。
次のように関数定義を無効にすることで、無効な関数を終了できます。
% unset -f vim
これでvim path/to/some-file
エディタが開きます。