이전에 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
편집기가 열립니다.