千姿百態(tài),瞬息萬(wàn)變,Win11系統(tǒng)NeoVim打造全能/全棧編輯器(前端/Css/Js/Vue/Golang/Ruby/ChatGpt)

我曾經(jīng)多次向人推薦Vim,其熱情程度有些類(lèi)似現(xiàn)在賣(mài)保險(xiǎn)的,有的時(shí)候,人們會(huì)因?yàn)橐恍涀阏滟F的美好暗暗渴望一個(gè)巨大的負(fù)面,比如因?yàn)橄胫販厥謩?dòng)擋的快樂(lè)而渴望買(mǎi)下一輛二十萬(wàn)公里的老爺車(chē),比如因?yàn)樗^完美的音質(zhì)而舍不得一個(gè)老舊的有線耳機(jī),比如因?yàn)橐粋€(gè)銅爐火鍋而期待北京那漫長(zhǎng)而寒冷的冬天。

也許有的人會(huì)因?yàn)閂im而放棄169刀的JetBrains全家桶,沒(méi)錯(cuò),Vim的快樂(lè),就是手動(dòng)擋的快樂(lè),懂得自然懂,不懂的永遠(yuǎn)也不會(huì)懂,但如果沒(méi)有用Vim敲過(guò)代碼,那么絕對(duì)枉生于有Vim的世界。

之前一篇:上古神兵,先天至寶,Win11平臺(tái)安裝和配置NeoVim0.8.2編輯器搭建Python3開(kāi)發(fā)環(huán)境(2023最新攻略),我們已經(jīng)配置好了Python3開(kāi)發(fā)環(huán)境,本次繼續(xù)添磚加瓦,讓NeoVim進(jìn)化為全棧編輯器,全知全能,無(wú)所不通。

全能補(bǔ)全:coc.nvim

之前配置Python補(bǔ)全,我們使用過(guò)NCM2擴(kuò)展插件:

Plug 'ncm2/ncm2'  
Plug 'roxma/nvim-yarp'  
Plug 'ncm2/ncm2-bufword'  
Plug 'ncm2/ncm2-path'  
Plug 'ncm2/ncm2-jedi'

五個(gè)插件,僅僅為了Python的補(bǔ)全,而Coc.nvim 通過(guò) Microsoft 的 Language Server Protocol,支持許多編程語(yǔ)言,包括 JavaScript, Python, C++ ,Ruby等等。同時(shí)還可以通過(guò)設(shè)置和擴(kuò)展進(jìn)行靈活定制,滿足不同用戶的需求。

重新編寫(xiě)配置:

Plug 'neoclide/coc.nvim', {'branch': 'release'}

安裝插件:

:PlugInstall

安裝Python補(bǔ)全:

:CocInstall coc-pyls

就這么簡(jiǎn)單。

隨后,還可以對(duì)其他目標(biāo)語(yǔ)言進(jìn)行設(shè)置,比如想支持Golang的補(bǔ)全,通過(guò)命令:

:CocConfig

打開(kāi)配置文件,Win11默認(rèn)路徑是:~\AppData\Local\nvim\coc-settings.json

{  
    "languageserver": {  
        "golang": {  
            "command": "gopls",  
            "rootPatterns": [  
                "go.mod"  
            ],  
            "filetypes": [  
                "go"  
            ]  
        }  
    },  
    "suggest.noselect": false,  
    "coc.preferences.diagnostic.displayByAle": true,  
    "suggest.floatEnable": true  
}

添加Golang的配置,這里使用gopls模塊。

正確配置之后,就可以使用代碼補(bǔ)全了 例如我們輸入 fmt. 就會(huì)提示fmt包中的方法,默認(rèn)選擇第一個(gè),使用< C-n > < C-p > 上下選擇,回車(chē)確認(rèn),nvim下可以使用懸浮窗功能。

類(lèi)似的,如果想配置Ruby的智能提示,設(shè)置不需要配置文件,只需要安裝對(duì)應(yīng)模塊即可:

