如何讓Vim實現(xiàn) “四個現(xiàn)代化”

概述

筆者作為一個Windows原住民,對Vim或者Emacs這樣的 "高級" 編輯器實在是難以習慣瑟匆。但在Linux命令行環(huán)境或者通過SSH登錄服務器時,由于沒有GUI谊娇,又不得不學習一些Vim知識示姿,畢竟跟Win系編輯器長得差不多的Nano功能又太弱了點埋泵。因此留夜,配置一個擁有一些現(xiàn)代化功能(指多文件管理包警、現(xiàn)代配色撬碟、代碼格式化诞挨、代碼提示這四個功能) 的Vim就成了本文的目的莉撇。


第一步:環(huán)境布置

注:本文以Centos 8為例,其他發(fā)行版大同小異惶傻,請自行研究棍郎。

常規(guī)部分很簡單,就是用dnf把這些包全部裝好银室,基本上都是一些常見的編譯環(huán)境搭建涂佃,比如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

首先卸載系統(tǒng)自帶的Vim: dnf -y remove vim

然后用: rpm -qa|grep vim 看看還有沒有殘留,有的話用:rpm -e 包名刪除

最后執(zhí)行: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 來顯示所有參數(shù),關于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位系統(tǒng))里面 誉察,特征是目錄里有一個名為 config.c 的文件与涡。如果安裝的是python2的話,這個目錄應該是:/usr/lib64/python2.7 持偏。

  3. 這一步有可能出現(xiàn)出現(xiàn)的錯誤是: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個命令清潔環(huán)境,然后重頭再來卿叽。

Vim最基本操作

記得我第一次進入Vim界面的時候桥胞,別說編輯了,連怎么退出都是懵逼的考婴,所以我們至少還得知道一點點Vim的最基本的操作贩虾,下面就來了解一下用Vim如何編輯一個文檔并存盤退出:

模式

Vim跟普通編輯器最不同的地方就是它擁有多種模式,現(xiàn)在我們至少得知道兩種:

A: 普通模式沥阱,也就是輸入vim命令后進去的默認模式缎罢,屏幕左下角有一個 ”Normal“ 字樣

B: 插入模式,也就是所謂的編輯模式,在這個模式下我們才能對文檔進行一般操作策精,此時屏幕左下角有一個 ”Insert" 字樣

如何輸入內容并存盤退出舰始?

首先進入界面后,按 “i" 鍵咽袜,進入 Insert 模式丸卷,OK,現(xiàn)在我們可以正常輸入東西了询刹,就像普通編輯器一樣及老。

輸入完畢后,我們按下 ”ESC" 鍵范抓,回到 Normal 模式骄恶。再按一下冒號鍵 " ",這時候左下角出現(xiàn)一個 :(冒號)的東西匕垫,這表示Vim等待我們輸入指令僧鲁。

現(xiàn)在,在冒號后面輸入wq 這兩個字母象泵,然后按回車鍵寞秃,退出Vim界面,返回到了命令行偶惠。

ps: wq 其實是兩個指令春寿,分別代表 "Write" 和 "Quit",即:保存和退出忽孽。

除了w和q之外绑改,vim還有大量的命令,比如dd代表刪除整行兄一,yy表示復制整行厘线,8yy表示向下復制8行,等等等等出革。也因為Vim的設計迥異于一般普通的編輯器造壮,因此派生了兩大派系,挺Vim派認為這些命令極大地方便了操作骂束,可以讓使用者完全脫離鼠標的狀態(tài)下高效地對文檔進行編輯耳璧。反對者則認為需要記憶大量的命令不符合所謂“開箱即用”的原則,即使很多一開始對vim感興趣的人展箱,也會一次次被繁重的記憶旨枯,大量的配置和很多圖形化功能的缺失勸退。

路徑設置

裝完之后析藕,用 whereis vim 看看可執(zhí)行文件在哪召廷,如果輸入vim沒反應,有兩個方案:

