San*_*mar 3 bash vim git alias executable
我经常使用Vim,我知道如何在插入模式下启动 vim。所以我有一个名为别名vii在我的.bash_aliases文件。
另一方面,我也经常使用Git,并且在我的.gitconfig:
[core]
editor = vi
Run Code Online (Sandbox Code Playgroud)
要编写提交消息,每次都会打开 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.
Run Code Online (Sandbox Code Playgroud)
这清楚地表明 git 不查找.bash_aliases文件,即使它与 bash 没有任何关系。它会直接查看是否存在/usr/bin/vii。如果是,则执行它。
我可以像viiin一样放置 vi 的别名版本/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。)根据PATH您的git/other 程序的配置,您可能需要指定该包装脚本的完整路径(即editor = /usr/local/bin/vii)。
如果您可以让 vim 始终以插入模式启动,请通过startinsert在.vimrc.
1 您可以将“she-bang”行写为#!/bin/bash,但在不包含bashisms的脚本中无需如此。
2 $@必须在双引号中,以防脚本被调用时使用包含空格的参数。startinsert不需要引用(但它不会受到伤害)。
只需将编辑器变量设置为
[core]
editor = vim -c 'startinsert'
Run Code Online (Sandbox Code Playgroud)
对于您的另一个答案,不,您不能在目录中放置别名,因为别名是您的 shell 中的一个概念。通常的方法是创建一个合适的包装脚本来执行指定的命令,例如,
#!/bin/sh
vim -c 'startinsert' "$@"
Run Code Online (Sandbox Code Playgroud)
并将脚本另存为vii并使其可执行。您可以将脚本放置在您喜欢的任何位置,但通常此类脚本保存在您的$HOME文件夹中的某处,$HOME/bin而不是全局目录中。
| 归档时间: |
|
| 查看次数: |
774 次 |
| 最近记录: |