客制化 Neovim
前言
一些符号介绍:
-
<CR>:回车键; -
<C->:表示按住Control然后点按另一个键; -
ab:表示在规定的时间内依次按下a和b; -
<leader>:前置键(前缀键)默认是,,可以自定义;
注意:一般以尖括号包围的是指某类特殊按键,而不是需要你输入尖括号。
注意:尖括号中的 modifier 是不区分大小写的, 也就是说 <C-O> 和 <c-O> 都表示按住 Control 键再点按 O 键。 modifier 为 alt (<m-> 或者 <M->) 时,后面的字符是有大小写之分的。 <m-p> 表示按住 Alt 键再点按小写的 p 键, 而 <m-P> 则表示按住 Alt 键再点按大写的 P 键, 在大小写未锁定的情况下这个可以理解成按住 Alt 和 Shift 键再点按 p 键。
注意:如果不知道想要绑定的按键对应的序列可以在插入模式下先按下 Ctrl-V, 然后再按下想要绑定的按键,这样就会在文本中插入对应的按键序列。
为什么使用 Neovim
我和 vim
和 vim 的结缘要说到高中时期,我在高中时期第一次接触到 vim ,当时我只是觉得这个工具非常的麻烦, 竟然不能够通过鼠标进行操作(当然可以设置开启鼠标功能,但我当时并不知道这一点), 于是在我高中的时候我对 vim 的认识只是停留在通过 h,j,k,l 进行导航, 修改文件需要先按一次 i 键,输入完成后如果要保存需要按下 <esc>, 然后输入 :w<cr> 而且还必须是英文的冒号, 这就导致如果你输入中文之后忘记按 <shift>(或者没有关闭输入法),那么你的命令将不被vim所识别。 当时使用最多的操作应该是 :wq<CR> 保存退出和 :q!<CR> 退出不保存了吧。
我相信很多知道 vim, 但是没有真正开始学习 vim 的人和我高中时期是很相像的——知道几条 vim 的基本指令。
烦人的鼠标操作
在我高中时觉得 vim 最难用的就是不能使用鼠标, 而现在我转战 vim 也是因为我要完成的很多操作都需要使用鼠标,严重影响了我的操作的连贯性。 举一个例子,如果我要在 markdown 文件中插入一段代码, 那么我需要连续按下三次强调符号(和波浪线在一起符号,也被叫做反引号),然后输入我的代码语言, 接着按下回车键,这个时候有的编辑器例如 typora 会自动生成一个代码块,可以在里面写代码, 写完后需要通过鼠标或者方向键将光标移到后面的位置,如果你没有在 markdown 文件后面插入一些空行的习惯, 可能你还需要进入源代码模式进行操作,而如果使用一些没有自动生成代码块的编辑器, 你还需要在输入完代码后继续键入三次强调符号。 上面的过程实在是非常的麻烦,主要是因为鼠标和方向键以及强调符键都与主键盘区(字母集中区)较远, 难以操作,且强调符号键不独立容易按错,比如按到 1 或者是 <tab>。
正是因为上述的原因我认识到:如果只是单纯的顺序浏览文件,那么使用鼠标是最方便的,我不需要到处跳转, 就算我需要进行一些链接的跳转,我也可以通过鼠标侧键进行返回,而对于需要浏览加编辑的文件, 只使用鼠标是近乎不可能完成的,而使用鼠标和键盘的形式同样不是最优解, 而 vim 可以只使用键盘完成浏览和编写的操作,如果使用 vim 编写纯英文的文件是更为方便的。 而作为一个程序员,平常的大部分需要编写的文件应该是满足纯英文条件的 (当然你可能需要写中文注释,或者写一些笔记,但是使用 vim 进行操作并不会太慢)。
the missing semester
MIT 的 the missing semester 让我真正认识到了好的工具的重要性,在三位顶级学府的教授的推荐下, 以及看了他们的实操演示后,我被 vim 所吸引——使用 vim 不是单纯地操作鼠标键盘, 而是在大脑里进行一个类似编程的过程。
这个过程需要你进一步分解每一个操作,然后完全通过键盘完成相关的操作。
比如我要跳到某个函数的开始,那么我就有很多种方法:
- 通过鼠标滚轮找到这个函数,通过点击鼠标放置鼠标指针;
- 通过搜索函数名字并跳转到函数(当然得能大概记住函数的名字才行);
- 如果在当前的屏幕内看见函数,那么可以直接通过输入行号进行跳转;
- 如果你刚好在函数的尾部括号处,那么你可以通过
%进行跳转; - ……
使用鼠标的话,会面临我之前提到的问题,而使用vim可以轻松的通过后面几种方式实现。
值不值
在我学习了 vim 并用 vim 写下一篇 blog 的时候, 我已经感受到一周 vim 带给我的速度与我写了几年 VSCode 的速度相当了 (当然也是因为我比较懒,不会去记忆太多VSCode的快捷键)。
而学会 vim 可能需要很短的时间,但是你可能需要一生的时间去掌握这一个工具 (这是在the missing semester里面看到的)。 根据我目前的体验看下来,我是相信 vim 给我带来的效率提升远远超过我花费的时间, 也就是投入产出比非常小。
从 vim 到 neovim
最开始我自己进行了 vim 的学习并尝试根据自己的需求进行了相关的配置, 这个期间我参考了很多网上成熟的配置。期间主要的模式是通过 vim-plug 进行插件的管理。 最开始使用的 YouCompleteMe 等一些比较老牌的插件进行的补全,再在后面换成了 coc。
后面在我持续使用的过程中,我了解到了 neovim 这个项目,其拥有更加活跃的社区以及更加灵活的配置方式 (当时使用 vim script 进行配置的时候还是感觉不是很方便,而 neovim 支持 lua 进行配置), 于是我决定转战 neovim,并且在 neovim 上重新进行配置。在使用 neovim 的时候我使用的是 lazy.nvim 进行插件管理,这个插件管理器支持惰性加载插件,可以大幅度提升 neovim 的启动速度, 但是我当时不太了解懒加载,没有为其他的插件考虑应该在什么时候进行加载。补全最开始使用的是 cmp, 后面 blink.nvim 出现后我就切换到了 blink.nvim,体验下来确实补全会比 cmp 快, 自己也给 blink.nvim 提交过一些 issues 并写了几个自己平时会用到的 sources。
学习资料
主要依靠以下几种方式进行学习:
-
vimtutor:vim自带的教程,适合初学者入门,也是我最开始使用的教程; - 网上的各种
vim配置的介绍:这类视频网上有很多,可以学习到很多实用的配置技巧, 也可以找到很多好用的插件; -
:help:vim自带的帮助文档,内容非常全面,适合有一定基础的用户。 可以使用:help <topic>来查找相关的帮助文档; -
Vim实用技巧:这本书介绍了很多vim的实用技巧,适合有一定基础的用户; 看了这本书,你会发现你之前可能并不太会用vim; - 使用过程中优化:在使用
vim的过程中,你可能会发现你会频繁的用到一些操作, 或者一些操作在现有的配置下需要多次按键才可以实现,那么在这个时候你就是尝试进行优化, 网上对这类问题往往是有相关讨论的。
配置的迁移
当你切换电脑的时候,或者需要在多台电脑是进行配置同步的时候,你可能需要将你的配置进行迁移。
我个人的做法是将配置文件放在 GitHub 上。 并实现了一个简单的脚本帮助我安装一些依赖以及将配置文件进行软链接到对应的位置。
可以参考:dotfiles.sh。
NOTE:可以直接把上面的代码扔给 AI 让 AI 来解释上面代码的功能。
LightBoat
网上其实有很多好用的 neovim 配置。我自己在配置过程中还是发现很多插件对于大文件并不是很友好, 所以我自己就发布了一个 neovim 配置,叫做 LightBoat。 LightBoat 是根据我自己的使用习惯进行配置的,可以进行自定义,并且对于大文件有比较好的支持。
Enjoy Reading This Article?
Here are some more articles you might like to read next: