概述
笔者作为一个Windows原住民,对Vim或者Emacs这样的 "高级" 编辑器实在是难以习惯。但在Linux命令行环境或者通过SSH登录服务器时,由于没有GUI,又不得不学习一些Vim知识,毕竟跟Win系编辑器长得差不多的Nano功能又太弱了点。因此,配置一个拥有一些现代化功能(指多文件管理、现代配色、代码格式化、代码提示这四个功能) 的Vim就成了本文的目的。
第一步:环境布置
注:本文以Centos 8为例,其他发行版大同小异,请自行研究。
常规部分很简单,就是用dnf把这些包全部装好,基本上都是一些常见的编译环境搭建,比如c和python之类:
dnf install epel-release -y
dnf install git -y
dnf install -y gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto udns-devel c-ares-devel libev-devel libsodium-devel mbedtls-devel net-tools wget bind-utils nano ncurses ncurses-devel
dnf -y groupinstall 'Development Tools'
dnf -y install python3 python3-devel
第二步:编译安装Vim 8.2
首先卸载系统自带的Vim: dnf -y remove vim
然后用: rpm -qa|grep vim
看看还有没有残留,有的话用:rpm -e 包名
删除
最后执行:whereis vim
再把所有关于vim的东西全部删掉,用: rm 文件名
下载源代码
git clone https://github.com/vim/vim.git
cd vim
编译前预设置
./configure --with-features=huge --enable-multibyte --enable-python3interp=yes --with-python3-config-dir=/usr/lib64/python3.6
./configure 是对vim进行编译前的预设置,我们还可以输入 ./configure --help 来显示所有参数,关于Python支持要单独说一下:
有两个Python的选项,--enable-python3interp 和 --enable-pythoninterp ,分别表示Vim是否支持Python3或者Python2。特别要注意,Python2和Python3是不能共存的,只能2选1,在例子中我们选择的是Python3。
--with-python3-config-dir 这个选项是必须的,没有它Vim即使安装成功了也无法支持Python,这个目录一般在/usr/lib64/python3.6(64位系统)里面 ,特征是目录里有一个名为 config.c 的文件。如果安装的是python2的话,这个目录应该是:/usr/lib64/python2.7 。
这一步有可能出现出现的错误是:checking for tgetent()... configure: error: NOT FOUND!
输入:dnf -y install ncurses-dev
然后在输入make distclean 重来一遍即可。
编译及安装
make && make install
如果 ./configure 命令无误,编译和安装基本上不会出什么问题。
反安装
make distclean
make uninstall
make clean
如果实在乱套了,可以用这3个命令清洁环境,然后重头再来。
Vim最基本操作
记得我第一次进入Vim界面的时候,别说编辑了,连怎么退出都是懵逼的,所以我们至少还得知道一点点Vim的最基本的操作,下面就来了解一下用Vim如何编辑一个文档并存盘退出:
模式
Vim跟普通编辑器最不同的地方就是它拥有多种模式,现在我们至少得知道两种:
A: 普通模式,也就是输入vim命令后进去的默认模式,屏幕左下角有一个 ”Normal“ 字样
B: 插入模式,也就是所谓的编辑模式,在这个模式下我们才能对文档进行一般操作,此时屏幕左下角有一个 ”Insert" 字样
如何输入内容并存盘退出?
首先进入界面后,按 “i" 键,进入 Insert 模式,OK,现在我们可以正常输入东西了,就像普通编辑器一样。
输入完毕后,我们按下 ”ESC" 键,回到 Normal 模式。再按一下冒号键 " :",这时候左下角出现一个 :(冒号)的东西,这表示Vim等待我们输入指令。
现在,在冒号后面输入wq 这两个字母,然后按回车键,退出Vim界面,返回到了命令行。
ps: wq 其实是两个指令,分别代表 "Write" 和 "Quit",即:保存和退出。
除了w和q之外,vim还有大量的命令,比如dd代表删除整行,yy表示复制整行,8yy表示向下复制8行,等等等等。也因为Vim的设计迥异于一般普通的编辑器,因此派生了两大派系,挺Vim派认为这些命令极大地方便了操作,可以让使用者完全脱离鼠标的状态下高效地对文档进行编辑。反对者则认为需要记忆大量的命令不符合所谓“开箱即用”的原则,即使很多一开始对vim感兴趣的人,也会一次次被繁重的记忆,大量的配置和很多图形化功能的缺失劝退。
路径设置
装完之后,用 whereis vim
看看可执行文件在哪,如果输入vim没反应,有两个方案:
将vim的可执行文件拷贝(用cp命令)到 /usr/bin 里,然后执行 source ~/.bash_profile
,这样就无需设置路径就可以正常使用Vim了。
将whereis vim 显示出来的vim的可执行文件路径记下来,放入系统PATH内,假设现在Vim的可执行文件在/usr/local/bin里面,设置方法:
vim ~/.bash_profile
在PATH=$PATH这行尾部加上【 :/usr/local/bin 】(注意是以冒号开头的)
存盘退出,执行:
source ~/.bash_profile
配置文件地址: ~/.vimrc
VIM的配置文件是一个存放在“家”目录下的隐藏文件,直接用ls命令是看不到的,需要用ls -a才能查看到,也可以通过 vim 本身去编辑它:
vim ~/.vimrc
检查是否支持Python
输入:vim --version | grep python
将会有Python和Python3两行,如果前面是加号(+)的话,则说明安装成功,如果是减号(-)则不行。
另外一种检测方式是进入vim界面,输入指令:
:echo has ("python")
或者
:echo has ("python3")
,
正常会返回1,否则为0
第三步:插件管理器vim-plug
参考地址:https://github.com/junegunn/vim-plug
vim-plug 是Vim的一个管理插件的插件,通过它可以简单地安装Vim的各种插件。
安装方法:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
如何使用?
首先输入:vim ~/.vimrc
编辑vim的配置文件。
然后加入以下内容:
call plug#begin()
"插件放在这里
call plug#end()
将插件的配置项放入call plug#begin() 和 call plug#end() 之间即可,目前没有安装任何插件,因此此处为空。
PS:以 “ (双引号) 开始的行,是vim配置文件的注释行。
第四步:安装NERDTree(树状文件浏览窗口)
参考地址:https://github.com/preservim/nerdtree
多文档操作是作为一个现代化编辑器的一个最低要求了吧,所以这是Vim第一个需要加强的地方。
安装方法:
vim ~/.vimrc 打开vim的设置文件,在call plug#begin() 和 call plug#end() 之间插一行 Plug 'preservim/nerdtree'
, 如下:
call plug#begin()
"插件放在这里
Plug 'preservim/nerdtree'`
call plug#end()
存盘退出,重启VIM,然后输入指令 【 :PlugInstall 】
插件管理器会自动到git hub去下载源代码并自动安装,整个过程无需人工介入,非常简单。
使用方法:
开启方法: 输入 :NERDTree 命令即可打开文件浏览器。
在文件浏览器中选择一个文件,按Enter 表示在当前窗口打开,按t,表示在新的标签页中打开。
切换标签页的方法:按 CTRL+PageUp 和 CTRL+PageDown 键可以左右切换标签页。
为这个插件绑定一个按键:
首先输入:vim ~/.vimrc
编辑vim的配置文件。
然后加入以下内容:
autocmd VimEnter * NERDTree | wincmd p
nnoremap :NERDTreeToggle
第一行表示进入Vim后自动打开文件浏览器,第二行表示绑定 CTRL+t 键切换文件浏览器的:显示/不显示
第五步:安装papercolor-theme 配色方案
参考网址:https://github.com/NLKNguyen/papercolor-theme
这是一个 Material Design 风格的主题,看着还比较顺眼,瞬间让Vim有了一种 “摩登” 的感觉。
安装:
vim ~/.vimrc 打开vim的设置文件,在call plug#begin() 和 call plug#end() 之间插一行如下:
call plug#begin()
"插件放在这里
Plug 'NLKNguyen/papercolor-theme'
call plug#end()
存盘退出,重启VIM,然后输入指令 【 :PlugInstall 】
使用方法:
vim ~/.vimrc 打开vim的设置文件
-
添加以下内容:
set background=dark colorscheme PaperColor
存盘退出,重启Vim就能看到效果了。
第六步:安装代码格式化工具vim-codefmt
参考网址:https://github.com/google/vim-codefmt
这个插件是google出品的,质量和维护有保证。所谓代码格式化工具就是能够将代码按照一定规则,自动完成缩进、空格等等操作的自动化工具,这在如VSCode、SubLime等GUI编辑器里基本是一个必备项目。
安装:
vim ~/.vimrc 打开vim的设置文件,在call plug#begin() 和 call plug#end() 之间插两行如下:
call plug#begin()
"插件放在这里
Plug 'google/vim-maktaba'
Plug 'google/vim-codefmt'
call plug#end()
存盘退出,重启VIM,然后输入指令 【 :PlugInstall 】
设置插件:
再次vim ~/.vimrc 编辑VIM配置文件,输入以下内容:
augroup autoformat_settings
autocmd FileType c,cpp,proto AutoFormatBuffer clang-format
autocmd FileType go AutoFormatBuffer gofmt
autocmd FileType vue,javascript,html,css,sass,scss,less,json AutoFormatBuffer prettier
augroup END
noremap :FormatCode
存盘退出。
autoformat_settings 指定了哪种后缀使用哪种格式化工具,例如:
autocmd FileType c,cpp,proto AutoFormatBuffer clang-format
表示以.c / .cpp / .proto 为后缀的文档,采用clang-format 格式化器。
autocmd FileType vue,javascript,html,css,sass,scss,less,json AutoFormatBuffer prettier
这行表示以.vue,js,html等等前端开发文档,采用prettier格式化器。
noremap
:FormatCode 这行表示将F3键绑定为:FormatCode命令,也就是启动代码格式化功能。
为什么要指定格式化器?
单独使用vim-codefmt 这个插件还不能自动格式化代码,对于不同的语言(通过后缀进行判断),还需要为它安装不同的语言格式化器。现在,假设我们需要针对两种语言编写代码:Golang,Javascript (包括原生JS, HTML,CSS和Vue)
现在,我们随便输入一段go代码:
func test(){ var s="hello"
fmt.Println(s)}
看得出来,这段代码的缩进和空格是很混乱的,在命令模式下,我们输入:FormatCode或者按下F3按键(之前绑定的热键)
这段混乱的代码会变成这样:
func test() {
var s = "hello"
fmt.Println(s)
}
这说明vim-codefmt这个插件基本安装成功了。
Javascript代码支持
上面的go语言例子,现在我们还必须为其安装一个第三方格式化器来处理JS代码,这里我们选择prettier,当然也可以选择的比如js-beautify之类。
安装prettier
参考网址:https://prettier.io/
首先安装nodejs: dnf -y install nodejs
再用npm安装prettier: npm install --save-dev --save-exact prettier
题外话:如果你使用的是原生Centos 8,请略过此段,如果你是在Windows 10系统下,通过WSL安装的Centos 8,那么npm命令由于PATH共享的关系,在WSL下输入npm,系统会去优先执行Windows宿主机器上的npm,导致无法执行,通过以下方法可以切断WSL和Windows 10的PATH共享关系:
在 wsl的centos 8下新建 /etc/wsl.conf 配置文件,并编辑如下内容:
[interop]
appendWindowsPath = false存盘退出。
回到Windows PowerShell这边重启WSL:
net stop LxssManager
net start LxssManager问题解决。
测试prettier
随便创建一个文件,比如说test.js,输入以下代码:
function aaa(){console.log("hello world");}
我们故意写成一行,等会儿让prettier来格式化。
在命令行输入指令格式化这段代码: npx prettier --write test.js
然后通过cat命令来看看这个代码变成什么样了?
输入:cat test.js
如果返回如下:
function aaa() {
console.log("hello world");
}
说明格式化成功,prettier安装基本无误!
为不同的JS文件类型设置不同的格式化选项
鉴于Javascript是一个大家族,其后缀包括.JS / .HTML / .CSS或者说如果采用了框架,还有.VUE之类,而这些不同的文件类型,其格式化选项并不统一,因此我们还必须为其指定不同的设置。
创建prettier设置文件: vim ~/.prettierrc.json
{
"semi": false,
"arrowParens": "always",
"bracketSpacing": true,
"embeddedLanguageFormatting": "auto",
"htmlWhitespaceSensitivity": "css",
"insertPragma": false,
"jsxBracketSameLine": false,
"jsxSingleQuote": false,
"printWidth": 80,
"proseWrap": "preserve",
"quoteProps": "as-needed",
"requirePragma": false,
"singleQuote": false,
"tabWidth": 2,
"trailingComma": "es5",
"useTabs": true,
"overrides": [{
"files": "*.vue",
"options": {
"parser": "vue",
"vueIndentScriptAndStyle": true
}
},
{
"files": "*.js",
"options": {
"parser": "babel"
}
},
{
"files": "*.json",
"options": {
"parser": "json"
}
}
]
}
虽然有点长,但这个设置文件其实并不复杂,在overrides以上的内容,是通用设置,表示所有文件都遵循的标准。而在overrides之后,则出现了3个分支,分别是:.vue .js 和 .json ,表示这三种不同的后缀,其格式化器分别选用vue / babel / json 这三个。 具体什么样的格式化器有什么效果,可以参考prettier官网的playground:
https://prettier.io/playground
在这个网址你可以将代码贴进去,然后切换各种设置开关,看看各种开关到底效果是怎样的,然后点Copy to config JSON即可,这个功能也算是非常贴心了。
在vim-codefmt中测试prettier
一般来说,如果在命令行中prettier能够工作,那么在vim-codefmt中也八九不离十可以用了。
下面就来测试一下,创建1个文件:
vim test.vue
这段代码我们是故意打乱了缩进和空格的,现在输入:FormatCode或者按下F3按键,如果vim-codefmt成功将其格式化,说明它已经可以和prettier联动了,至此代码格式化功能安装成功!
第八步:安装代码补全工具YouCompleteMe
作为一个 ”摩登编辑器“, 代码补全这个功能也是必不可少的, 在Vim下大概最出名的应该算是”YouCompleteMe“这个插件了,简称YCM。 GitHub主页:https://github.com/ycm-core/YouCompleteMe
安装方法:
vim ~/.vimrc 打开vim的设置文件,在call plug#begin() 和 call plug#end() 之间插入:
call plug#begin()
"插件放在这里
Plug 'ycm-core/YouCompleteMe'
call plug#end()
存盘退出,重启VIM,然后输入指令 【 :PlugInstall 】
安装最新版CMake
由于YCM的编译对CMake的版本有要求,因此我么必须先将CMake提到最新版。
首先卸载掉系统自带的CMake: dnf -y remove cmake
然后到CMake的官网找最新版本下载链接:https://cmake.org/download/
然后按照以下方法编译安装CMake:
wget https://github.com/Kitware/CMake/releases/download/v3.20.2/cmake-3.20.2.tar.gz
tar -xvzf cmake-3.20.2.tar.gz
cd cmake-3.20.2
./configure
make && make install
编译YCM核心
cd ~/.vim/plugged/YouCompleteMe
python3 install.py --clangd-completer --go-completer --ts-completer
编译时我们选择了三个开关:
--clangd-completer --go-completer --ts-completer
分别代表C语言支持,Go语言支持和Javascript支持。
完整的选项开关如下:
--clangd-completer 【C语言】
--cs-completer 【C#】
--go-completer 【Golang】
--rust-completer 【Rust】
--java-completer 【Java】
--ts-completer 【Javascript】可根据需求自行设定,如果选择 --all 开关,则全部安装。
这一步容易出错,原因多半是因为CMake和Python没有安装妥当导致的,请仔细检查前一步CMake的安装过程,另外检查系统中这几个包已经安装妥当:
#dnf -y groupinstall 'Development Tools'
#dnf -y install python3 python3-devel
YCM在编译核心的时候,会自动下载相关的第三方模块,有时候由于网络关系会无法访问。这时候你需要一个性能良好的梯子,或者想想别的代理方案,比如说有时候下载Go的补全模块gopls的时候会出现网络问题,可以通过以下方法解决:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
输入以上指令后,再重新执行编译指令,问题解决。
YCM使用方法:
Go语言
先创建一个最简单的工程:
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
rm -rf go.mod
go mod init runscript
创建文件:
vim test.go
--------
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
--------
存盘退出。
go build -i -o test
./test
显示:hello world
编辑go文件:
vim test.go
此时YCM就可以通过底层的gopls触发代码补全了,如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5gXDzZLS-1621199800410)(C:\Users\rocka\AppData\Roaming\Typora\typora-user-images\image-20210513002058860.png)]
前面正儿八经创建了一个hello world工程,是因为gopls的缘故,随便创建一个.go文件貌似gopls不能触发,这个我也没有深究,因为正常用go写代码肯定也要初始化一个工程的,此处只为测试。
YCM命令:
YCM有非常多的命令,具体就不一一介绍了,可以到官方文档具体查询:
https://github.com/ycm-core/YouCompleteMe/blob/master/doc/youcompleteme.txt
比如将光标移动到某个变量上,然后输入Vim指令:
:YcmCompleter GoToDefinition
就可以跳转到这个标量的定义上去,当然实际使用的时候需要映射一些热键才方便。
行文至此,本文的基本目标已经达成,即在纯命令行状态下打造一个 “基本能用” 的编辑器。至于更多的关于Vim的设置,本文不打算深入讨论,这方面网上的资料也很多,可以自行研究。
下面附上我的 .vimrc 配置文件,仅供参考,祝大家编码愉快!
vim ~/vimrc
:
call plug#begin()
Plug 'NLKNguyen/papercolor-theme' "配色方案
Plug 'KeitaNakamura/neodark.vim' "配色方案
Plug 'crusoexia/vim-monokai' "配色方案
Plug 'preservim/nerdtree' "文件导航栏
Plug 'vim-airline/vim-airline' "状态栏增强
Plug 'google/vim-maktaba' "代码格式化
Plug 'google/vim-codefmt' "代码格式化
Plug 'ycm-core/YouCompleteMe' "代码补全
call plug#end()
augroup autoformat_settings
autocmd FileType c,cpp,proto AutoFormatBuffer clang-format
autocmd FileType go AutoFormatBuffer gofmt
autocmd FileType javascript,html,css,sass,scss,less,json AutoFormatBuffer prettier
autocmd FileType vue AutoFormatBuffer prettier
augroup END
noremap :FormatCode
autocmd VimEnter * NERDTree | wincmd p
"配色设置
set termguicolors
set background=dark
colorscheme PaperColor
"colorscheme monokai
"colorscheme neodark
"常规设置:
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set nocompatible
set backspace=indent,eol,start
set ts=4
set expandtab
set autoindent
set nu "打开行号
syntax on "打开语法提示
set visualbell "静音
set incsearch
set ignorecase
syntax enable
filetype plugin indent on " 启用自动补全
"默认路径设置:
cd ~
"按键映射:
nnoremap :wincmd p
nnoremap :wincmd p
nnoremap :NERDTreeToggle
map :tabnew
map :tabdo qa!
inoremap ddi
nnoremap dd
inoremap
nnoremap a
nnoremap p pi
inoremap :wi
nnoremap :tabdo w
map y
map d
map ggVG
-
解决CTRL+S冻屏问题(正常情况下CTRL+Q可解)
这个问题并非Vim的问题,在Linux终端CTRL+S被定义为冻屏功能,按下这个组合键后屏幕完全静止,就像死机一样,其实再按一次CTRL+Q就解除了,彻底屏蔽这个功能的方法如下:
vim ~/.bashrc
if [[ -t 0 && $- = *i* ]] then stty -ixon fi
存盘退出,执行:
source~/.bashrc
问题解决。
2021-05-17 更新: Windows下使用GVim方案
话说Windows作为一个GUI操作系统,已经有VSCode,SubLime,Atom或者更为强大的IDE像是JetBrains或者Visual Studio之类了,而且即使对于那些习惯于Vim操作的用户,这些编辑器无一例外都提供了VIM插件。因此在Windows环境下搭建一个独立的Vim环境感觉有点多余,但鉴于记录的目的还是把过程放在这吧。
第一步:环境布置
安装最新Python
https://www.python.org/ 下载For Windows
安装很简单,为了方便,我们安装到C:\Python39
打开cmd, 输入:
python -V
如果能正确返回版本号,说明Python安装成功。
安装MinGW:
https://sourceforge.net/projects/mingw-w64/postdownload
全部默认下一步,装完之后,为Windows的PATH变量添加一行:
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
打开cmd,输入:
gcc -v
mingw32-make -v
如果能正确返回版本号,说明MinGW安装成功。
安装Node.JS
https://nodejs.org/en/
全部默认下一步,装完之后在cmd输入一行:
node -v
如果能正确返回版本号,说明node.js安装成功!
然后再输入一行:npm install -g js-beautify
装完之后用:js-beautify -v
测试一下。
然后再输入一行:npm install -g js-beautify prettier
装完之后用:prettier
-v` 测试一下。
安装LLVM
https://llvm.org/builds/
除了环境变量那一块要注意写入Windows之外,其他全部按默认。
装完之后在cmd输入一行:
clang-format -version
安装Go
https://golang.org/
全部默认,装完后在cmd输入:
go version
如返回版本号说明安装完毕。
安装Visual Studio 2019
https://visualstudio.microsoft.com/zh-hans/downloads/ (下载一个免费的社区版)
重头戏来了,这可是个大家伙!没办法,因为YCM需要VS2019来编译,只能把这把牛刀搬出来杀鸡。
安装倒是很简单,对于我们此刻需要用到的功能而言,把 【使用C++的桌面开发】这个选项勾上即可,其他都不需要。
全部默认,装完之后为系统加一条PATH:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin
然后开一个cmd,输入:
cmake -help
有输出即可。
我曾经通过原版的CMake for Windows来编译YCM,但可惜的是它不认,因此只能把VS2019给搬出来了。
安装GitBsh
https://git-scm.com/downloads
全默认,装好了打开cmd,输入:
git --version
如输出版本号,说明安装成功。
第二步:编译安装GVIM
打开cmd,输入:
c:
cd\
git clone https://github.com/vim/vim.git
cd vim
cd src
很明显,我是想把Vim安装到c:\vim下,现在请暂且按照这个路径去做,因为后面还有很多配置跟这个路径有关系。此后我还会讲讲如何绿化Vim,绿化之后就可以随便放在任何路径下使用了。
然后用mingw32-make编译vim,耗时比较长,需要耐心等待,输入这条长命令:
mingw32-make -f Make_ming.mak PYTHON3=C:/Python39 DYNAMIC_PYTHON3=yes PYTHON3_VER=39 FEATURES=HUGE DEBUG=no ARCH=x86-64 GUI=yes gvim.exe
mingw32-make是刚才我们安装的MinGW的一部分,如果发现找不到这个命令,请仔细检查前面的步骤是否完成,同时检查有没有为MinGW设置PATH变量。Python方面请按实际版本自行修改,此处是Python39。
GUI开关的含义是:
1:GUI=yes gvim.exe (带图形化界面的gvim)
2:GUI=no vim.exe (不带图形化界面的传统命令行vim)
编译成功后,会生成一个 gvim.exe 文件,将它复制粘贴到 c:\vim\runtime
将 c:\vim 下除了runtime之外的目录和文件全部删除(或者剪切到其他地方备份),现在,整个c:\vim下只剩下光溜溜的一个runtime文件夹了。
再将runtime文件夹的所有内容剪切到c:\vim,最后删除空文件夹runtime即可。
在c:\vim里手工创建一个文件夹 support (这个步骤是为了接下来的绿化工作)
为Windows系统变量Path添加一行:
c:\vim\support
新建一个Windows系统变量 VIMRUNTIME,值是:
c:\vim
-
在c:\vim下新建一个配置文件文件名是 .vimrc 输入以下内容:
"UFT-8设置: set encoding=utf-8 set fileencodings=utf-8,chinese,latin-1,gbk,gb18030,gk2312 set fileencoding=utf-8 source $VIMRUNTIME/delmenu.vim source $VIMRUNTIME/menu.vim language messages zh_CN.utf-8 "常规设置: set noswapfile set clipboard=unnamedplus set termencoding=utf-8 set nocompatible set backspace=indent,eol,start set ts=4 set expandtab set autoindent set nu "打开行号 syntax on "打开语法提示 set visualbell "静音 set hlsearch "搜索高亮 "默认路径设置: cd .
此时,c:\vim\gvim.exe 就可以使用了,你可以直接在c:\vim下输入gvim,或者为它创建一个快捷方式放到桌面。
第三步:安装vim-plug
输入:
curl -fLo c:\vim\autoload\plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
如果输入之后并没有创建文件夹或者没看到plug.vim文件,就再来一次,一般两三次就可以了,这个不是大问题,估计跟我的梯子有关。
装好之后,编辑c:\vim下的.vimrc文件,输入:
call plug#begin("./vimfiles/plugged")
call plug#end()
存盘退出即可。
此处我们将插件的目录定在:c:\vimfiles\plugged 而不是所谓 “Home” 目录里,也是为了将来绿化方便。
vim-plug 装完之后,就可以用它安装插件了。其中 NERDTree 文件浏览器插件和 papercolor-theme 配色插件和在Linux下是完全一样的。请往前翻,这里不再赘述,但在安装代码格式化和代码补全这两个插件时,却跟在Linux下有点区别:
第四步:安装代码格式化工具
在Centos 8下面用得好好的 vim-codefmt 插件,在Windows下无论如何都调不通,于是只好另外选了一个功能类似的插件: vim-autoformat,效果也还不错,主页:https://github.com/Chiel92/vim-autoformat
安装:
编辑c:\vim下的.vimrc文件,在call plug#begin("./vimfiles/plugged") 和 call plug#end() 之间加一行 Plug 'Chiel92/vim-autoformat' ,即如下这样:
call plug#begin("./vimfiles/plugged")
Plug 'Chiel92/vim-autoformat'
call plug#end()
回到gvim后,输入 :PlugInstall 安装。
安装完毕后,因为此前我们已经安装了3个格式化工具:
- 安装LLVM是为了获得 clang-format
- 安装Go是为了获得 gofmt
- 安装Node.js 是为了得到 js-beautify
如上述安装无误,现在打开相应后缀的文件(.c / .go / .js),然后在Vim里输入 :Autoformat 这个命令,代码格式化即可工作。
[排雷Tip]
如果:Autoformat命令后报错,多半是由于 vim 无法直接访问这三个格式化工具所致,测试方法:在cmd输入:
- clang-format --version
- gofmt -h
- js-beautify -v 和 prettier -v
如果输入上述三个命令后,cmd返回 “不是内部或外部命令,也不是可运行的程序或批处理文件” 的话,那么Autoformat肯定也无法正常工作,请仔细检查前述步骤,集中精力检查PATH变量的设置。
PS: 在 C:\vim\vimfiles\plugged\vim-autoformat\samples 目录中,存放了各种不同编程语言的范本,格式和缩进都是惨不忍睹的,你可以用这些文件来测试一下autoformat工作是否正常。
基本测试无误后,编辑 C:\vim\vimfiles\plugged\vim-autoformat\plugin\defaults.vim
修改文件让Prettier 支持 Vue 文件:
" Vue
if !exists('g:formatters_vue')
let g:formatters_vue = [
\ 'prettier',
\ 'eslint_local',
\ 'stylelint',
\ ]
endif
其实就是插入了 \ 'prettier',
这行,意思是优先让prettier来格式话vue文件,其他文件格式,也可以依葫芦画瓢按这个方法去修改。
第五步:安装代码补全工具YouCompleteMe
-
编译核心
cd C:\vim\vimfiles\plugged\YouCompleteMe python install.py --all
过程很漫长,而且容易出错,大部分出问题的原因和VS2019有关,只要确定按照上述的方式装好了VS2019且设置了系统PATH变量,这一步问题不大,反之将烦不胜烦!
在核心编译过程中,YCM会自动安装对应语言的补全工具,无需人工介入。
编译完毕后,按照前文所述的方法建一个空白go工程来测试,具体请往前翻,这里也不再赘述了。
第六步:绿化 GVim
天啊,为了一个小小的GVim,我们竟然安装了整整8个大大小小的软件来支撑它!特别是还包含了VS2019和LLVM这种可能平时根本用不上的巨作,假如换一台电脑又需要劳师动众再做一遍,那简直是一场灾难。因此,必须将我们辛苦打造的Vim环境保存好,可以放进U盘或者网盘上开箱即用才是终极目的。
-
绿化Python
先正常安装一遍Python到
C:\Python39
到https://www.python.org/ftp/python 下载:
python-3.9.5-embed-amd64.zip
将文件解压到
C:\Vim\Support\Python39
下将
C:\Python39
下的\Lib
和\Script
这两个文件夹复制到C:\Vim\Support\Python39
下此时就可以卸载Python39了。
-
抽取文件GVim必须的DLL文件
文件位置:
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
将所有.dll文件拷贝到
C:\VIM\Support
-
抽取Git
文件位置:
C:\Program Files\Git\cmd
将
git.exe
拷贝到C:\VIM\Support
-
抽取CLANG FORMAT
文件位置:
C:\Program Files\LLVM\bin
将
clang-format.exe
拷贝到C:\VIM\Support
-
抽取GOFMT
文件位置:
C:\Go\bin
将
gofmt.exe
拷贝到C:\VIM\Support
-
JS-BEAUTIFY
将
C:\Users\用户名\AppData\Roaming\npm
下的:
js-beautify.cmd
拷贝到C:\Vim\Support
将node_modules\js-beautify
整个文件夹拷贝到C:\Vim\Support
,注意保持目录结构,即:C:\Vim\Support\node_modules\js-beautify
修改js-beautify.cmd
,全部删除,变成两行:@echo off %VIMRUNTIME%\support\node.exe %VIMRUNTIME%\support\node_modules\js-beautify\js\bin\js-beautify.js %*
-
将
C:\Users\用户名\AppData\Roaming\npm
下的:
prettier.cmd
拷贝到C:\Vim\Support
将node_modules\prettier
整个文件夹拷贝到C:\Vim\Support
,注意保持目录结构,即:C:\Vim\Support\node_modules\prettier
修改prettier.cmd
,全部删除,变成两行:@echo off %VIMRUNTIME%\support\node.exe %VIMRUNTIME%\support\node_modules\prettier\bin-prettier.js %*
-
创建一个启动批处理,文件名随意,比如: run.bat
@echo off SET VIMRUNTIME=%cd% SET npath=%VIMRUNTIME%;%VIMRUNTIME%\support;%VIMRUNTIME%\support\python39;%VIMRUNTIME%\support\python39\scripts SET PATH=%PATH%;%npath% start /max %VIMRUNTIME%\gvim.exe
运行run.bat , 能正常进入gvim 且各种插件工作正常,说明绿化工作基本完成。
大功告成,现在,就可以随意改变C:\Vim文件夹的名字了,也可以将它放到任何位置,运行 run.bat !