本文最后更新于2022年4月22日,已超过 60 天没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

安装neovim


neovim时基于 Vim 的超可扩展文本编辑器,使用起来感觉更友好一点

官方github 下载到最新版本 ,nvim-linux64.tar.gz这个安装包,然后解压 ,并切换到解压后的目录

wget https://github.com/neovim/neovim/releases/download/v0.6.1/nvim-linux64.tar.gz #下载
tar -zxf nvim-linux64.tar.gz # 解压
cd nvim-linux64 # 切换到解压后的目录

或者使用集成指令(下面默认使用集成的)

wget https://github.com/neovim/neovim/releases/download/v0.6.1/nvim-linux64.tar.gz && tar -zxf nvim-linux64.tar.gz && rm -f nvim-linux64.tar.gz && cd nvim-linux64

【注】:使用yum neovim下载到的版本比较老,只有3.x
下面的软件都是编译安装的,所以需要有支持编译的环境,如果没有g++,make和libtool的话需要安装一下

yum -y install make  gcc-c++ libtool

得到的目录结构为

[root@VM-8-2-centos nvim-linux64]# tree . -C -L 2
.
├── bin
│   └── nvim
├── lib
│   └── nvim
└── share
    ├── applications
    ├── icons
    ├── locale
    ├── man
    └── nvim

9 directories, 1 file

【注】:这里我保存下载文件的路径为 /home/hedu/neovim-temp/nvim-linux64

设置软链接

ln -s /home/hedu/neovim-temp/nvim-linux64/bin/nvim  /usr/bin/nvim

然后就可以像使用vim一样使用nvim了

安装nodejs,python3 , proxychains 和 git

因为后续安装的一些代码补全插件需要这nodejs和python3的支持,所以先提前安装,git和proxychains(科学上网)用来辅助下载

关于这些工具的安装可以参考我的另一篇文章《编译安装GCC,Nginx,Nodejs,Python3,Proxychains,Git,Screen》

安装nvim的插件

vim最强的地方就算插件,通过定制插件,变成地表最强编辑器也不是传说。

创建用户配置文件

mkdir -p ~/.config/nvim

然后在~/.config/nvim中创建

  • init.vim文件 (是nvim的主配置文件)
  • pulgged文件夹 (在配置文件中设置插件下载保存的位置)
  • autoload文件夹 (放plug.vim)

[注] : 要使插件被安装到pulgged文件夹,需要在后续的plug#begin() 函数中传入'~/.config/nvim/pulgged'参数,如果不填参数插件会被默认安装到~/.local/share/nvim/plugged/coc.nvim/plugin/

使用指令,下载vim-plug(插件管理工具)

sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

[注] : 如果执行失败就添加proxychains4 前缀使用代理下载或者手动操作:

  • 在这个网址https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 下载plug.vim文件
  • 创建~/.local/share/nvim/site/autoload目录结构,然后把plug.vim放到最深的autoload目录下

编辑 ~/.config/nvim/init.vim文件,在加入2行代码。

call plug#begin('~/.config/nvim/pulgged')

call plug#end()

在这2行包围的区域可以添加想要下载的插件,想要什么插件可以在插件中心查看

使用这种方式安装插件是需要科学上网的,需要使用上面安装好的proxychains

1.基础配置(稍作调整)

使用指令

nvim ~/.config/nvim/init.vim

编辑init.vim,此时界面长这样

image-20220309154121567

我们可以配置

set number      "显示行号"
set ruler       "在状态栏显示光标当前位置,哪一行哪一列"
set cursorline  "突出当前行"
set showmode    "显示现在的模式(insert,normal,visual)"
set relativenumber "显示相对行距"
set mouse=a     "设置鼠标是否可用(a为可用c为不可用)"
set nofoldenable "不许文件自动折叠"
set tabstop=4   "按下 tab 键时的空格数"
set shiftwidth=4 "自动缩进的空格数"
set encoding=utf-8 "使用utf-8编码"
set linebreak   "换行显示时不把一个单词拆开"
set hlsearch    "高亮显示搜索的匹配结果,输入结束时才显示"
"set incsearch"  "高亮显示搜索的匹配过程,每输入一个字符,就自动跳到第一个匹配的结果"
set showmatch   "遇到括号(小括号、中括号、大括号)时,自动高亮匹配的括号"
set autoindent  "自动缩进,按下回车键后,下一行会自动跟上一行的缩进保持一致"
set smartindent "智能缩进"
set copyindent  "复制粘贴时保留原有的缩进"
set visualbell  "发生错误时,视觉提示,通常是屏幕闪烁"

