概述
筆者作為一個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支持要單獨說一下:
有兩個Python的選項抓狭,--enable-python3interp 和 --enable-pythoninterp 伯病,分別表示Vim是否支持Python3或者Python2。特別要注意否过,Python2和Python3是不能共存的午笛,只能2選1,在例子中我們選擇的是Python3叠纹。
--with-python3-config-dir 這個選項是必須的季研,沒有它Vim即使安裝成功了也無法支持Python,這個目錄一般在/usr/lib64/python3.6(64位系統(tǒng))里面 誉察,特征是目錄里有一個名為 config.c 的文件与涡。如果安裝的是python2的話,這個目錄應該是:/usr/lib64/python2.7 持偏。
這一步有可能出現(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+PageUp 和 CTRL+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 】
使用方法:
vim ~/.vimrc 打開vim的設置文件
-
添加以下內容:
set background=dark colorscheme PaperColor
存盤退出仅偎,重啟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
全部默認下一步,裝完之后在cmd輸入一行:
node -v
如果能正確返回版本號蹋订,說明node.js安裝成功!
然后再輸入一行:npm install -g js-beautify
裝完之后用:js-beautify -v
測試一下率挣。
然后再輸入一行:npm install -g js-beautify prettier
裝完之后用:prettier
-v` 測試一下。
安裝LLVM
除了環(huán)境變量那一塊要注意寫入Windows之外露戒,其他全部按默認椒功。
裝完之后在cmd輸入一行:
clang-format -version
安裝Go
全部默認,裝完后在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
全默認疾党,裝好了打開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)
編譯成功后,會生成一個 gvim.exe 文件罩阵,將它復制粘貼到 c:\vim\runtime
將 c:\vim 下除了runtime之外的目錄和文件全部刪除(或者剪切到其他地方備份)竿秆,現(xiàn)在,整個c:\vim下只剩下光溜溜的一個runtime文件夾了永脓。
再將runtime文件夾的所有內容剪切到c:\vim袍辞,最后刪除空文件夾runtime即可鞋仍。
在c:\vim里手工創(chuàng)建一個文件夾 support (這個步驟是為了接下來的綠化工作)
為Windows系統(tǒng)變量Path添加一行:
c:\vim\support
新建一個Windows系統(tǒng)變量 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 "常規(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個格式化工具:
- 安裝LLVM是為了獲得 clang-format
- 安裝Go是為了獲得 gofmt
- 安裝Node.js 是為了得到 js-beautify
如上述安裝無誤蚓哩,現(xiàn)在打開相應后綴的文件(.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',
這行,意思是優(yōu)先讓prettier來格式話vue文件英上,其他文件格式炭序,也可以依葫蘆畫瓢按這個方法去修改。
第五步:安裝代碼補全工具YouCompleteMe
-
編譯核心
cd C:\vim\vimfiles\plugged\YouCompleteMe python install.py --all
過程很漫長苍日,而且容易出錯缚够,大部分出問題的原因和VS2019有關怀偷,只要確定按照上述的方式裝好了VS2019且設置了系統(tǒng)PATH變量芝薇,這一步問題不大搓幌,反之將煩不勝煩!
在核心編譯過程中,YCM會自動安裝對應語言的補全工具侨歉,無需人工介入屋摇。
編譯完畢后,按照前文所述的方法建一個空白go工程來測試幽邓,具體請往前翻炮温,這里也不再贅述了。
第六步:綠化 GVim
天啊牵舵,為了一個小小的GVim柒啤,我們竟然安裝了整整8個大大小小的軟件來支撐它!特別是還包含了VS2019和LLVM這種可能平時根本用不上的巨作畸颅,假如換一臺電腦又需要勞師動眾再做一遍担巩,那簡直是一場災難。因此没炒,必須將我們辛苦打造的Vim環(huán)境保存好涛癌,可以放進U盤或者網(wǎng)盤上開箱即用才是終極目的。
-
綠化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 %*
-
創(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
運行run.bat , 能正常進入gvim 且各種插件工作正常哥桥,說明綠化工作基本完成辙浑。
大功告成,現(xiàn)在判呕,就可以隨意改變C:\Vim文件夾的名字了,也可以將它放到任何位置送滞,運行 run.bat 侠草!