我的 Vim 学习之路

252 天前
 izzy27

谨以此文缅怀 Vim 作者 Bram Moolenaar

我的 Vim 学习之路

初识

我想大约是 17 年初的时候,在我看了一篇介绍的 Vim 和 Emacs 文章后,我对 Vim 这种编辑模式产生了浓厚的兴趣,文中介绍使用 Vim 你可以完全脱离鼠标工作,大幅提升 Coding 的效率,对当时的我产生了很大的震撼,这太酷了。

为了使用 Vim ,我立即安装了一个 Ubuntu 的虚拟机,然后调出命令行,兴奋的敲下命令:

$vim test

接着,我发现键盘的⬆️⬇️⬅️➡️没有任何反应,我甚至无法打出 hello world 。

对此,我的反应和大多数 Vim 初学者一样,感到沮丧。

但是下一秒,我发现我沮丧得太早了,因为我根本无法退出这个界面,于是我不得不换台电脑,搜索那个经典的问题:

如何退出 Vim ?

于是:q成为了我第一个掌握的命令。

经过这次折腾,我对 Vim 没有太多的好感,但我始终保持了对 Vim 的敬畏,我认为这些从上个世纪开始持续称霸数十年的工具都是不可冒犯的,尤其是大多数人都一致好评的情况下。

当时大学的课程进行到学习 C 了,写代码就需要用 IDE ,我下载了 Dev-C++ 作为我第一个 IDE 进行编程,开始写课本上的练习题,当学期结束时,我也把 IDE 换成了 Visual Studio 。

我已经忘了要学习 Vim 这件事情了。

学习 Vim

人做某件事情总是需要推动力的,而我开始学习 Vim 的转折点来自加入学校的 C++ 实验室。

所谓实验室其实就是计算机学院划出了一部分办公室,提供设备和场地给学生学习,虽然我大部分时间都在那里打游戏。

18 年的夏天,在实验室的书架上,我发现了一本书,长得黑漆漆的,就是它:

花了大约三周的时间读完这本书后,我开始觉得这些古老的指针、Unix 操作系统、C 悠久的历史太有魅力了,我陷入了某种对 C 的皈依狂热中,这种狂热在我读完《 LinuxC 编程一站式学习》后达到了顶峰。

当时阅读的笔记:Linux 下 C 编译的步骤_hhmy77 的博客-CSDN 博客

这种影响是巨大的,我立即放弃了 Visual Studio ,转而开始刀耕火种式的编程,我强迫用命令行来写 C ,自己生成可执行文件,在这一过程中,Vim 是必须要掌握的工具,出于教徒的虔诚,我开始认真的学习它。

过了大半年的学习,我的 Vim 技巧已经能支持我像使用 IDE 一样流畅的编写代码了,也就是说我终于不用写到一半去搜索 Vim 的命令,或者复制粘贴到 IDE 中完成剩余的代码编写了,这让我看起来像一个正常人一样,真是令人振奋的进步。

在旧的博客上,我还记录了 Vim 的一些使用技巧,下面就是当时我掌握的技能

插入模式 i
退出模式 esc
左下上右 h j k l
跳转到改行的第一个 afa
撤销 u
命令编辑模式下:保存并退出:wq 不保存退出:q 在后面加!则强制操作
保存并退出 shift+zz 不保存退出 shift+zq
普通模式下替换当前字符为 ara ,替换字符串 R 字符串将当前字符变为大写~

普通模式下 当前行右移>>
跳转到行尾$ 行首^

跳转到下一个单词 e
复制:
v 进入可视模式,然后选择想要复制的语句,按 y 复制,返回 normal 模式,按 p 粘贴

普通模式下输入 / 然后键入需要查找的字符串 按回车后就会进行查找。
? 与/ 功能相同,只不过 ? 是向上而 / 是向下查找。
进入查找之后,输入 n 和 N 可以继续查找。
n 是查找下一个内容,N 查找上一个内容。

在当前行下开始插入 o
在当前行之前开始插入 O

向上移动一行 ctrl+y
向下移动一行 ctrl+e
跳转到单词词首、下一单词词尾、前一单词词首 web
删除光标开始的单词 dw
删除光标所在的单词 daw

删除当前字符 x

2.3.3 高级查找