gem install solargraph

隨后NeoVim內(nèi)運(yùn)行命令:

:CocInstall coc-solargraph

但這也帶來(lái)了一個(gè)問(wèn)題,即編譯運(yùn)行的時(shí)候,默認(rèn)運(yùn)行的語(yǔ)言是Python,如何讓Vim程序自動(dòng)進(jìn)行判斷?只需要修改配置即可:

autocmd FileType python nnoremap <C-B> :sp <CR> :term python % <CR>  
autocmd FileType go nnoremap <C-B> :sp <CR> :term go run % <CR>  
nnoremap <C-W> :bd!<CR>

這里通過(guò)NeoVim中的autocmd進(jìn)行判斷,如果是Python代碼就通過(guò)python解釋器運(yùn)行,如果是golang代碼就通過(guò)Golang的編譯器進(jìn)行編譯,互不影響。

NeoVim 的 autocmd 是用來(lái)自動(dòng)執(zhí)行命令的一種機(jī)制。它可以在特定的事件發(fā)生時(shí)觸發(fā)命令的執(zhí)行,比如打開(kāi)文件、保存文件等。這樣可以自動(dòng)地對(duì)文件進(jìn)行格式化、添加頭部信息等操作。

前端的補(bǔ)全更簡(jiǎn)單,一鍵式命令安裝即可:

:CocInstall coc-vetur coc-json coc-html coc-css

但前端頁(yè)面默認(rèn)是沒(méi)有閉合高亮的,所以推薦下面這個(gè)插件:

Plug 'leafOfTree/vim-matchtag'

它可以針對(duì)前端頁(yè)面標(biāo)簽的閉合進(jìn)行動(dòng)態(tài)高亮:

image

非常方便。

快捷操作與配置

也許有人會(huì)因?yàn)橹T如保存、注釋以及記錄等操作還需要輸入vim命令而苦惱,但其實(shí)這并不是什么問(wèn)題,Vim也可以自動(dòng)保存:

Plug 'Pocco81/auto-save.nvim'

這樣就可以免去:w的操作。

單行以及多行的批量注釋可以依賴這個(gè)插件:

Plug 'tpope/vim-commentary'

這樣就可以通過(guò)組合鍵gc快速進(jìn)行注釋操作了。

編輯操作記錄可以依賴這個(gè)插件:

Plug 'mhinz/vim-startify'

如此可以在首頁(yè)動(dòng)態(tài)的選擇曾經(jīng)編輯過(guò)的文件:

image

想要傳統(tǒng)IDE那樣的動(dòng)態(tài)調(diào)節(jié)字體大小?

let s:fontsize = 12  
function! AdjustFontSize(amount)  
  let s:fontsize = s:fontsize+a:amount  
  :execute "GuiFont! Consolas:h" . s:fontsize  
endfunction  
  
inoremap <expr> <TAB> pumvisible() ? "\<C-y>" : "\<CR>"  
inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"  
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<Down>"  
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<Up>"

通過(guò)tab鍵選擇自動(dòng)補(bǔ)全的代碼提示?

" In insert mode, pressing ctrl + numpad's+ increases the font  
inoremap <C-kPlus> <Esc>:call AdjustFontSize(1)<CR>a  
inoremap <C-kMinus> <Esc>:call AdjustFontSize(-1)<CR>a

在Vim中,你甚至可以和ChatGpt一親芳澤:

use({  
  'terror/chatgpt.nvim',  
  run = 'pip3 install -r requirements.txt'  
})

當(dāng)然,在用戶目錄下需要chatgpt的apikey或者token: ~/.chatgpt-nvim.json:

{  
  "authorization": "<API-KEY>",      # Optional API key  
  "session_token": "<SESSION-TOKEN>" # Your ChatGPT session token  
}

由于api-key是收費(fèi)的,這里建議使用token:

