我用维姆很多,我知道我该怎么做以插入模式启动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 处于插入模式。)
答案1
别名是当前每个 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
/其他程序的配置,您可能需要指定该包装脚本的完整路径(即,editor = /usr/local/bin/vii
)。如果您可以让 vim 始终以插入模式启动,请通过
startinsert
在 末尾添加 来配置它.vimrc
。
1 您可以将“she-bang”行编写为#!/bin/bash
,但在不包含isms 的脚本中则无需这样做bash
。
2 $@
必须用双引号引起来,以防使用包含空格的参数调用脚本。startinsert
不需要引用(但这并没有什么坏处)。
答案2
只需将编辑器变量设置为
[core]
editor = vim -c 'startinsert'
对于您的其他答案,不,您不能将别名放置在目录中,因为别名是 shell 中的一个概念。正常的方法是创建一个适当的包装脚本来执行指定的命令,例如,
#!/bin/sh
vim -c 'startinsert' "$@"
并将脚本另存为vii
并使其可执行。您可以将脚本放置在您喜欢的任何位置,但通常此类脚本保存在文件$HOME
夹中的某个位置$HOME/bin
,而不是保存在全局目录中。