本整合包内含大量实用插件,包括智能补全、语法高亮、错误提示、快速跳转、全局搜索、集成终端、文件浏览、Git 支持等。且安装方便,小彭老师自用同款,纯 Lua 配置,是您基于 NeoVim 的 IDE 不二之选。
无需克隆本仓库,直接在命令行中输入以下命令即可安装:
curl -SLf https://142857.red/files/nvimrc-install.sh | bash
如果安装遇到问题,欢迎通过 GitHub issue 反映,我会尽快帮您解决。
- 目前只支持 Linux 和 MacOS 系统,暂不支持 Wendous 系统。
- 请勿以 root 身份运行!否则会为 root 安装 nvim 插件而不是当前用户,插件安装后仅对当前用户有效。
- 您的系统中无需事先安装有 nvim,本整合包内部已经自带了最新版 nvim 的 AppImage,可无依赖直接运行。
- 无需连接 GitHub,所有插件全部已经预下载在整合包内部,无需 GitHub 加速器!
- 过程中会通过您系统的包管理器安装一些工具,所以只需确保包管理器的设置是国内源即可。
- 为了能够使用补全,会为您安装如 clangd 一类的包,但即使其中一个安装失败,也不影响其他语言和编辑器整体的使用。
- 安装脚本运行中可能产生一些冗余错误信息,属于正常现象,不影响使用,请忽视他们。
安装完成后,输入 nvim
即可使用,按 q
或 :wqa
即可退出。
如需更新,重新执行上面的一键安装命令即可。
推荐为您的终端安装 Nerd Fonts 字体,并把终端设置为该字体。然后在 nvim
中输入 :lua require'archvim.options'.nerd_fonts = true
,这样就可以显示文件类型图标了。
小彭老师用的是 JetBrainsMono Nerd Font Regular,字号 16,这是一款专为程序员打造的等宽字体。
如需自己定制插件参数、移除不想要的插件或添加更多插件:可以编辑 ~/.config/nvim/lua/archvim/plugins.lua
,里面有全部的插件列表,删除或添加即可。
注意:删除或添加了新插件后,需要运行
:PackerSync
和:PackerCompile
命令才能生效。
-
Q: 不想要部分插件,或想安装其他插件?
-
A: 修改
~/.config/nvim/lua/archvim/plugins.lua
中的plugins
列表即可。 -
Q: 不想要部分 LSP 服务器?
-
A: 修改
~/.config/nvim/lua/archvim/config/mason.lua
中的ensure_installed
字段即可。 -
Q: 不想要部分语法高亮?
-
A: 修改
~/.config/nvim/lua/archvim/config/tree-sitter.lua
中的ensure_installed
字段即可。 -
Q: 出现乱码,无法正确显示符号?
-
A: 安装 Nerd Font 字体,并把终端设置为该字体。然后在
nvim
中输入:lua require'archvim.options'.nerd_fonts = true
,重启,这样以后就可以正确显示文件类型图标了。如果不喜欢,那就:lua require'archvim.options'.nerd_fonts = false
关闭。 -
Q: 打开 C/C++ 源码时不识别头文件目录,“飙红线”,怎么办?
-
A: 请先在 NeoVim 中用
:CMakeGenerate
命令配置项目!否则无法识别你 CMake 里的编译选项。如果一定要命令行构建,请给cmake
指定-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
参数,这样 C++ 补全才能正常工作,详见下方的 “C/C++/CMake 配置” 章节。 -
Q: Inlay Hint 太烦太挡视线了!能否关闭?
-
A:
:lua require'archvim.options'.enable_inlay_hint = false
,重启,即可永久关闭。如需暂时开启和关闭,可以用gsi
快捷键。 -
Q: 支持(非 Neo 的)Vim 吗?
-
A: 本分支只有 NeoVim 配置,对于来自 BV1H44y1V7DW 视频想领取老版 Vim 插件的同学,请移步 main 分支。
- Arch Linux(亲测可用)
- Manjano Linux (群友测试可用)
- Ubuntu (亲测 20.04 可用)
- Debian (理论可行,没有测试过)
- Kali Linux (理论可行,没有测试过)
- Raspbian (理论可行,没有测试过)
- Fedora (感谢 @justiceeem 大佬)
- OpenSUSE (感谢 @sleeplessai 大佬)
- CentOS (感谢 @xxy-im 大佬)
- Deepin (感谢 @zhangasia 大佬)
- MacOS (感谢 @YangZ2020 测试确认)
i
j
k
c
d
w
等 Vim 原生键位不再赘述,此处仅介绍本插件整合包额外增加或不同的。
以下默认读者知晓 Vim 的四大模式:普通模式(NORMAL)、插入模式(INSERT)、可视模式(VISUAL)、终端插入模式(TERMINAL)。
不同模式下有独立的键位映射,以下除非特殊说明,默认指的是普通模式下的映射。
基本
-
jk
/kj
/<Esc>
回到普通模式 -
q
/:wq
/ZZ
保存并退出 -
Q
记录宏 -
gl
/$
移动到行末尾 -
gh
/^
移动到行开头(不包括空格) -
3gl
/$2l
移动到行末尾倒数第 3 个字符 -
3gh
/^2h
移动到行开头倒数第 3 个字符 -
<M-h>
向左移动若干格 -
<M-j>
向下移动若干格 -
<M-k>
向上移动若干格 -
<M-l>
向右移动若干格 -
<M-z>
当前所在行居中 -
<M-b>
跳转到上若干个单词的开头 -
<M-e>
跳转到下若干个单词的末尾 -
<M-w>
跳转到下若干个单词的开头
跳转
-
gd
跳转到定义 -
gD
跳转到声明 -
gy
跳转到变量类型的定义 -
gY
跳转到虚函数实现 -
go
头文件和源文件来回跳转 -
gr
寻找符号引用 -
gz
罗列所有相关信息(定义、引用等) -
gf
打开光标下的文件名 -
gF
打开光标下的文件名并跳到右侧指定的行号 -
gx
打开光标下的网页链接 -
<C-o>
跳转回来
重构
gcc
注释/取消注释当前选中的代码/行gn
重命名变量gw
尝试自动修复问题g=
自动格式化当前代码
预览
K
悬浮窗查看文档gsf
预览函数定义gsc
预览类定义gsd
预览语法错误
开关
gso
打开大纲gsg
打开 Git 面板gsp
打开项目文件树gss
查看所有静态语法错误gsl
查看所有编译器报错gsi
开关 Inlay Hint
标签页
-
<F4>
或:wa
一键保存所有打开的文件 -
<F3>
或gt
切换到下一个标签页 -
<F2>
或gb
切换到上一个标签页 -
<F1>
或g<Tab>
将当前标签页固定在最前 -
<S-F3>
或gT
将当前标签页右移一位 -
<S-F2>
或gB
将当前标签页左移一位 -
<S-F1>
或g<BS>
关闭当前标签页 -
<C-S-F3>
或g<C-t>
关闭右侧所有标签页 -
<C-S-F2>
或g<C-b>
关闭左侧所有标签页 -
<C-S-F1>
或g<S-Tab>
关闭除当前标签页外所有 -
g<Space>
选择跳转到一个标签页
文本查找
-
,.
当前文件中模糊查找 -
,k
当前项目中正则表达式查找 -
,l
当前项目中的所有文件 -
,b
当前 Vim 已打开文件 -
,o
最近打开过的历史文件 -
,i
当前所有加入 Git 仓库的文件 -
,p
当前 Git 有未提交修改的文件 -
,c
所有 Git 提交历史 -
,v
所有 Git 分支 -
,L
当前项目所有加入 CMake 的.cpp
源文件 -
,O
当前项目所有CMakeLists.txt
和.cmake
文件 -
,x
当前文件中所有符号 -
,j
当前 Vim 跳转历史 -
,m
所有m
创建过的书签 -
,/
历史/
搜索记录 -
,:
历史执行过的 Vim 命令 -
,;
所有可用的 Vim 命令 -
,?
所有 Vim 帮助文档 -
,a
所有静态检查错误 -
,q
所有编译器报错 -
,,
多功能模糊查找
选择
-
vac
选中当前类 -
vic
选中当前类体内 -
vaf
选中当前函数 -
vif
选中当前函数体 -
vab
选中当前块 -
vib
选中当前块中内容 -
vad
选中当前分支 -
vid
选中当前分支块或条件 -
vae
选中当前循环 -
vie
选中当前循环体 -
vai
选中当前函数调用语句 -
vii
选中当前函数调用语句的参数列表 -
vap
选中当前参数(包括空格和逗号) -
vip
选中当前参数(不包括空格和逗号) -
vah
选中当前赋值语句 -
vih
选中当前赋值语句中的左侧值 -
var
选中当前返回语句 -
vir
选中当前返回语句返回值 -
vin
选中当前数字 -
vat
选中当前注释块 -
+
扩大选择 -
-
缩小选择
举一反三:dat
删除当前注释块,cip
修改当前参数
移动
-
]c
下一个类开头 -
[c
上一个类开头 -
]C
下一个类结尾 -
[C
上一个类结尾 -
]f
下一个函数开头 -
[f
上一个函数开头 -
]F
下一个函数结尾 -
[F
上一个函数结尾
...以此类推,所有英文字母同上“选择”所述...
<Space>
全屏任意移动
换位
mh
左移参数ml
右移参数mj
下移当前语句mk
上移当前语句maf
下移当前函数mif
上移当前函数mac
下移当前类mic
上移当前类
括号
可视(VISUAL)模式中:
s)
给当前选中内容包上(选中内容)
括号s}
给当前选中内容包上{选中内容}
括号s]
给当前选中内容包上[选中内容]
括号s>
给当前选中内容包上<选中内容>
尖括号s'
给当前选中内容包上'选中内容'
单引号s"
给当前选中内容包上"选中内容"
双引号stspan
给当前选中内容包上<span>选中内容</span>
标签sta href="b.html"
给当前选中内容包上<a href="b.html">选中内容</a>
标签
普通(NORMAL)模式中:
ysi<range><brace>
添加括号cs<oldbrace><newbrace>
改变括号ds<brace>
删除括号
窗口
-
<C-q>
关闭当前窗口 -
<C-h>
移动到当前左侧的窗口 -
<C-j>
移动到当前下方的窗口 -
<C-k>
移动到当前上方的窗口 -
<C-l>
移动到当前右侧的窗口 -
<C-S-h>
将当前窗口向左移动 -
<C-S-j>
将当前窗口向下移动 -
<C-S-k>
将当前窗口向上移动 -
<C-S-l>
将当前窗口向右移动 -
<M-s>
横向切割当前窗口,变为上下两个 -
<M-v>
纵向切割当前窗口,变为左右两个 -
<M-=>
将当前窗口高度增加 1 格 -
<M-->
将当前窗口高度减少 1 格 -
<M-.>
将当前窗口宽度增加 1 格 -
<M-,>
将当前窗口宽度减少 1 格
CMake 项目
-
cmc
或:CMakeGenerate
配置当前项目 -
cmb
或:CMakeBuild
构建当前项目 -
cmr
或:CMakeRun
运行当前项目 -
cms
或:CMakeStopRunner
杀死当前终端中的正在运行的程序 -
:CMakeSelectBuildDir
选择构建目录 -
:CMakeSelectBuildType
选择构建类型(Release
或Debug
) -
:CMakeSelectLaunchTarget
选择以后:CMakeRun
要运行的目标
内置终端
-
<F8>
或<C-t>
打开/关闭终端 -
<Esc>
从终端模式(TERMINAL)中回到普通模式(NORMAL) -
p
粘贴剪贴板中的命令 -
i
或a
从普通模式回到终端模式 -
1<F8>
或1<C-t>
打开 1 号终端 -
2<F8>
或2<C-t>
打开 2 号终端 -
以此类推
-
<C-S-t>
将当前行的文本或选中的部分作为命令执行
文件树
y
拷贝x
剪切d
删除p
粘贴a
创建
建议使用本插件自带的 cmake-tools
插件的 :CMakeGenerate
和 :CMakeBuild
命令来构建项目。
这样是无需任何配置,所有 CMakeLists.txt
中配置的头文件都能找得到,语法高亮和代码提示就是正确的。
如果你想要手动命令行调用 cmake
,那么也请指定 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
参数:
cmake -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
这会生成对 C++ 代码补全必不可少的 build/compile_commands.json
文件。
否则,本插件的语法高亮和代码提示插件将无法确定头文件目录,语法检测可能无法正常工作(俗称“飙红线”)。
:CMakeGenerate
实际上就是默认自带了-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
这个参数,建议始终通过:CMakeGenerate
和:CMakeBuild
来构建项目。
如果你用的是其他构建系统,可能需要自己在项目根目录下生成 compile_commands.json
文件。
如需指定没有 compile_commands.json
时默认的 Clangd 选项(单文件编译的情况),编辑文件 ~/.config/clangd/config.yaml
,内容为:
CompileFlags:
Add:
- --no-cuda-version-check
- -D__clangd__ # 添加你的自定义选项
Remove:
- -forward-unknown-to-host-compiler
- --expt-*
- -gencode*
- --generate-code*
- -Xfatbin*
- -arch=*
- -rdc=*
完整插件列表,请查看 lua/archvim/plugins.lua
,你可以编辑该文件,从而修改配置或添加新的插件。
c,cpp,cuda,cmake,lua,python,html,javascript,css,json,bash,regex,markdown,glsl,vim,vimdoc
你可以输入 :TSInstall <language>
来安装更多语言的语义高亮支持。
clangd,pyright,lua_ls
可以通过执行 :Mason
或修改 lua/archvim/config/lspconfig.lua
来安装更多语言的 LSP 补全支持。
/usr/bin/nvim
/usr/bin/.nvim.appimage.noextract
~/.config/nvim
~/.local/share/nvim
~/.config/clangd
~/.clang-format
- 如果脚本发现您已经存在
~/.config/nvim
目录,则会将其备份至~/.config/.nvim.backup.随机数字
。 - 如果脚本发现您已经存在
/usr/bin/nvim
可执行文件,但版本不足 v0.10.0,则会用本整合包内置的 nvim.AppImage 替换他。 - 请勿以 sudo 模式运行本脚本,本脚本内部自动会在需要时采取 sudo。
欲了解本整合包安装与打包原理,请看
.compile.sh
。
如果你有稳定的 GitHub 外网连接,并且已经自己安装好了 NeoVim 版本 v0.10.0 以上,也可以尝试运行以下命令手动安装:
test -f ~/.config/nvim && mv ~/.config/nvim{,.backup}
git clone https://github.com/archibate/vimrc ~/.config/nvim
git clone --depth 1 https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/start/packer.nvim
bash ~/.config/nvim/install_deps.sh
手动安装的好处是你以后只需
git pull
就可以更新上小彭老师最新改动,缺点是他不会自动为你安装依赖项,也不会帮你升级 NeoVim 版本,不建议使用。
初次进入会有一些报错,若提示你包缺失,输入 :PackerInstall
即可自动安装全部所需的包(需要连接 GitHub),重启后稍等片刻,即可开始使用 nvim。
dotfiles/
文件夹下有其他小彭老师自用的配置文件,欢迎参考。
$ ls -A dotfiles
.bashrc .clang-format .gdbinit .inputrc .zshrc .config/
其中 .clang-format
是我推荐的 C/C++ 代码格式化方案,如果你是一键安装脚本那已经自动帮你拷贝到 ~
了。
安装以后,当你在一个 C++ 源码中运行 :Neoformat
命令时,会采用其中的方案。但如果当前项目根目录下有 .clang-format
文件,则优先采用当前项目的。
本分支为最新 NeoVim 版插件整合包,对于来自 BV1H44y1V7DW 视频想领取老版 Vim 插件的同学,请移步 main 分支。
另外,NeoVim(~/.config/nvim
)和 Vim(~/.vim
)的配置完全独立,互不干扰,所以你可以同时拥有两个配置,取决于你启动的是 nvim
还是 vim
。
:colorscheme zephyr " 默认
:colorscheme gruvbox
:colorscheme nord
通过运行 ./.compile.sh
生成 .build_cache/nvimrc-install.sh
这个一键安装脚本(约 25 MiB)后,我会把他发布到 142857.red。
我会运行 docker run -v $PWD/.build_cache:/mnt -it --rm ubuntu:20.04
来测试兼容性。
在 Ubuntu 容器中,我会用 NODEP=1 bash nvimrc-install.sh
避免使用包管理器,加速安装,方便测试。
TODO: 适配 nvim v0.10.0?