Bash
將現有命令的別名版本放在 /usr/bin/
我經常使用Vim,而且我知道如何在插入模式下啟動 vim。
vii
所以我的文件中有一個別名.bash_aliases
。另一方面,我也經常使用Git,我的
.gitconfig
:[core] editor = vi
要編寫送出消息,每次都會打開 vi 編輯器,我必須進入插入模式。所以我想用 , 代替
vi
,vii
並做到了。但問題是當我這樣做時
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
,但不需要在不包含bash
isms 的腳本中。2
$@
必須用雙引號括起來,以防腳本被呼叫時使用包含空格的參數。startinsert
不需要引用(但它不會受到傷害)。