美文网首页
如何让Vim实现 “四个现代化”

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

作者: Rockage | 来源:发表于2021-05-09 04:29 被阅读0次

    概述

    笔者作为一个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 <C-t> :NERDTreeToggle<CR>
    

    第一行表示进入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 <F3> :FormatCode<CR>
    

    存盘退出。

    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 <F3> :FormatCode<CR>

    这行表示将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

    <template><v-app id="inspire"> </v-app></template><script>
    <script>export default {
    name: "sayhi",
    data: () => ({
    drawer: false,
    }),
    methods: {
    test: function (path) {},
    },
    }</script>
    

    这段代码我们是故意打乱了缩进和空格的,现在输入: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 <F3> :FormatCode<CR>
    
    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 <C-Left> <ESC>:wincmd p<CR>
    nnoremap <C-Right> <ESC>:wincmd p<CR>
    nnoremap <C-t> :NERDTreeToggle<CR>
    map <F10> <Esc>:tabnew<CR>
    map <F12> <Esc>:tabdo qa!<CR>
    inoremap <C-d> <ESC>ddi
    nnoremap <C-d> <ESC>dd
    inoremap <C-\> <Esc>
    nnoremap <C-\> a
    nnoremap p pi
    inoremap <C-s> <ESC>:w<CR>i
    nnoremap <F11> <ESC>:tabdo w<CR>
    map <C-c> y
    map <C-x> d
    map <C-a> <Esc>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实现 “四个现代化”

          本文链接:https://www.haomeiwen.com/subject/yufmdltx.html