Windows git bash输入vim报错,不能使用vim-plug插件管理器

Windows系统下的git bash在安装时自带了默认的vim,我自己也下了个gvim,并且配置了.vimrc,其中使用了vim-plug管理nerdtree这些插件。但是在bash中vim 时,就会蹦出来几行报错:

处理 /c/Users//.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”)
    Windows git bash输入vim报错,不能使用vim-plug插件管理器_第1张图片Windows git bash输入vim报错,不能使用vim-plug插件管理器_第2张图片
  • gvim (“C:\Program Files (x86)\Vim\vim82\gvim.exe”)
    Windows git bash输入vim报错,不能使用vim-plug插件管理器_第3张图片
  • gvim下的vim.exe (“C:\Program Files (x86)\Vim\vim82\vim.exe”)
    Windows git bash输入vim报错,不能使用vim-plug插件管理器_第4张图片

可以看到他们的界面是有些差异的: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 后跳出新的gvim窗口
# 方案二
$ alias vim="C:\Program Files (x86)\Vim\vim82\vim.exe"
# vim 后仍在当前bash窗口,但是窗口移动到了.vimrc中定义的380 210位置,大小也随之改变。
# :q!退出vim后窗口位置不变,大小恢复

方案一比较省事,跳出的vim界面也可以编辑,但是美中不足的是不在shell内
方案二仍是在shell窗口编辑,但是窗口的大小和位置都会改变。

之后就可以将alias vim="C:\Program Files (x86)\Vim\vim82\vim.exe"放在~/.bash_profile中了。至于为什么放在.bashrc中无效,放在最后讨论

这里我们进一步优化方案二

修改bash窗口的位置和大小

Windows git bash输入vim报错,不能使用vim-plug插件管理器_第5张图片
其中调整窗口位置和.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

你可能感兴趣的:(踩坑求生手册,windows,git,bash)