將vim的可執(zhí)行文件拷貝(用cp命令)到 /usr/bin 里账胧,然后執(zhí)行 source ~/.bash_profile 竞慢,這樣就無需設置路徑就可以正常使用Vim了。

將whereis vim 顯示出來的vim的可執(zhí)行文件路徑記下來治泥,放入系統(tǒng)PATH內筹煮,假設現(xiàn)在Vim的可執(zhí)行文件在/usr/local/bin里面,設置方法:

vim ~/.bash_profile
在PATH=$PATH這行尾部加上【  :/usr/local/bin  】(注意是以冒號開頭的)
存盤退出居夹,執(zhí)行:
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

多文檔操作是作為一個現(xiàn)代化編輯器的一個最低要求了吧萧求,所以這是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 配色方案

參考網(wǎng)址: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

參考網(wǎng)址:https://github.com/google/vim-codefmt

這個插件是google出品的雳殊,質量和維護有保證橘沥。所謂代碼格式化工具就是能夠將代碼按照一定規(guī)則,自動完成縮進夯秃、空格等等操作的自動化工具威恼,這在如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等等前端開發(fā)文檔漂羊,采用prettier格式化器驾锰。

noremap <F3> :FormatCode<CR>

這行表示將F3鍵綁定為:FormatCode命令,也就是啟動代碼格式化功能走越。


為什么要指定格式化器椭豫?

單獨使用vim-codefmt 這個插件還不能自動格式化代碼,對于不同的語言(通過后綴進行判斷)旨指,還需要為它安裝不同的語言格式化器∩退郑現(xiàn)在,假設我們需要針對兩種語言編寫代碼:Golang谆构,Javascript (包括原生JS, HTML裸扶,CSS和Vue)

現(xiàn)在,我們隨便輸入一段go代碼:

 func test(){        var s="hello"
fmt.Println(s)}

看得出來搬素,這段代碼的縮進和空格是很混亂的呵晨,在命令模式下魏保,我們輸入:FormatCode或者按下F3按鍵(之前綁定的熱鍵)

這段混亂的代碼會變成這樣:

func test() {
     var s = "hello"
     fmt.Println(s)
}

這說明vim-codefmt這個插件基本安裝成功了。


Javascript代碼支持

上面的go語言例子摸屠,現(xiàn)在我們還必須為其安裝一個第三方格式化器來處理JS代碼谓罗,這里我們選擇prettier,當然也可以選擇的比如js-beautify之類餐塘。

安裝prettier

參考網(wǎng)址:https://prettier.io/

首先安裝nodejs: dnf -y install nodejs

再用npm安裝prettier: npm install --save-dev --save-exact prettier

題外話:如果你使用的是原生Centos 8,請略過此段皂吮,如果你是在Windows 10系統(tǒng)下戒傻,通過WSL安裝的Centos 8,那么npm命令由于PATH共享的關系蜂筹,在WSL下輸入npm需纳,系統(tǒng)會去優(yōu)先執(zhí)行Windows宿主機器上的npm,導致無法執(zhí)行艺挪,通過以下方法可以切斷WSL和Windows 10的PATH共享關系:

在 wsl的centos 8下新建 /etc/wsl.conf 配置文件不翩,并編輯如下內容:
[interop]
appendWindowsPath = false

存盤退出。

回到Windows PowerShell這邊重啟WSL:
net stop LxssManager
net start LxssManager

問題解決麻裳。


測試prettier

隨便創(chuàng)建一個文件口蝠,比如說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之類寸五,而這些不同的文件類型,其格式化選項并不統(tǒng)一耿币,因此我們還必須為其指定不同的設置梳杏。

創(chuàng)建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之后烁试,則出現(xiàn)了3個分支,分別是:.vue .js 和 .json 拢肆,表示這三種不同的后綴减响,其格式化器分別選用vue / babel / json 這三個靖诗。 具體什么樣的格式化器有什么效果,可以參考prettier官網(wǎng)的playground:

https://prettier.io/playground

在這個網(wǎng)址你可以將代碼貼進去支示,然后切換各種設置開關刊橘,看看各種開關到底效果是怎樣的,然后點Copy to config JSON即可颂鸿,這個功能也算是非常貼心了促绵。


在vim-codefmt中測試prettier

一般來說,如果在命令行中prettier能夠工作嘴纺,那么在vim-codefmt中也八九不離十可以用了败晴。

下面就來測試一下,創(chuàng)建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>

這段代碼我們是故意打亂了縮進和空格的栽渴,現(xiàn)在輸入:FormatCode或者按下F3按鍵尖坤,如果vim-codefmt成功將其格式化,說明它已經(jīng)可以和prettier聯(lián)動了闲擦,至此代碼格式化功能安裝成功慢味!


第八步:安裝代碼補全工具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提到最新版定嗓。

首先卸載掉系統(tǒng)自帶的CMake: dnf -y remove cmake
然后到CMake的官網(wǎng)找最新版本下載鏈接: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】

可根據(jù)需求自行設定宵溅,如果選擇 --all 開關,則全部安裝上炎。

這一步容易出錯恃逻,原因多半是因為CMake和Python沒有安裝妥當導致的,請仔細檢查前一步CMake的安裝過程藕施,另外檢查系統(tǒng)中這幾個包已經(jīng)安裝妥當:

#dnf -y groupinstall 'Development Tools'
#dnf -y install python3 python3-devel 

YCM在編譯核心的時候寇损,會自動下載相關的第三方模塊,有時候由于網(wǎng)絡關系會無法訪問裳食。這時候你需要一個性能良好的梯子矛市,或者想想別的代理方案,比如說有時候下載Go的補全模塊gopls的時候會出現(xiàn)網(wǎng)絡問題诲祸,可以通過以下方法解決:

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

輸入以上指令后浊吏,再重新執(zhí)行編譯指令而昨,問題解決。


YCM使用方法:

Go語言

先創(chuàng)建一個最簡單的工程:

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
rm -rf go.mod
go mod init runscript

創(chuàng)建文件:
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觸發(fā)代碼補全了歌憨,如圖:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5gXDzZLS-1621199800410)(C:\Users\rocka\AppData\Roaming\Typora\typora-user-images\image-20210513002058860.png)]

前面正兒八經(jīng)創(chuàng)建了一個hello world工程,是因為gopls的緣故墩衙,隨便創(chuàng)建一個.go文件貌似gopls不能觸發(fā)务嫡,這個我也沒有深究,因為正常用go寫代碼肯定也要初始化一個工程的漆改,此處只為測試心铃。


YCM命令:

YCM有非常多的命令,具體就不一一介紹了籽懦,可以到官方文檔具體查詢:

https://github.com/ycm-core/YouCompleteMe/blob/master/doc/youcompleteme.txt

比如將光標移動到某個變量上于个,然后輸入Vim指令:

:YcmCompleter GoToDefinition

就可以跳轉到這個標量的定義上去氛魁,當然實際使用的時候需要映射一些熱鍵才方便暮顺。


行文至此,本文的基本目標已經(jīng)達成秀存,即在純命令行狀態(tài)下打造一個 “基本能用” 的編輯器捶码。至于更多的關于Vim的設置,本文不打算深入討論或链,這方面網(wǎng)上的資料也很多惫恼,可以自行研究。

下面附上我的 .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'      "狀態(tài)欄增強
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

"常規(guī)設置:
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 
    

    存盤退出,執(zhí)行:source~/.bashrc 問題解決爽撒。


2021-05-17 更新: Windows下使用GVim方案