配置完成后需要保存并重新打开文件,或者在命令模式使用指令source %来更新配置

image-20220309170038312

我们还可以修改快捷键,增强使用体验

imap jk <Esc>     "jk键映射为Esc"
nmap <C-k> :m-2<CR> "ctrl+k将光标所在行上移"
nmap <C-j> :m+1<CR> "ctrl+j将光标所在行移"

1.安装airline插件

plug#begin() plug#end()之间插入代码

call plug#begin('~/.config/nvim/pulgged')
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()

在其他位置写入下面代码 ,来设置airline的属性

" @airline
set t_Co=256      "在windows中用xshell连接打开vim可以显示色彩
let g:airline#extensions#tabline#enabled = 1   " 是否打开tabline
"这个是安装字体后 必须设置此项"
let g:airline_powerline_fonts = 1
set laststatus=2  "永远显示状态栏
let g:airline_theme='bubblegum' "选择主题
let g:airline#extensions#tabline#enabled=1    "Smarter tab line: 显示窗口tab和buffer
"let g:airline#extensions#tabline#left_sep = ' '  "separater
"let g:airline#extensions#tabline#left_alt_sep = '|'  "separater
"let g:airline#extensions#tabline#formatter = 'default'  "formater
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'

接下来:

  • 使用在normal模式下使用指令:wq保存并退出
  • 使用指令proxychains4 nvim ~/.config/nvim/init.vim使用全局代理重新打开
  • 使用在normal模式下使用指令:PlugInstall来安装插件
  • 安装结束后使用指令:q可回到init.vim的文件界面

GIF-2022-3-9-17-17-14-sr

效果如图:

image-20220309175805064

还可以添加配置文件来为这个状态栏增加更多功能

我们创建一个airline.rc.vim文件来作为配置

nvim ~/.config/nvim/autoload/airline.rc.vim

在其中写入

" vim-airline
let g:airline#extensions#tabline#enabled = 1
" 使用字体
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#buffer_idx_mode = 1
nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

最后在init.vim中添加这句

"加载状态栏设置“
source ~/.config/nvim/autoload/airline.rc.vim

完工后,我们的状态栏就可以通过 \+1(数字键) 随意切换了

gifchangetag

2.安装代码补全插件

Coc.nvim 是一个基于NodeJS 的适用于Vim8, Neovim 的Vim 智能补全插件。拥有完整的LSP 支持。配置、使用方式及插件系统的整体风格类似 VSCode.

安装coc

plug#begin() plug#end()之间插入代码

call plug#begin('~/.config/nvim/pulgged')
Plug 'neoclide/coc.nvim'
call plug#end()

然后输入命令:PlugInstall (安装方法同上面的插件) 自动安装

[注意] : 安装插件时需要使用 proxychains4 打开代理,否则会被墙的

此时重新打开init.vim文件会提示一个报错(build/index.js not found, please install dependencies and compile coc.nvim by: yarn install) , 此时需要按照提示执行下面操作。

npm install -g yarn #安装yarn
cd ~/.config/nvim/pulgged/coc.nvim  #切换到coc.vim所在的目录

然后使用指令,来编译coc.vim

yarn install 
yarn build

再次打开init.vim文件就不会有报错了

在Coc中下载插件

因为Coc 本身并不提供具体语言的补全功能,更多的只是提供了一个补全功能的平台,
所以在安装完成后,我们需要安装具体的语言服务以支持对应的补全功能。
打开nvim 并使用以下命令即可自动安装子插件及相关依赖。

:CocInstall coc-json coc-tsserver

其中coc-json coc-tsserver 这些是对应的支持JSON, Typescript 的相关子插件。
要检索都有哪些子插件可以直接在Npm 上查找coc.nvim,
亦或者使用coc-marketplace 直接在Vim 里面进行管理,安装命令如下:

:CocInstall coc-marketplace