普通模式下输入*寻找游标所在处的单词
普通模式下输入#同上,但 # 是向前(上)找,*则是向后(下)找
普通模式下输入 g*同* ,但部分符合该单词即可
普通模式下输入 g#同# ,但部分符合该单词即可

尽管并不多,我还是花了很多时间去学习 Vim ,足以证明 Vim 的学习曲线有多么陡峭。

一些主流编辑器的学习曲线

持续学习 Vim

又经过一段时间的学习,我接触了 Java 和 C#,我对现代化 IDE 的需求与日俱增,为了使用 C#,我重新开始使用 Visual Studio ,为了学习 Java ,下载了 IDEA 。这些现代 IDE 使得我丝滑地忘记了那段狂热的时光,唯一存在过的证明是我会在第一时间下载 Vim 插件到这些 IDE 里,使用 Vim 的编辑模式来 Coding 。

Vim 是如此博大精深,直到前不久,我才开始使用 :vsplit 来分屏操作 : ),但学习 Vim 的过程是充满趣味的,这种苦行僧式的修行,一开始会疯狂的折磨你,然后会度过一个瓶颈期,接着,你会感觉到快感,随着你的技巧不断提升,快感甚至能进化为喜悦。

人生苦短

2023 年 8 月 5 日,我在 V2EX 上刷到了 Vim 作者去世的消息,点开链接查看,当即有一种人生苦短的感慨。回头看,我学习 Vim 的时间不过几年,而这几年的时光里,我们看到了太多新技术的诞生,看到了互联网的退潮,看到了各种人才陨落的消息,Life is short …

Message from the family of Bram Moolenaar (google.com)

老实说,我并不是一名传统的 Vim 使用者,我只是使用 Vim 的编辑模式来编程,而我也并不了解 Vim 的作者和他背后的历史。在这之后,我阅读了一些关于 Moolenaar 的文章,我越来越对 Moolenaar 感到敬佩。

R.I.P.! Vim 程式編輯器作者 Bram Moolenaar 享壽 62 歲 - INSIDE Moolenaar 設定 Vim 的使用條款寫到,如果願意支持的話使用者可以捐款給烏干達的兒童,而不是要求捐款給 Moolenaar 自己。 目前 Vim 每年約有 30000 歐元的捐款,這換算下來大約可以資助 50 名烏干達兒童完成從小學到大學的學費。

如此伟大的作品,如此伟大的人,文章的最后,让我们一起缅怀这名程序员吧。

3290 次点击
所在节点    分享创造
15 条回复
huihuiHK
252 天前
最后还是 vscode 真香
GaryLz
252 天前
说的应景的话 先生千古 R.I.P
israinbow
252 天前
vim 学会就可以换 helix 再学一个, 或者把自己的人生浪得在 nvim 客制化 (
equationzhao
252 天前
RIP
CodFrm
251 天前
花大功夫配置好 nvim 之后,还是用 idea/vscode+vim 插件写


izzy27
251 天前
@CodFrm 和你一样 😂
aigonna
251 天前
好学呀
LavaC
250 天前
最近我也在入门,但是功夫不到家,有时候用急眼就会把 vim 模式关了。
wipbssl
250 天前
最近刚入门,不过我没怎么折腾 nvim 本身,主要是在 vscode+vim 插件配合使用,浏览器也安装了 vimium C 插件,大部分时间能代替鼠标了。不过 vimium C 有一些 bug ,有些按扭没法点,比如 V2EX 的感谢,这种时候用触控板很舒服,但在台式上用鼠标是就很麻烦
vcfvct
250 天前
@wipbssl 建议试试 surfingkeys, 功能强大,可扩展性强,感觉比 vimium 强,而且还是国人开发😁
wipbssl
249 天前
@vcfvct 试用过,感觉默认键位用起来不如 vimium C 舒服
martin0330
247 天前
@CodFrm 这个是啥皮肤,好好看,求告知
CodFrm
247 天前
@martin0330 palenight

chaorenguilai198
247 天前
国外大神都在盛赞 vim 和 EMACS 的高效,但都忽略了一个默认前提的声明:熟练的键盘盲打能力。英文键盘的盲打能力是使用 vim 的前提,各种命令的记忆都是第二位的。
国内的广大程序员,首先应该加强的应该是盲打能力。
izzy27
247 天前
@chaorenguilai198 是的,盲打的能力非常重要,推荐一个练习网站: https://typing.io/lessons

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/970409

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX