本整合包内含大量实用插件,包括智能补全、语法高亮、错误提示、快速跳转、全局搜索、集成终端、文件浏览、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?