安装完后用下面命令可以打开面板,Tab 可对高亮的子插件进行安装卸载等操作。

# 打开面板
:CocList marketplace

# 搜索python 相关子插件
:CocList marketplace python

image-20220309185930139

按方向键可以上下选择,tab键选择对应的操作(安装,卸载 ... ),这里的插件和vscode中的有很多重复:

3.安装更多的插件

可以参考我的配置(我玩这个也才几个月,不要有什么期待 (〜 ̄△ ̄)〜

imap jk <Esc>
nnoremap <C-a> :NERDTree<CR>
nnoremap <C-t> :NERDTreeToggle<CR>
nnoremap <C-f> :NERDTreeFind<CR>
nmap <C-k> :m-2<CR>
nmap <C-j> :m+1<CR>
call plug#begin('~/.config/nvim/pulgged')
Plug 'scrooloose/nerdtree'

Plug 'neoclide/coc.nvim', {'tag': '*', 'do': { -> coc#util#install()}}
Plug 'Raimondi/delimitMate'
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'Valloric/YouCompleteMe'
Plug 'sheerun/vim-polyglot'
Plug 'w0rp/ale'

Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

Plug 'scrooloose/nerdcommenter'
Plug 'junegunn/fzf'
Plug 'airblade/vim-gitgutter'

Plug 'ZSaberLv0/ZFVimIM' "中文输入法"
Plug 'ZSaberLv0/ZFVimJob'
Plug 'ZSaberLv0/ZFVimIM_openapi' " 百度云输入法"
Plug 'sainnhe/gruvbox-material' "主题"
Plug 'rinx/lspsaga.nvim' "UI美化"
call plug#end()
set number
set ruler
set cindent
set tabstop=2
set shiftwidth=2
set cursorline
set showmode
set nofoldenable
set relativenumber
set mouse=a

" @airline"
set t_Co=256      "在windows中用xshell连接打开vim可以显示色彩"
let g:airline#extensions#tabline#enabled = 1   " 是否打开tabline"
"这个是安装字体后 必须设置此项"
let g:airline_powerline_fonts = 1
set laststatus=2  "永远显示状态栏"
let g:airline_theme='bubblegum' "选择主题"
let g:airline#extensions#tabline#enabled=1    "Smarter tab line: 显示窗口tab和buffer"
"let g:airline#extensions#tabline#left_sep = ' '  separater"
"let g:airline#extensions#tabline#left_alt_sep = '|'  separater"
"let g:airline#extensions#tabline#formatter = 'default'  formater"
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
"加载中文输入法库"
function! s:myLocalDb()
    let db = ZFVimIM_dbInit({
                \   'name' : 'pinyin-zh',
                \ })
    call ZFVimIM_cloudRegister({
                \   'mode' : 'local',
                \   'dbId' : db['dbId'],
                \   'repoPath' : '/usr/lib/ZFVimIM_pinyin',
                \   'dbFile' : '/misc/pinyin.txt',
                \   'dbCountFile' : '/misc/pinyin_count.txt',
                \ })
endfunction
autocmd User ZFVimIM_event_OnDbInit call s:myLocalDb()

"加载状态栏设置"
source ~/.config/nvim/autoload/airline.rc.vim

" Use <Tab> and <S-Tab> to navigate the completion list"
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
" Use <Ctrl-F> to format documents with prettier"
command! -nargs=0 Prettier :CocCommand prettier.formatFile
noremap <C-d> :Prettier<CR>

" ale-setting {{{"
let g:ale_set_highlights = 0
"自定义error和warning图标"
let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚡'
"在vim自带的状态栏中整合ale"
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
"显示Linter名称,出错或警告等相关信息"
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
"打开文件时不进行检查"
let g:ale_lint_on_enter = 0

"普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告"
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>s触发/关闭语法检查"
nmap <Leader>s :ALEToggle<CR>
"<Leader>d查看错误或警告的详细信息"
nmap <Leader>d :ALEDetail<CR>
"使用clang对c和c++进行语法检查,对python使用pylint进行语法检查"
let g:ale_linters = {
\   'c++': ['clang'],
\   'c': ['clang'],
\   'python': ['pylint'],
\}
" }}}"

有帮助的话请打个赏吧!