訪問(wèn) https://chat.openai.com/chat 并且登錄
按F12打開(kāi)開(kāi)發(fā)者工具
在應(yīng)用的標(biāo)簽上 > 選擇Cookies
直接復(fù)制__Secure-next-auth.session-token的value值寫(xiě)到上面的session_token中即可。

效果如下:

image

最后,完整的全棧NeoVim配置:

call plug#begin('C:\nvim-win64\nvim-win64\share\nvim\plugged')  
  
  
Plug 'navarasu/onedark.nvim'  
  
Plug 'pablopunk/native-sidebar.vim'  
  
  
Plug 'Pocco81/auto-save.nvim'  
  
Plug 'leafOfTree/vim-matchtag'  
  
Plug 'mhinz/vim-startify'  
  
Plug 'neoclide/coc.nvim', {'branch': 'release'}  
  
Plug 'tpope/vim-commentary'  
  
  
call plug#end()  
  
let g:onedark_config = {  
    \ 'style': 'warm',  
\}  
colorscheme onedark  
  
  
let g:native_sidebar_shortcut = '<c-t>'  
  
set clipboard^=unnamed,unnamedplus  
  
syntax on                       "syntax highlighting, see :help syntax  
filetype plugin indent on       "file type detection, see :help filetype  
set number                      "display line number  
set path+=**                    "improves searching, see :help path  
set noswapfile                  "disable use of swap files  
set wildmenu                    "completion menu  
set backspace=indent,eol,start  "ensure proper backspace functionality  
set undodir=~/.cache/nvim/undo  "undo ability will persist after exiting file  
set undofile                    "see :help undodir and :help undofile  
set incsearch                   "see results while search is being typed, see :help incsearch  
set smartindent                 "auto indent on new lines, see :help smartindent  
set ic                          "ignore case when searching  
  
set expandtab                   "expanding tab to spaces  
set tabstop=4                   "setting tab to 4 columns  
set shiftwidth=4                "setting tab to 4 columns  
set softtabstop=4               "setting tab to 4 columns  
set showmatch                   "display matching bracket or parenthesis  
set hlsearch incsearch          "highlight all pervious search pattern with incsearch  
  
highlight ColorColumn ctermbg=9 "display ugly bright red bar at color column number  
  
" Keybind Ctrl+l to clear search  
nnoremap <C-l> :nohl<CR><C-l>:echo "Search Cleared"<CR>  
  
" When python filetype is detected, F5 can be used to execute script   
" autocmd FileType python nnoremap <buffer> <c-b> :<cr>:exec '!python' shellescape(expand('%:p'), 1)<cr>  
  
autocmd FileType python nnoremap <C-B> :sp <CR> :term python % <CR>  
autocmd FileType go nnoremap <C-B> :sp <CR> :term go run % <CR>  
nnoremap <C-W> :bd!<CR>  
  
  
let s:fontsize = 12  
function! AdjustFontSize(amount)  
  let s:fontsize = s:fontsize+a:amount  
  :execute "GuiFont! Consolas:h" . s:fontsize  
endfunction  
  
inoremap <expr> <TAB> pumvisible() ? "\<C-y>" : "\<CR>"  
inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"  
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<Down>"  
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<Up>"  
  
" In insert mode, pressing ctrl + numpad's+ increases the font  
inoremap <C-kPlus> <Esc>:call AdjustFontSize(1)<CR>a  
inoremap <C-kMinus> <Esc>:call AdjustFontSize(-1)<CR>a

只需要不到70行的配置,我們就擁有了一個(gè)萬(wàn)能的Vim編輯器。

結(jié)語(yǔ)

滿打滿算,七個(gè)插件,全知全能,而我們需要做的,只是一行簡(jiǎn)單的:PlugInstall。因?yàn)槭裁矗恳驗(yàn)闊釔?ài),如果是真愛(ài),哪怕風(fēng)情萬(wàn)千遇到不解風(fēng)情,也所甘愿,哪怕沒(méi)人懂,也要周周至至做出來(lái)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容