
Ich habe vorhin einen Ausschnitt eines Bash-Skripts gefunden, mit dem man einen String an stderr zurückgeben kann:
echoerr() { echo "$@" 1>&2; }
echoerr hello world
Dies blieb in meiner Zwischenablage, und als ich eine Datei bearbeiten wollte (mit VIM), habe ich versehentlich anstelle des Dateinamens diesen Ausschnitt erneut eingefügt:
vim echoerr() { echo "$@" 1>&2; }
echoerr hello world
Es scheint neu zugewiesen worden zu sein echoerr
an vim
:
$ where vim
vim () {
echo "$@" 1>&2;
}
/usr/bin/vim
Außerdem wird beim Versuch, eine Datei mit VIM zu öffnen, jetzt nur der Dateiname zurückgespiegelt:
vim path/to/some-file
Drucke:
path/to/some-file
Was ist passiert?(Ich führe zsh in tmux aus)
Antwort1
Weil zsh
Sie Funktionen mit mehreren Namen definieren können. Von 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'.
Antwort2
Sie haben es geschafft, eine Funktion namens zu erstellen vim()
. Dies ist möglich, weil Sie mit zsh eine einzelne Funktion mit mehreren Namen gleichzeitig erstellen können.
% vim dud() { echo ran dud function }
% dud
ran dud function
% vim path/to/some-file
ran dud function
Beachten Sie, wie vim()
und dud()
beide als Funktionen festgelegt wurden.
Sie können das fehlerhafte Element beseitigen, indem Sie die Funktionsdefinition dafür wie folgt aufheben:
% unset -f vim
Jetzt vim path/to/some-file
sollte Ihr Editor geöffnet werden.