如何创建一个有效的 emacs 别名函数?

如何创建一个有效的 emacs 别名函数?

为了解决 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'

我相信这就是您所需要的。它无条件设置TERMxterm并运行emacs

如果您只想在以下位置执行此操作tmux

emacs () {
    if [ -n "$TMUX" ]; then
        TERM=xterm command emacs "$@"
    else
        command emacs "$@"
    fi
}

command用于不是递归调用该函数。别名中不需要这样做。return这个函数中也没有必要。

相关内容