Windows系统下的git bash在安装时自带了默认的vim,我自己也下了个gvim,并且配置了.vimrc
,其中使用了vim-plug管理nerdtree这些插件。但是在bash中vim <file>
时,就会蹦出来几行报错:
处理 /c/Users/<username>/.vimrc 时发生错误:
第 152 行:
E117: 未知的函数: plug#begin
第 155 行:
E492: 不是编辑器的命令: Plug 'scrooloose/nerdtree'
第 161 行:
E117: 未知的函数: plug#end
请按 ENTER 或其它命令继续
bash和Windows的vim
我们在bash中输入which vim
,显示结果是/usr/bin/vim
代表bash用的是自带的vim,而不是我们的gvim,同时gvim也带了个vim.exe,这里我们可以比较下三者的不同。
显示
- bash自带的vim(“C:\Program Files\Git\usr\bin\vim.exe”)
- gvim (“C:\Program Files (x86)\Vim\vim82\gvim.exe”)
- gvim下的vim.exe (“C:\Program Files (x86)\Vim\vim82\vim.exe”)
可以看到他们的界面是有些差异的:bash的vim和gvim长得很像,但是不能读plug且窗口界面小了很多。而vim.exe界面渲染不同,颜色炫酷了些,且窗口大小和bash的vim一样。
.vimrc配置
我在.vimrc
中设置了winpos 380 210
,指定了窗口的位置,所以他们左上角的位置是相同的。
使用vim.exe作为bash的vim
因为bash自带的vim不能正常工作,我们决定修改vim的别名
# 方案一
$ alias vim="C:\Program Files (x86)\Vim\vim82\gvim.exe"
# vim <file>后跳出新的gvim窗口
# 方案二
$ alias vim="C:\Program Files (x86)\Vim\vim82\vim.exe"
# vim <file>后仍在当前bash窗口,但是窗口移动到了.vimrc中定义的380 210位置,大小也随之改变。
# :q!退出vim后窗口位置不变,大小恢复
方案一比较省事,跳出的vim界面也可以编辑,但是美中不足的是不在shell内
方案二仍是在shell窗口编辑,但是窗口的大小和位置都会改变。
之后就可以将alias vim="C:\Program Files (x86)\Vim\vim82\vim.exe"
放在~/.bash_profile
中了。至于为什么放在.bashrc
中无效,放在最后讨论
这里我们进一步优化方案二
修改bash窗口的位置和大小
其中调整窗口位置和.vimrc中一致即可。不过
.bashrc和.bash_profile
主目录下有.bash_profile
和.bashrc
,每次打开新的git窗口时,就会加载.bash_profile
而不是.bashrc
。这里就涉及到了login shell和non-login shell,我们的git bash就属于前者。
Windows下的git bash是login shell Windows没有login shell的概念
简洁的方法就是在.bash_profile
最后添加
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
这样就可以执行.bashrc
中的指令了
参考:
- .bashrc not executed when opening new terminal(这是askubuntu、、Git for Windows不是GNU/Linux,用虚拟机或wsl吧)
- Shell 启动类型探究 ── login && interactive(启动文件的顺序)
- Git for Windows: .bashrc or equivalent configuration files for Git Bash shell(新版的git for Windows,启动时自带–login,所以不会直接读.bashrc,需要在.bash_profile加source .bashrc)
关于删除.bash_profile那些事
想尝试下删掉~/.bash_profile
后.bashrc
会不会被自动执行,结果重新打开git就给出了warning:
WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.
This looks like an incorrect setup.
A ~/.bash_profile that loads ~/.bashrc will be created for you.
然后在主目录下发现了新的.bash_profile
# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc