Post

vim (一)

很久没有写博客了,想了想决定坚持写下去。

今天分享的是一个叫vim的editor软件,这篇博客的标题就来自于它。维基百科上有一个叫编辑器之战的词条,参战双方分别是vim和emacs,很有意思。:wq是vim中的保存退出命令,经常会用到。 vim最初叫vi(Visual Editor), 是Bill Joy在1976年为BSD Unix系统开发的。vim则是对vi做了改进,即vi improved。

先说说vim的好处,头一个是速度快。在使用vim编辑代码时,不需要频繁地使用鼠标,因为vim使用键盘来移动光标,仅这一点,vim就比其他编辑器快了不少。另一个好处是适用的地方很多,比如下载一个vimium浏览器插件,在浏览网页的时候就可以用简单的vim语法来代替鼠标,而另一个插件wasavi则可以让你在网页上的文本输入框中使用vim语法,不仅网页,一众编辑器都支持vim语法,比如在vscodeQt Creator中都可以使用vim语法来编辑(不过部分vim操作暂未实现)。

接下来总结一些vim语法和编辑器命令,持续更新。

Part One

前言

vim语法是什么:vim语法指的是你在vim的normal模式下执行的操作,比如完成删除光标所在行的代码这一操作只需在normal模式下执行dd

vim模式是什么:vim的模式可以在编辑器左下角找到。对于初学者来说两种模式就够了:insert模式用于编写代码,normal模式用于执行vim操作,比如光标移动、复制粘贴等。本文内容一半是normal下的vim操作。

编辑器命令:对vim编辑器的设置,比如:syntax on开启vim的语法高亮,:vs垂直分屏。要在normal模式下执行。这是本文另一半的内容

如何下载vim:建议先在vscode里安装一个vim插件,体验一下,英文好的推荐下载一个learn vim插件,边学边练,效果非常好。

linux与vim:这两都跟Unix有很大关系。不妨把学习vim当作学习linux的第一步,毕竟使用linux的过程中需要大量的文本编辑,而且现在的linux发行版大多都默认安装了vim。

打开/关闭vim

如果使用的是linux上的vim或者windows的gvim,首先遇到的将会是如何新建文件,如何以某个文件名保存以及如何退出vim等问题。

  • 新建时指定文件名

比如在linux命令行中执行vim helloworld.c新建一个名为helloworld.的C源代码文件,编辑结束后执行:wq保存该文件并退出。

  • 保存时指定文件名

比如执行vim打开vim编辑器但不指定文件名,编辑结束后执行:wq helloworld.c将文件保存为helloworld.c并退出。

模式切换

打开vim时,默认处于normal模式,这时执行vim操作i就切换到了insert模式。输入字符完毕后,按下Esc或者Ctrl+[切换到normal。如果长期用vim,一般会将Caps大写锁定映射成Esc

光标移动

normal模式下:

  1. 单个字符移动:

kjhl

  1. 单个字词移动:
  • w跳转到下一字词开头
  • e跳转到下一字词末尾
  • b跳转到上一字词开头
  1. 单个文本串移动:

这里的“文本串”特指以空格分隔的文本

与单个字词类似地:

  • W跳转到下一个以空格分隔的文本串开头
  • E
  • B
  1. 行首行末移动:

数字0移动到当前行的首字母,$移动到尾字母

  1. 上下行移动:

j下一行k上一行 (单行代码压缩成多行的情况使用gjgk

  1. 文本首尾跳转:

G跳转到文本最后一行,gg跳转到文本首行

复制粘贴删除行

normal下:

  • yy复制光标所在行
  • p粘贴到光标所在行的下一行
  • P粘贴到上一行
  • dd删除光标所在行并且待在normal模式
  • cc删除光标所在行并且切换insert模式

undo与redo

  • u撤销

  • Ctrl+r重做

vim语法

如果熟练掌握上述vim操作,下面这些就不难了:

  • vim操作与数字结合
  1. 行/字词跳转:比如3j向下跳转到第3行 4e跳转到第4个字词末尾 以及3B等…

  2. 复制粘贴:y1k(相当于yk)复制当前行和上一行 y2j复制当前行和下两行 以及2P等…

  • vim操作互相结合
  1. 删除下一个字符/字词:dl/dw
  2. 删除当前行和下一行并切换insert模式:cj
  3. 复制/删除当前行光标之前和后的文本:y0/d0y$/d$

事实上这些vim操作不是很好分类,列出的也只是一些简单例子

假如当前行有10个字母a, 光标位于第一个字母a上执行4d2l你将剩下几个a呢?

只有多多练习使用vim最后才能达到随心所欲的效果 👍

搜索与重复

  • 搜索

/item1:在文本中搜索item1,按下/后vim左下角会变成搜索的目标字词,输入完要搜索的字词后按下回车,vim会自动向后跳转到首个搜索结果,同时左下角会显示当前光标下的字词是第几个搜索结果。

?item1:同/,只不过是向前跳转到首个搜索结果

  • 跳转

n:跳转到下一个搜索结果

N:跳转到上一个搜索结果

  • 重复

.操作用于重复上一vim操作,经常跟/一起使用。

比如文本中有10个print,需要搜索后逐一跳转并删除该字词。首先搜索print,执行/print后按下回车,光标向后跳转到第一个匹配的搜索结果,执行dw删除首个print,之后再执行9次 n. 操作即可。

快速搜素光标下的字词

  • gd操作
  • *操作

编辑器命令 : 分屏

  1. 分屏
  • :vs垂直方向分屏 左右分(vertical split)
  • :sp水平方向分屏 上下分
  1. 分屏间切换
  • Ctrl+w j:从上半屏到下半屏
  • Ctrl+w l:从左半屏到右半屏
  1. 关闭当前窗口/分屏
  • Ctrl+w q
  1. 交换分屏位置
  • Ctrl+w Shift+l:光标在左屏时执行,交换左右分屏,上下类似

This post is licensed under CC BY 4.0 by the author.