話說Windows作為一個GUI操作系統(tǒng)入蛆,已經(jīng)有VSCode,SubLime硕勿,Atom或者更為強大的IDE像是JetBrains或者Visual Studio之類了哨毁,而且即使對于那些習慣于Vim操作的用戶,這些編輯器無一例外都提供了VIM插件源武。因此在Windows環(huán)境下搭建一個獨立的Vim環(huán)境感覺有點多余挑庶,但鑒于記錄的目的還是把過程放在這吧言秸。


第一步:環(huán)境布置

安裝最新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/

除了環(huán)境變量那一塊要注意寫入Windows之外露戒,其他全部按默認椒功。

裝完之后在cmd輸入一行:

clang-format -version


安裝Go

https://golang.org/

全部默認,裝完后在cmd輸入:

go version

如返回版本號說明安裝完畢智什。


安裝Visual Studio 2019

https://visualstudio.microsoft.com/zh-hans/downloads/ (下載一個免費的社區(qū)版)

重頭戲來了动漾,這可是個大家伙!沒辦法荠锭,因為YCM需要VS2019來編譯旱眯,只能把這把牛刀搬出來殺雞。

安裝倒是很簡單证九,對于我們此刻需要用到的功能而言删豺,把 【使用C++的桌面開發(fā)】這個選項勾上即可,其他都不需要愧怜。

全部默認呀页,裝完之后為系統(tǒng)加一條PATH:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin

然后開一個cmd,輸入:

cmake -help

有輸出即可叫搁。

我曾經(jīng)通過原版的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下雹洗,現(xiàn)在請暫且按照這個路徑去做香罐,因為后面還有很多配置跟這個路徑有關系。此后我還會講講如何綠化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的一部分,如果發(fā)現(xiàn)找不到這個命令寸宏,請仔細檢查前面的步驟是否完成宁炫,同時檢查有沒有為MinGW設置PATH變量。Python方面請按實際版本自行修改氮凝,此處是Python39羔巢。

GUI開關的含義是:

1:GUI=yes gvim.exe (帶圖形化界面的gvim)
2:GUI=no vim.exe (不帶圖形化界面的傳統(tǒng)命令行vim)


  1. 編譯成功后,會生成一個 gvim.exe 文件罩阵,將它復制粘貼到 c:\vim\runtime

  2. 將 c:\vim 下除了runtime之外的目錄和文件全部刪除(或者剪切到其他地方備份)竿秆,現(xiàn)在,整個c:\vim下只剩下光溜溜的一個runtime文件夾了永脓。

  3. 再將runtime文件夾的所有內容剪切到c:\vim袍辞,最后刪除空文件夾runtime即可鞋仍。

  4. c:\vim里手工創(chuàng)建一個文件夾 support (這個步驟是為了接下來的綠化工作)

  5. 為Windows系統(tǒng)變量Path添加一行:c:\vim\support

  6. 新建一個Windows系統(tǒng)變量 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
    
    "常規(guī)設置:
    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落午,或者為它創(chuàng)建一個快捷方式放到桌面。


第三步:安裝vim-plug

輸入:

curl -fLo c:\vim\autoload\plug.vim --create-dirs  https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

如果輸入之后并沒有創(chuàng)建文件夾或者沒看到plug.vim文件肚豺,就再來一次溃斋,一般兩三次就可以了,這個不是大問題吸申,估計跟我的梯子有關梗劫。

裝好之后,編輯c:\vim下的.vimrc文件截碴,輸入:

call plug#begin("./vimfiles/plugged")

call plug#end()

存盤退出即可梳侨。

此處我們將插件的目錄定在:c:\vimfiles\plugged 而不是所謂 “Home” 目錄里,也是為了將來綠化方便日丹。


vim-plug 裝完之后走哺,就可以用它安裝插件了。其中 NERDTree 文件瀏覽器插件和 papercolor-theme 配色插件和在Linux下是完全一樣的哲虾。請往前翻丙躏,這里不再贅述择示,但在安裝代碼格式化和代碼補全這兩個插件時,卻跟在Linux下有點區(qū)別:

