tmux의 성가신 문제를 해결하기 위해 .bashrc 파일에 다음 코드를 추가했습니다.
alias emcs="command emacs"
# Fix emacs in tmux
emacs () {
if [ $TERM != "xterm" ]
then
TERM=xterm emacs "$@"
else
emacs "$@"
fi
return;
}
별칭은 원래 emacs 명령에 더 쉽게 액세스하기 위한 것입니다.
이 함수는 나중에 나열된 인수로 대체되어야 합니다 emacs . . .
.TERM-xterm emacs . . .
내 문제는 그것을 실행할 때 emacs
명령줄에서 멈추는 것입니다. 기능을 "emaacs" 또는 "emacs" 이외의 것으로 변경하면 완벽하게 작동합니다. 명령의 실제 이름을 사용할 때 작동이 멈추는 이유는 무엇이며 작동하게 하려면 어떻게 해야 합니까?
(내가 왜 이렇게 했는지 궁금하다면 tmux가 터미널을 화면으로 변경하기 때문인데, 어떤 이유로 주석과 변수 이름이 같은 색상인 emacs 색상을 변경하기 때문입니다.)
답변1
귀하의 기능을 살펴보십시오. 이 예에서는 유죄를 기소하기 위해 일부 이름을 변경하고 귀하의 질문과 관련 없는 일부 이름을 제거했습니다.
recurse{} (
recurse "$@"
}
호출되면 어떻게 될 것이라고 생각하시나요?
이 문제를 해결하려면 명시적 바이너리를 호출하면 됩니다.
emacs () {
if [ $TERM != "xterm" ]
then
TERM=xterm /usr/bin/emacs "$@"
else
/usr/bin/emacs "$@"
fi
return;
}
또는 경로가 올바르게 설정되어 있다고 믿을 수 있습니다.
emacs () {
if [ $TERM != "xterm" ]
then
TERM=xterm command emacs "$@"
else
command emacs "$@"
fi
return;
}
답변2
alias emacs='TERM=xterm emacs'
나는 이것이 당신에게 필요한 것이라고 믿습니다. 무조건 으로 설정 TERM
되어 xterm
실행됩니다 emacs
.
이 작업을 다음에서만 수행하려는 경우 tmux
:
emacs () {
if [ -n "$TMUX" ]; then
TERM=xterm command emacs "$@"
else
command emacs "$@"
fi
}
이는 command
다음 용도로 사용됩니다.아니요이 함수를 재귀적으로 호출하세요. 별칭에는 필요하지 않습니다. return
이 기능에서도 필요하지 않습니다.