为了解决 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
这个函数中也没有必要。