释放小七猫的分享欲

用最少的时间打造一个强大的 neovim

tags: 终端, 编辑器
@ 20/04/2024

vim 的作者去世一段时间了,所以我将这篇文章从新组织了一次。2024 年,vim 还是存在一些小问题,在 windows 和 macos 上的体验不太好,所以我现在换用 neovim 了,这套配置还是依然适用,vim 和 neovim。

适用人群

简单的代码或者文本编辑,无需将 neovim 配置成 IDE。

基本配置

外观方面的基本配置

---------------------------------------------------------------
-- ~/.config/nvim/init.lua  —— 最小可行且舒服
---------------------------------------------------------------
-- 0. 判断系统 & 默认 shell
local is_win = vim.fn.has("win32") == 1 or vim.fn.has("win64") == 1
if is_win then
    vim.opt.shell      = "powershell"
    vim.opt.shellcmdflag = "-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command"
end

-- 1. 外观
vim.opt.number         = true      -- 绝对行号
vim.opt.relativenumber = false     -- 相对行号
vim.opt.cursorline     = true      -- 当前行号高亮
vim.opt.showmatch      = true      -- 括号匹配
vim.opt.matchtime      = 5         -- 0.5 s
vim.opt.scrolloff      = 3         -- 上下留边
vim.opt.sidescrolloff  = 3         -- 左右留边

-- 2. 输入体验
vim.g.mapleader = " "
vim.opt.mouse     = "a"
vim.opt.clipboard = "unnamedplus"  -- 默认系统剪贴板

-- 3. 缩进
vim.opt.tabstop     = 4
vim.opt.softtabstop = 4
vim.opt.shiftwidth  = 4
vim.opt.expandtab   = true         -- 用 4 空格而不是tab
vim.opt.smartindent = true
vim.opt.autoindent  = true

-- 4. 搜索 / 修改
vim.opt.hlsearch  = true
vim.opt.incsearch = true
vim.opt.ignorecase = true
vim.opt.smartcase  = true
vim.wo.wrap = true                 -- 长行自动换行

-- 5. 缓冲区、撤销
vim.opt.swapfile     = false
vim.opt.backup       = false
vim.opt.writebackup  = false
vim.opt.history      = 100         -- undo 100 次
vim.opt.updatetime   = 100         -- 提升 LSP/gitsigns 响应

-- 6. 一行魔法,打开文件类型检测 + 语法高亮
vim.cmd([[
filetype plugin indent on
syntax enable
]])

插件

推荐几个轻量插件,实用性更强,需要安装 packer,兼顾了外观和功能。

注意:如果你使用的是 windows 下 git 自带的 vim,则会被认为处在 linux 环境下,安装插件目录需要选择 linux 的目录。

这一部分我自己也不咋用了,保留以前的 vim 版本吧

" 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'
call plug#begin('~/.vim/plugged/')
Plug 'skywind3000/vim-auto-popmenu'
Plug 'skywind3000/vim-dict'
Plug 'preservim/nerdtree'
Plug 'jiangmiao/auto-pairs'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'morhetz/gruvbox'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'skywind3000/asynctasks.vim'
Plug 'skywind3000/asyncrun.vim'
call plug#end()

" 代码补全配置
" 设定需要生效的文件类型,如果是 "*" 的话,代表所有类型
let g:apc_enable_ft = {'*':1}
" 设定从字典文件以及当前打开的文件里收集补全单词,详情看 ':help cpt'
set cpt=.,k,w,b

" 不要自动选中第一个选项。
set completeopt=menu,menuone,noselect

" 禁止在下方显示一些啰嗦的提示
set shortmess+=c

" nerdtree 按 F1 打开关闭
map <F1> :NERDTreeToggle<CR>

" 状态栏设置
set laststatus=2  "永远显示状态栏
let g:airline_powerline_fonts = 1  " 支持 powerline 字体
let g:airline#extensions#tabline#enabled = 1 " 显示窗口 tab 和 buffer
let g:airline_theme='molokai'  " murmur 配色不错

if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.branch = '⎇'

" colorscheme pablo
" colorscheme torte
" colorscheme koehler
colorscheme gruvbox
set background=dark
" 设置颜色主题

" 映射两个代码运行的快捷键
let g:asyncrun_open = 10
noremap <silent><C-g> :AsyncTask file-run<cr>
noremap <silent><C-b> :AsyncTask file-build<cr>

去掉了快捷键基本上使用默认配置,F1 打开 nerdtree,Ctrl+g 运行当前文件,Ctrl+b 构建当前项目(但针对这一点我不做过多讲解,否则偏离了文章的主题)。使用 gruvbox 主题

更新一版,加入了 gui 和平台特性,因为我要在 win 下用 gvim

再一键安装 Coc 插件,这是我常用的,你可以装自己需要的插件

CocInstall coc-html coc-tsserver coc-sumneko-lua coc-sh coc-pyright coc-json coc-clangd

然后简单的配置一下 asyncrun, vim ~/.vim/tasks.ini,我常用的语言配置如下:

[file-run]
command="$(VIM_FILEPATH)"
command:python=python "$(VIM_FILENAME)"
command:javascript=node "$(VIM_FILENAME)"
command:sh=bash "$(VIM_FILENAME)"
command:lua=lua "$(VIM_FILENAME)"
command:rust=rust "$(VIM_FILENAME)"
output=terminal
cwd=$(VIM_FILEDIR)
save=2

这个插件功能十分强大,详情可见https://github.com/skywind3000/asynctasks.vim

这样的话,进行一些简易的代码编写和文本编辑都没问题了

后话

我并不建议将 neovim 作为大型项目的编辑器,因为它在项目管理,构建上的配置难度比单文件高得多,插件装得太多也会影响 neovim 本身的性能,所以还是专注于简单文本编辑比较好。如果需要管理大型工程,使用 vs、xcode 等 IDE 是更为明智的选择。