
Anteriormente encontré un fragmento de script de Bash con el que hacer eco de una cadena en stderr:
echoerr() { echo "$@" 1>&2; }
echoerr hello world
Esto permaneció en mi portapapeles, y cuando quise editar un archivo (con VIM) accidentalmente pegué este fragmento nuevamente en lugar del nombre del archivo:
vim echoerr() { echo "$@" 1>&2; }
echoerr hello world
Parece haber sido reasignado echoerr
a vim
:
$ where vim
vim () {
echo "$@" 1>&2;
}
/usr/bin/vim
Además, al intentar abrir un archivo con VIM ahora solo se repite el nombre del archivo:
vim path/to/some-file
Huellas dactilares:
path/to/some-file
¿Qué pasó?(Estoy ejecutando zsh dentro de tmux)
Respuesta1
Porque zsh
le permite definir funciones con varios nombres. De 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'.
Respuesta2
Has logrado crear una función llamada vim()
. Esto es posible porque zsh te permite crear una única función con más de un nombre al mismo tiempo.
% vim dud() { echo ran dud function }
% dud
ran dud function
% vim path/to/some-file
ran dud function
Observe cómo vim()
y dud()
ambos se configuraron como funciones.
Puedes eliminar el error desarmantando la función def de esta manera:
% unset -f vim
Ahora vim path/to/some-file
debería abrir su editor.