0%

关于六天掌握 Vim 这件事

学习 vim 的时候曾经4进4出一直没学会,这次下定决心要学一下了,也不求一口吃个胖子,每天学习一点点。首先从基础操作开始练习,先不要配置插件,也不管高亮和编程。IDE是人类退步的阶梯,沃茨基说的。

当然,这份文档不一定包含所有命令,只是教学的目的,遇到没有涵盖的命令自行查阅即可。有些命令是我自己的总结,不一定对。此外,本文涉及的命令之间可以任意组合实现各类高级功能,这个没办法统一列出。

此外,纸上得来终觉浅,学习 vim 一定多动手练习,在平时任务中多用 vim,自然而然就掌握了。我前后花了 6 天能使用 vim 应付日常开发工作,所以本文也叫六天掌握 vim。

这个是我参考的 vim 的学习笔记,感觉写的还是不错的:https://coolshell.cn/articles/5426.html

第一天

我一点点的写vim,尝试着写点。

换行了。

也能缩进。

第一步直接安装 vim,而后新建一个文件,就叫 vim-prac.md,每次练习都打开这个文件,直接写入。我直接新建了一个博客,每次的练习都写入到这个博客。

首先要知道的,在 normal 模式下,万物都是功能键,比如 hjkl 是方向键,h 表示左,j 表示下,k 表示上,l 表示右。其实也容易记忆,位于两侧的 hl 表示左右,而后左下、右上这样记忆,即和 h 紧挨着的是下,和 l 紧挨着的是上。

  • 如果想要打字,按一下键盘上的 i 进入 insert 模式,而后开始随心所欲的打字,和编辑 txt 文件一样没啥区别,上面那些文字都是我刚入门就打出来的。
  • 在写完之后,按键盘左上角的 esc 退出插入模式,而后输入 :wq 表示写入并退出,这样写好的文件就被保存了。冒号的意思是进入命令模式,w 是写入单词的首字符,q 是退出单词的首字符。

那么再来看一下其他操作:

  • xnormal 模式下,表示删除光标后面的字符。既然删除了,是不是要撤销?那么撤销操作是 u,如果回退到 3 次修改之前,可以输入 3u。这个可以直接在界面下操作,也可以:u。如果发现撤销过头了,就需要恢复,此时的快捷键是 ctrl+R,或者 :red
  • dd,同样是在 normal 模式下,表示删除当前行,并复制到剪切板中,p,粘贴剪切板中的内容。如果复制的是一行,p 会另起一行粘贴,如果复制的是个单词, p 会空格后粘贴,P 会避免这些。

现在差不多可以编辑基本的文本了,今天的内容学习到此结束。如果今后在面对不忙的、简单的、凭借目前 vim 技术可以解决的工作,可以尝试开始用 vim。

第二天

在编辑文本的时候发现,光标的移动不是很便捷,每次都要狂按方向键才能到想要的位置。那么今天就来学习下便捷的光标移动与插入。

插入

  • a,在光标后插入,假设一段序列是 abcd,光标位于 a 后面,在 normal 模式下,那么输入 a 后会移动到 b 的后面,而后开始插入;
  • o,当前行后插入一个新行;
  • O,当前行前插入一个新行;

光标移动

  • 0,移动到行头;
  • ^,当本行第一个不是空格、tab、回车、换行字符的位置,也就是一行开头的这些东西会被忽略;
  • $,移动到本行的行尾;
  • g_,到本行最后一个不是空格、tab、回车、换行字符的位置;
  • /pattern,搜索 pattern 的字符串,如果有多个,按 n 到下一个。

拷贝

之前已经知道了 p 是粘贴,dd 是剪切当前行。如果不删除当前行直接复制呢?用的是 yy

此外,有的时候还想不复制整行,只想复制一行中的某些文字。此时的命令是在 normal 模式下按 v 进入 visual 模式,而后移动光标(可以借助 $ 等功能键)选中文本,按下 y 表示复制选中的文本。而后 p 表示在当前位置之后粘贴,即如果将一些内容复制到 ABCDEB 后面,需要将光标放到 A 后面然后粘贴。

还有这里看着突兀的原因是,之前终端用的光标是 Beam 这样的细线,如果换成 Block 这样的光标块,能从视觉角度更好的理解复制和粘贴的位置。

还有诸如 yG 复制到当前文件结束,y20G 复制到第 20 行等操作,用到的时候再来整理。

文件读取

  • :e path,表示打开指定 path 的文件
  • :wq, :x, XX,保存并退出,:x 仅在有改动时保存
  • :q!,强制退出不保存,:qa! 强制退出正在编辑的文件,即使有更改

今天的练习结束,淘到了一个键盘,回宿舍洗一洗。

第三天

一时技痒,偷着做了两件事情,一个是 vim 的配置文件,一个是 vim 的插件。

大概昨天尝试了一下使用 vim 安装插件,不得不说真香。我选择的插件管理器是 vim-plug,记得配置 gitsshhttps 代理,否则下载不下来。先装了一个 vim-airline 还不错。之后等时间长了,配置一些编程用的插件。

而后是 vim 的配置文件,用户自己的配置文件位于 ~/.vimrc,系统的配置文件位于 /etc/.vimrc。而后可以网上查一查如何配置,比如显示行号、设置缩进、显示文件名等。我的 vim 配置放到了我的 github 上:https://github.com/muyuuuu/my-vim-config

回到正题,今天额外学一些光标移动的操作,我也是使用了一段事件后才发现快速定位到某个位置真的是太有用了。

在配置文件中开启行号设置后,可以知道文件位于哪一行。在 normal 模式下,可以使用 NG 移动到第 N 行,N 是数字;G 是移动到最后一行。或者在 command 模式下,:112 会移动到 112 行。ctrl+f 向下翻页,ctrl+b 向上翻页;ctrl+e 逐行向下翻页;ctrl+y 逐行向上翻页。

