nvim介绍
简单说,nvim ( neovim ) 是一个开源的vim重构项目。
与vim相比,nvim具有更现代化的代码库和架构,更好的可扩展性和更好的性能。
同时,nvim支持几乎所有的vim插件,同时nvim深度集成了lua,如果你熟悉这种脚本语言,它将会大大提升你的配置效率。(本文我们主要讲更加通用的做法,即使用vim script的做法)
安装nvim
在linux平台,你可以在各个发行版的包管理工具中下载nvim,例如在debian系发行版中,可以使用
sudo apt install neovim
安装后 ,可以通过在命令行输入
nvim -v
检查安装,如果正确安装,应该显示安装的nvim的版本号。如下:
NVIM v0.7.2
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by team+vim@tracker.debian.org
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/share/nvim"
Run :checkhealth for more info
显示出类似的内容,说明安装成功。
基础使用
如果你有vim基础,建议跳过这一部分。
在基础的使用方式上,nvim与vim基本一致,在这里我们简单讲讲。
vim ( nvim ) 共有四种模式,即Normal模式、Command模式、Insert模式、Visible模式:
- Normal模式
这是你进入 nvim 时的默认模式,也是所有模式切换的中转站。
在这里,你可以按a
或i
进入Insert模式,或者按v进入Visable模式。
在Normal模式下,你不能输入,但可以使用快捷键对文档进行查找、替换、滚动等操作:
移动光标:类似fps游戏中的wasd,vim使用h(左)、j(下)、k(上)、l(右) 移动光标,
滚动屏幕:Ctrl + E 向上滚动,Ctrl + Y 向下滚动
-
Command模式
在Normal模式下按:
可以进入Command模式。
在Command模式下,你可以输入命令。
如常用的:
w
:
q
:
/
字符:
数字:
%s
: -
Insert模式
-
即输入模式,这个模式下和其他编辑器差异不大。
-
visible模式
-
相当于其他编辑其中的选中,你可以对选中的文本进行移动、复制等操作。
基础配置
nvim使用~/.config/nvim/init.vim对当前用户进行配置。
我强烈建议你逐条添加到 init.vim 中并在添加过程中运行观察效果,这对你理解配置文件很有帮助。完整的 init.vim 我会放在文末。
首先是一些基础的配置
set nu "显示行号
set tabstop=4
set shiftwidth=4
set expandtab
set tabstop
"set nobackup
"set cursorline
syntax enable
set laststatus=2
set backspace=2
这些配置未必适合你,你可以根据你的需要去除某些配置,只需在行首添加 "
将其变为注释即可。同样的,如果你有自己的配置需求,也可以直接添加在这里。
接下来是键盘映射。我的配置可以供你参考。
imap jk <esc>
imap Jk <esc>
imap jK <esc>
imap JK <esc>
map <space> viw
" -键 作为删除一行
map - dd
" insert 模式下删除一行
inoremap <c-d> <esc>ddi
" ctrl+u 插入模式转换当前单词为大写
"inoremap <c-u> <esc>viwUi
"leader 默认为\
nnoremap <leader>d dd
"重读我的vimrc文件
nnoremap <leader>sv :source $MYVIMRC<cr>
"打开我的vimrc配置文件
nnoremap <leader>ev :vsp $MYVIMRC<cr>
"普通模式下,双引号包括当前单词
nnoremap <leader>" viw<esc>a"<esc>hbi"<esc>lel
" abbreviations 缩略语 可以用于自动修改
iabbrev adn and
插件
nvim的另一大魅力在于其庞大的插件社区。
这里我们使用vim-plug
作为插件管理器。
项目地址:https://github.com/junegunn/vim-plug
首先安装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'
然后我们来配置init.vim
为了调用vim-plug
,我们要在init.vim中添加
call plug#begin('~/.vim/plugged')
call plug#end()
并在中间添加你要使用的插件。
添加后,打开nvim
,输入命令:PluginInstall
,安装插件,vim-plug
会自动读取init.vim
中的插件列表。
安装完成后,重新进入nvim
就可以使用了。
附完整版init.vim
供参考:
" _ _ __ _
" (_)___ (_) /__ __(_)___ ___
" / / __ \/ / __/ | / / / __ `__ \
" / / / / / / /__| |/ / / / / / / /
" /_/_/ /_/_/\__(_)___/_/_/ /_/ /_/
"
" echom "Never Give Up Your Dream!!! >^.^<"
let g:python3_host_prog = '/usr/bin/python3.12' " 替换为全局 Python 解释器的路径
set nu "显示行号
set tabstop=4
set shiftwidth=4
set expandtab
set tabstop
"set nobackup
" set cursorline
"set ruler
"set autoindent
"set hlsearch
syntax enable
"set nocompatible
"set autochdir
"set guifont=Consolas:h17
set laststatus=2
set backspace=2
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" -START- key mapping
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
imap jk <esc>
imap Jk <esc>
imap jK <esc>
imap JK <esc>
map <space> viw
" -键 作为删除一行
map - dd
" insert 模式下删除一行
inoremap <c-d> <esc>ddi
" ctrl+u 插入模式转换当前单词为大写
"inoremap <c-u> <esc>viwUi
"leader 默认为\
nnoremap <leader>d dd
"重读我的vimrc文件
nnoremap <leader>sv :source $MYVIMRC<cr>
"打开我的vimrc配置文件
nnoremap <leader>ev :vsp $MYVIMRC<cr>
"普通模式下,双引号包括当前单词
nnoremap <leader>" viw<esc>a"<esc>hbi"<esc>lel
" abbreviations 缩略语 可以用于自动修改
iabbrev adn and
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" -END- key mapping
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"文件编码模式指定utf
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
"智能缩进,当匹配到func main() {} 当在大括号中间回车的时候,他会智能缩进
set smartindent
"自动缩进,当你第一行敲 tab + 文字 回车后 下一行自动给你加个 tab
set autoindent
"代码折叠
"set foldmethod=indent
"保存和加载视图
"augroup AutoSaveFolds
"autocmd!
"au BufWinLeave ?* mkview 1
"au BufWinEnter ?* silent loadview 1
"au BufWinEnter ?* if filereadable(expand('%')) | silent loadview 1| endif
"au BufWinEnter ?* if filereadable("~/.local/share/nvim/view/~=+.config=+nvim=+".expand("%:p:h")."=1.vim") | silent loadview | endif
"augroup END
"用空格来切换折叠状态
"nnoremap <space> za
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" -START- Plugin config
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
call plug#begin('~/.vim/plugged')
"
" " Make sure you use single quotes
"
" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
" Plug 'junegunn/vim-easy-align'
"
" " Any valid git URL is allowed
" Plug 'https://github.com/junegunn/vim-github-dashboard.git'
"
"
" " Multiple Plug commands can be written in a single line using | separators
" " tab自动补全
Plug 'ervandew/supertab'
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
let g:UltiSnipsSnippetDirectories=["~/Documents/UltiSnips"]
"let g:UltiSnipsExpandTrigger="<c-s>"
"let g:UltiSnipsJumpForwardTrigger="<s-tab>"
"let g:UltiSnipsEditSplit="vertical"
"
" " On-demand loading
Plug 'preservim/nerdtree', { 'on': 'NERDTreeToggle' } | Plug 'Xuyuanp/nerdtree-git-plugin'
map <C-n> :NERDTreeToggle<CR>
" 回车右侧函数表
Plug 'majutsushi/tagbar'
"""ctags 并且软连接 ctags
"""为当前环境变量的ctags,然后利用ctags生成tags文件给vim函数分屏读取
let g:tagbar_right=1
set tags=tags;
set autochdir
"ctrl+m开启文件tagbar(就是函数提示分屏)
map <cr> :TagbarToggle<CR>
Plug 'vim-airline/vim-airline' | Plug 'vim-airline/vim-airline-themes'
let g:airline_theme='bubblegum'
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
"let g:airline_statusline_ontop=1
"let g:airline#extensions#tabline#formatter = 'unique_tail'
" 可视化缩进
Plug 'nathanaelkane/vim-indent-guides'
"代码缩进块显示 + 奇偶行缩进颜色配置 + 缩进块宽度
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_guide_size = 1
let g:indent_guides_auto_colors = 0
autocmd VimEnter,Colorscheme * :hi IndentGuidesOdd ctermbg=237
autocmd VimEnter,Colorscheme * :hi IndentGuidesEven ctermbg=236
let g:indent_guides_exclude_filetypes = ['help', 'nerdtree']
let g:indent_guides_color_change_percent = 1
"彩虹括号
Plug 'kien/rainbow_parentheses.vim'
let g:rbpt_colorpairs = [
\ ['brown', 'RoyalBlue3'],
\ ['Darkblue', 'SeaGreen3'],
\ ['darkgray', 'DarkOrchid3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown', 'firebrick3'],
\ ['gray', 'RoyalBlue3'],
\ ['black', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue', 'firebrick3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces
" 括号自动匹配
Plug 'jiangmiao/auto-pairs'
" 真彩色
"Plug 'tpope/vim-sensible'
"set termguicolors
"if &term =~# '^screen'
"let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
"let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
"endif
" git左边栏增删改提示
Plug 'airblade/vim-gitgutter'
set updatetime=100
highlight GitGutterAdd guifg=#009900 ctermfg=2 ctermbg=39
highlight GitGutterChange guifg=#bbbb00 ctermfg=3 ctermbg=204
highlight GitGutterDelete guifg=#ff2222 ctermfg=1 ctermbg=59
" 快乐搜索
Plug 'Lokaltog/vim-easymotion'
let g:EasyMotion_smartcase = 1
nmap fw <Plug>(easymotion-w)
nmap fW <Plug>(easymotion-b)
nmap fe <Plug>(easymotion-e)
nmap fE <Plug>(easymotion-E)
nmap fj <Plug>(easymotion-j)
nmap fk <Plug>(easymotion-k)
nmap fh <Plug>(easymotion-linebackward)
nmap fl <Plug>(easymotion-lineforward)
nmap n <Plug>(easymotion-next)
nmap N <Plug>(easymotion-prev)
map / <Plug>(easymotion-sn)
omap / <Plug>(easymotion-tn)
"find target charater
nmap fc <Plug>(easymotion-overwin-f)
" latex support
Plug 'lervag/vimtex'
Plug 'KeitaNakamura/tex-conceal.vim', {'for': 'tex'} "latex的自动替换插件
filetype plugin indent on
syntax enable
let g:tex_flavor='latex'
let g:vimtex_compiler_method = 'latexmk'
let g:vimtex_view_method='zathura'
"let g:vimtex_view_general_viewer = 'okular'
let g:vimtex_view_general_options = '--unique file:@pdf\#src:@line@tex'
let g:vimtex_compiler_latexmk_engines = {
\ '_' : '-pdf',
\ 'pdflatex' : '-pdf',
\ 'dvipdfex' : '-pdfdvi',
\ 'lualatex' : '-lualatex',
\ 'xelatex' : '-xelatex',
\ 'context (pdftex)' : '-pdf -pdflatex=texexec',
\ 'context (luatex)' : '-pdf -pdflatex=context',
\ 'context (xetex)' : '-pdf -pdflatex=''texexec --xtx''',
\}
let g:vimtex_compiler_latexmk = {'aux_dir': {-> expand("%:p:h")."/output"}, 'out_dir' : {-> expand("%:p:h")."/output"}}
"let g:vimtex_quickfix_mode=0
"let g:vimtex_quickfix_enable=0
"
let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
let g:tex_conceal_frac=1
set conceallevel=1
let g:tex_conceal="abdgm"
" python折叠
Plug 'tmhedberg/SimpylFold'
let g:SimpylFold_docstring_preview = 1
"coq自动补全插件
" main one
Plug 'ms-jpq/coq_nvim', {'branch': 'coq'}
" 9000+ Snippets
Plug 'ms-jpq/coq.artifacts', {'branch': 'artifacts'}
"let g:coq_settings = { 'auto_start': v:true } or let g:coq_settings = { 'auto_start': 'shut-up' }
let g:coq_settings = { 'auto_start': v:true }
" lua & third party sources -- See https://github.com/ms-jpq/coq.thirdparty
" Need to **configure separately**
Plug 'ms-jpq/coq.thirdparty', {'branch': '3p'}
Plug 'mhinz/vim-startify'
" " Plugin outside ~/.vim/plugged with post-update hook
" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
"
" " Unmanaged plugin (manually installed and updated)
" Plug '~/my-prototype-plugin'
"
" " Initialize plugin system
call plug#end()
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" -END- Plugin config
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
今天的文章nvic配置流程_neovim和vim区别分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/79857.html