第四步:安裝代碼格式化工具

在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 安裝孝常。

安裝完畢后,因為此前我們已經(jīng)安裝了3個格式化工具:

  1. 安裝LLVM是為了獲得 clang-format
  2. 安裝Go是為了獲得 gofmt
  3. 安裝Node.js 是為了得到 js-beautify

如上述安裝無誤蚓哩,現(xiàn)在打開相應后綴的文件(.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', 這行,意思是優(yōu)先讓prettier來格式話vue文件英上,其他文件格式炭序,也可以依葫蘆畫瓢按這個方法去修改。


第五步:安裝代碼補全工具YouCompleteMe
  1. 編譯核心

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

    過程很漫長苍日,而且容易出錯缚够,大部分出問題的原因和VS2019有關怀偷,只要確定按照上述的方式裝好了VS2019且設置了系統(tǒng)PATH變量芝薇,這一步問題不大搓幌,反之將煩不勝煩!

  2. 在核心編譯過程中,YCM會自動安裝對應語言的補全工具侨歉,無需人工介入屋摇。

  3. 編譯完畢后,按照前文所述的方法建一個空白go工程來測試幽邓,具體請往前翻炮温,這里也不再贅述了。


第六步:綠化 GVim

天啊牵舵,為了一個小小的GVim柒啤,我們竟然安裝了整整8個大大小小的軟件來支撐它!特別是還包含了VS2019和LLVM這種可能平時根本用不上的巨作畸颅,假如換一臺電腦又需要勞師動眾再做一遍担巩,那簡直是一場災難。因此没炒,必須將我們辛苦打造的Vim環(huán)境保存好涛癌,可以放進U盤或者網(wǎng)盤上開箱即用才是終極目的。

  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. 創(chuàng)建一個啟動批處理坦冠,文件名隨意形耗,比如: 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. 大功告成,現(xiàn)在判呕,就可以隨意改變C:\Vim文件夾的名字了,也可以將它放到任何位置送滞,運行 run.bat 侠草!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市犁嗅,隨后出現(xiàn)的幾起案子边涕,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件功蜓,死亡現(xiàn)場離奇詭異园爷,居然都是意外死亡,警方通過查閱死者的電腦和手機式撼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門童社,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人著隆,你說我怎么就攤上這事扰楼。” “怎么了美浦?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵弦赖,是天一觀的道長。 經(jīng)常有香客問我浦辨,道長腾节,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任荤牍,我火速辦了婚禮案腺,結果婚禮上,老公的妹妹穿的比我還像新娘康吵。我一直安慰自己劈榨,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布晦嵌。 她就那樣靜靜地躺著同辣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惭载。 梳的紋絲不亂的頭發(fā)上旱函,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音描滔,去河邊找鬼棒妨。 笑死,一個胖子當著我的面吹牛含长,可吹牛的內容都是我干的券腔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼拘泞,長吁一口氣:“原來是場噩夢啊……” “哼纷纫!你這毒婦竟也來了?” 一聲冷哼從身側響起陪腌,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤辱魁,失蹤者是張志新(化名)和其女友劉穎烟瞧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體染簇,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡燕刻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剖笙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卵洗。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弥咪,靈堂內的尸體忽然破棺而出过蹂,到底是詐尸還是另有隱情,我是刑警寧澤聚至,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布酷勺,位于F島的核電站,受9級特大地震影響扳躬,放射性物質發(fā)生泄漏脆诉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一贷币、第九天 我趴在偏房一處隱蔽的房頂上張望击胜。 院中可真熱鬧,春花似錦役纹、人聲如沸偶摔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辰斋。三九已至,卻和暖如春瘸味,著一層夾襖步出監(jiān)牢的瞬間宫仗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工旁仿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藕夫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓丁逝,卻偏偏與公主長得像汁胆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霜幼,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容