之后再来看一下行内的移动:

  • w 到下一个单词的开头,b 移动到上一个单词的开头,e 到当前单词的结尾。
  • % 匹配括号移动,包括 ([{,把光标移动到括号上面,按 % 就可以吧光标移动到匹配的位置。
  • 单词移动,*(下一个) 和 #(上一个),匹配光标当前所在的单词,移动到上一个单词和下一个单词。
  • 6l 向右移动 6 个字符

今天的学习到此结束。今天用 vim 写了一段代码,发现还是熟能生巧,得多用用。

第四天

因为我的电脑屏幕比较大,所以启动终端只开一个 vim 窗口有些资源浪费,今天来学习一下如何分屏。

就像这张图一样,上面是文档,下面是代码。

  • :split 为垂直分屏,:vsplit 为水平分屏。
  • ctrl+w+hjkl 用于切换分屏,还记得之前说过的方向键盘吗?
  • ctrl+w+ 增加尺寸,ctrl+w- 缩小尺寸。

当然只是分屏还是不爽的,能不能直接在 vim 中编译或解释直接查看代码的执行结果而不是每次都要退出去?答案肯定还是有的,不过准备放到后面的打造 vim 了,这里还是以学习 vim 命令为主。

  • .,小数点是重复上次的命令
  • N<cmd> 重复命令 N 次,这个命令不用进入 normal 模式
  • 如写一百遍名字,命令就是 100iname

此外,我发现复制粘贴用的还是比较多的,所以再来整理一些复制的命令。

  • ye,复制光标后面的单词,不含空格
  • yw,复制光标后面的单词,含空格
  • yl,复制光标后面的字符,l 是方向键的右
  • yh,复制光标前面的字符,h 是方向键的左
  • 4yy,复制当前行及后面的3行共4行
  • 4yl,当前字符及后面的3个字符,共4个
  • 4yh,当前字符前面的4个字符,不包括当前字符

同理,d 是剪切的命令,且大体和 y 相似:

  • dd,剪切当前行
  • 4dd,剪切当前行及后面的3行,共4行
  • dw,剪切光标后面的单词,含空格

今天学习内容结束,大概还差区域选择、块操作、宏录制和可视化选择;在之后就会尝试把 vim 打造成 IDE 了,一去不复返。

第五天

我又额外补充了一些插件换了主题来提升效率。wakatime 记录编程时间,nerdtree 显示工作目录,startify 显示近期打开的文件,onehalfdark 作为主题。

在服务器上体验了一把裸敲 vim 的快感,首先补充一些光标移动的东西,快速定位到想要的位置,这玩意太重要了。

  • fa 移动到下一个为 a 的字符处;3fa 移动到第三个 a 的位置;Ff 的查找顺序刚好相反。
  • t, 到逗号前的一个字符,这里暂不支持中文字符 难道以后我写文档要用英文符号了?

此外,在编程时候会常用块操作,比如注释某个函数,或者 python 中的某段内容全部缩进,就需要块操作来实现。

  • 光标定位到要操作的地方;
  • ctrl+v 进入「块可视化」模式,选取要操作的行;
  • shift+i 输入要插入的内容;
  • esc 按两次,会在每行的选定的区域出现插入的内容。

另外的内容是区域选择,命令为 <action>a<object> 或者 <action>i<object>,两者的区别是,前者会选中 object,后者则不会。给定字符串 ((a) + ("b+c")

  • 光标位于 bvi" 会选中 b+cva" 会选中 "b+c"
  • 光标位于 bv2i) 会选中 (a) + ("b+c")v2a) 会选中全部

今天的学习内容到此结束,其实很多时候都在查漏不缺,每次都要花很多时间联系,所以虽然内容很少,但是内容很多(误。

第六天

今天大概是最后一天了,是一些批处理的内容,宏录制和块选择。可惜最近学业繁忙,事情太多,不能学的尽兴。如果之后时间充裕或者不想学习,一定花时间继续打造我的 vim,主要包括:编程语言的支持、自动提示、以及如何不退出 vim 直接执行程序。

首先是宏录制,这个功能十分强大。这里只举一个例子,如何给文件每一行末尾添加逗号:如果功能过于复杂,我第一反应肯定是写脚本处理。

  1. qa~z 中的任意字符,如 qc 表示开始录制宏,这个宏的名字叫 c,而后可以使用 c 来调用宏;
  2. 比如对文件的每一行末尾条件逗号,那么就是如下操作 $a,ESC,j,注意结束时移动到下一行;
  3. 再次输入 q,表示退出宏录制;
  4. n@c 表示执行宏命令 n 次;

注意,录制上面的宏时,会修改第一行的内容,不用担心。除了宏之外,可视化选择也提供了丰富的选择,例如第五天提到的批量注释。其实录制宏也能实现。 今天就来细看可视化模式。

首先,v 是进入字符可视化模式,V 进入行可视化模式,ctrl+v 进入块可视化模式。gv 可以选中上次可视化模式选中的文本;o 会移动到选中区域的另一侧。

  • 对于 v,进入可视化模式后移动光标,使用 4l 选中右边的 4 个字符,按 d 删除
  • 对于 V,进入行可视化模式,同样的是选中,而后操作
  • 对于 ctrl-v,进入块可视化模式,可以使用 2l3j 选择两行三列

而按照上面三种方法选中文本后,都可以进行编辑,如 C 删除选中文本并插入新文本,~ 进行大小写替换,ctrl+v 进入块可视化模式,选中行后J 将这些行连成一行,> 向右缩进< 向左缩进,= 自动缩进。

结语

vim 学习的内容到此结束,我宣布第 5 次 vim 学习顺利结束,完结撒花。不保证本文覆盖全部内容,但至少能看懂常见的命令,以及遇到问题知道往哪个方向搜索。之后的插件配置会放到 github 仓库里面了,那些东西放到这里也没啥用。还是那句话,不会走就别着急学跑,vim 还没学会就打造 IDE 和装插件的意义也不大。

感谢上学期间打赏我的朋友们。赛博乞讨:我,秦始皇,打钱。

欢迎订阅我的文章