Bash

如何製作有效的 emacs 別名函式?

  • April 25, 2018

為了解決 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 顏色。)

看看你的功能。在此範例中,我更改了一些名稱以控告有罪,並與您的問題無關:

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;
}

引用自:https://unix.stackexchange.com/questions/440025