Comando reasignado

Comando reasignado

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 echoerra 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 zshle 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-filedebería abrir su editor.

información relacionada