Bash

將現有命令的別名版本放在 /usr/bin/

  • October 3, 2014

我經常使用Vim,而且我知道如何在插入模式下啟動 vimvii所以我的文件中有一個別名.bash_aliases

另一方面,我也經常使用Git,我的.gitconfig:

[core]
   editor = vi

要編寫送出消息,每次都會打開 vi 編輯器,我必須進入插入模式。所以我想用 , 代替vivii並做到了。

但問題是當我這樣做時git commit,它沒有在插入模式下打開 vim,而是給出了這個錯誤:

error: cannot run vii: No such file or directory
error: There was a problem with the editor 'vii'.
Please supply the message using either -m or -F option.

這清楚地表明 git 不會查找.bash_aliases文件,即使它與 bash 沒有任何關係。它確實直接查看是否存在/usr/bin/vii。如果是,則執行它。

問題

我可以將 vi 的別名版本vii放在 中/usr/bin/嗎?

(請不要建議我使用git commit -m "<commit message>". 還有其他情況我需要 vim 在插入模式下。)

別名是您目前每個 shell 環境的內部 - 它們由目前執行的 shell擴展bash(在您的情況下),因此它們僅對您通過在終端中鍵入/粘貼來執行的內容產生影響。

您在這里至少有兩個選擇:

  • 創建一個名為的包裝腳本vii,該腳本將執行vim -c 'startinsert'並最好將其放入/usr/local/bin/(或者$HOME/bin,如果它存在並且在您的搜尋路徑中)。腳本只需要包含
#!/bin/sh1
exec vim -c 'startinsert' "$@" 2

(確保通過執行使其可執行chmod +x /usr/local/bin/vii。)根據您的 /other 程序的PATH配置git,您可能需要指定該包裝腳本的完整路徑(即,editor = /usr/local/bin/vii)。

  • 如果您可以讓 vim 始終以插入模式啟動,請通過startinsert在末尾添加.vimrc.

1   您可以將“she-bang”行寫為#!/bin/bash,但不需要在不包含bashisms 的腳本中。

2   $@必須用雙引號括起來,以防腳本被呼叫時使用包含空格的參數。startinsert不需要引用(但它不會受到傷害)。

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