我从前屡次向人推荐Vim,其热情程度有些类似现在卖保险的,有的时分,人们会由于一些弥足珍贵的夸姣暗暗巴望一个巨大的负面,比方由于想重温手动挡的高兴而巴望买下一辆二十万公里的老爷车,比方由于所谓完美的音质而舍不得一个老旧的有线耳机,比方由于一个铜炉火锅而期待北京那绵长而寒冷的冬天。

或许有的人会由于Vim而抛弃169刀的JetBrains全家桶,没错,Vim的高兴,便是手动挡的高兴,懂得天然懂,不明白的永远也不会懂,但假如没有用Vim敲过代码,那么绝对枉生于有Vim的国际。

之前一篇:上古神兵,先天至宝,Win11平台装置和装备NeoVim0.8.2编辑器搭建Python3开发环境(2023最新攻略),咱们现已装备好了Python3开发环境,本次持续添砖加瓦,让NeoVim进化为全栈编辑器,全知全能,无所不晓。

全能补全:coc.nvim

之前装备Python补全,咱们运用过NCM2扩展插件:

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

五个插件,仅仅为了Python的补全,而Coc.nvim 经过 Microsoft 的 Language Server Protocol,支撑许多编程语言,包括 JavaScript, Python, C++ ,Ruby等等。一起还能够经过设置和扩展进行灵活定制,满意不同用户的需求。

从头编写装备:

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

装置插件:

:PlugInstall

装置Python补全:

:CocInstall coc-pyls

就这么简略。

随后,还能够对其他目标语言进行设置,比方想支撑Golang的补全,经过指令:

:CocConfig

翻开装备文件,Win11默许路径是:~\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模块。

正确装备之后,就能够运用代码补全了 例如咱们输入 fmt. 就会提示fmt包中的办法,默许挑选第一个,运用< C-n > < C-p > 上下挑选,回车承认,nvim下能够运用悬浮窗功用。

类似的,假如想装备Ruby的智能提示,设置不需要装备文件,只需要装置对应模块即可:

gem install solargraph

随后NeoVim内运转指令:

:CocInstall coc-solargraph

但这也带来了一个问题,即编译运转的时分,默许运转的语言是Python,如何让Vim程序主动进行判别?只需要修改装备即可:

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>

这里经过NeoVim中的autocmd进行判别,假如是Python代码就经过python解释器运转,假如是golang代码就经过Golang的编译器进行编译,互不影响。

NeoVim 的 autocmd 是用来主动履行指令的一种机制。它能够在特定的事情产生时触发指令的履行,比方翻开文件、保存文件等。这样能够主动地对文件进行格式化、增加头部信息等操作。

前端的补全更简略,一键式指令装置即可:

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

但前端页面默许是没有闭合高亮的,所以推荐下面这个插件:

Plug 'leafOfTree/vim-matchtag'

它能够针对前端页面标签的闭合进行动态高亮:

千姿百态,瞬息万变,Win11系统NeoVim打造全能/全栈编辑器(前端/Css/Js/Vue/Golang/Ruby/ChatGpt)

十分便利。

快捷操作与装备

或许有人会由于比如保存、注释以及记录等操作还需要输入vim指令而苦恼,但其实这并不是什么问题,Vim也能够主动保存:

Plug 'Pocco81/auto-save.nvim'

这样就能够免除:w的操作。

单行以及多行的批量注释能够依赖这个插件:

Plug 'tpope/vim-commentary'

这样就能够经过组合键gc快速进行注释操作了。

编辑操作记录能够依赖这个插件:

Plug 'mhinz/vim-startify'

如此能够在首页动态的挑选从前编辑过的文件:

千姿百态,瞬息万变,Win11系统NeoVim打造全能/全栈编辑器(前端/Css/Js/Vue/Golang/Ruby/ChatGpt)

想要传统IDE那样的动态调理字体大小?

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>"

经过tab键挑选主动补全的代码提示?

" 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'  
})

当然,在用户目录下需要chatgpt的apikey或许token: ~/.chatgpt-nvim.json:

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

由于api-key是收费的,这里主张运用token:

拜访 chat.openai.com/chat 而且登录
按F12翻开开发者东西
在应用的标签上 > 挑选Cookies
直接复制__Secure-next-auth.session-token的value值写到上面的session_token中即可。

作用如下:

千姿百态,瞬息万变,Win11系统NeoVim打造全能/全栈编辑器(前端/Css/Js/Vue/Golang/Ruby/ChatGpt)

最终,完好的全栈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行的装备,咱们就拥有了一个万能的Vim编辑器。

结语

满打满算,七个插件,全知全能,而咱们需要做的,仅仅一行简略的:PlugInstall。由于什么?由于热爱,假如是真爱,哪怕风情万千遇到不解风情,也所甘愿,哪怕没人懂,也要周周至至做出来。