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
この機能でも必要ありません。