如何让Vim实现 “四个现代化”

概述

笔者作为一个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支持要单独说一下:

  1. 有两个Python的选项,--enable-python3interp--enable-pythoninterp ,分别表示Vim是否支持Python3或者Python2。特别要注意,Python2和Python3是不能共存的,只能2选1,在例子中我们选择的是Python3。

  2. --with-python3-config-dir 这个选项是必须的,没有它Vim即使安装成功了也无法支持Python,这个目录一般在/usr/lib64/python3.6(64位系统)里面 ,特征是目录里有一个名为 config.c 的文件。如果安装的是python2的话,这个目录应该是:/usr/lib64/python2.7

  3. 这一步有可能出现出现的错误是: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+PageUpCTRL+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 】

使用方法:

  1. vim ~/.vimrc 打开vim的设置文件

  2. 添加以下内容:

    set background=dark
    colorscheme PaperColor
    
  3. 存盘退出,重启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)


  1. 编译成功后,会生成一个 gvim.exe 文件,将它复制粘贴到 c:\vim\runtime

  2. 将 c:\vim 下除了runtime之外的目录和文件全部删除(或者剪切到其他地方备份),现在,整个c:\vim下只剩下光溜溜的一个runtime文件夹了。

  3. 再将runtime文件夹的所有内容剪切到c:\vim,最后删除空文件夹runtime即可。

  4. c:\vim里手工创建一个文件夹 support (这个步骤是为了接下来的绿化工作)

  5. 为Windows系统变量Path添加一行:c:\vim\support

  6. 新建一个Windows系统变量 VIMRUNTIME,值是:c:\vim

  7. 在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个格式化工具:

  1. 安装LLVM是为了获得 clang-format
  2. 安装Go是为了获得 gofmt
  3. 安装Node.js 是为了得到 js-beautify

如上述安装无误,现在打开相应后缀的文件(.c / .go / .js),然后在Vim里输入 :Autoformat 这个命令,代码格式化即可工作。

[排雷Tip]

如果:Autoformat命令后报错,多半是由于 vim 无法直接访问这三个格式化工具所致,测试方法:在cmd输入:

  1. clang-format --version
  2. gofmt -h
  3. 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
  1. 编译核心

    cd C:\vim\vimfiles\plugged\YouCompleteMe
    python install.py --all
    

    过程很漫长,而且容易出错,大部分出问题的原因和VS2019有关,只要确定按照上述的方式装好了VS2019且设置了系统PATH变量,这一步问题不大,反之将烦不胜烦!

  2. 在核心编译过程中,YCM会自动安装对应语言的补全工具,无需人工介入。

  3. 编译完毕后,按照前文所述的方法建一个空白go工程来测试,具体请往前翻,这里也不再赘述了。


第六步:绿化 GVim

天啊,为了一个小小的GVim,我们竟然安装了整整8个大大小小的软件来支撑它!特别是还包含了VS2019和LLVM这种可能平时根本用不上的巨作,假如换一台电脑又需要劳师动众再做一遍,那简直是一场灾难。因此,必须将我们辛苦打造的Vim环境保存好,可以放进U盘或者网盘上开箱即用才是终极目的。

  1. 绿化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了。


  2. 抽取文件GVim必须的DLL文件

    文件位置:C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin

    将所有.dll文件拷贝到 C:\VIM\Support


  3. 抽取Git

    文件位置:C:\Program Files\Git\cmd

    git.exe 拷贝到 C:\VIM\Support


  4. 抽取CLANG FORMAT

    文件位置:C:\Program Files\LLVM\bin

    clang-format.exe 拷贝到 C:\VIM\Support

  5. 抽取GOFMT

    文件位置:C:\Go\bin

    gofmt.exe 拷贝到 C:\VIM\Support


  6. 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 %*
    

  7. 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 %*
    

  8. 创建一个启动批处理,文件名随意,比如: 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
    
  9. 运行run.bat , 能正常进入gvim 且各种插件工作正常,说明绿化工作基本完成。

  10. 大功告成,现在,就可以随意改变C:\Vim文件夹的名字了,也可以将它放到任何位置,运行 run.bat

你可能感兴趣的:(如何让Vim实现 “四个现代化”)