安装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,此时界面长这样
我们可以配置
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 %
来更新配置
我们还可以修改快捷键,增强使用体验
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
的文件界面
效果如图:
还可以添加配置文件来为这个状态栏增加更多功能
我们创建一个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
(数字键) 随意切换了
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
按方向键可以上下选择,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'],
\}
" }}}"
Comments | NOTHING