介绍下vim的基本使用

真的不是为了装逼。。

Posted by kevin on October 23, 2019

preface

用过 Linux 系统的朋友一定都或多或少知道 vim ,很多人对这款编辑器的第一印象一定是反人类,可能你不小心进去 vim 的话就不知道怎么退出来了,因此,自从我知道 Ubuntu 图形界面自带 gedit 编辑器时,我就立下 flag 这辈子绝对不用 vim ,可是 flag 这东西不就是用来倒的嘛,最近在 WSL 里面折腾,没有 gedit ,只好学习 vim ,这不, vim 真香!所以嘛,做技术的人还是不要把话说得太绝对,这样只会让人家觉得你很狭隘,一件事物的流行肯定有他的道理,不要固步自封,还是要多去了解一下自己不知道的事务,就像我之前也说过这辈子都不会学 Java 和 PHP ,我自己打脸吧(逃

因此,这篇文章就让大家对 vim 的使用有个基本的了解,毕竟我也不是 vim 深度患者,也只是会一些基础的操作而已,就想告诉大家, vim 并没有那么难学

vim 三种模式

普通模式(normal)

当我们刚进入 vim 的时候,我们就处于普通模式,很多人刚进来想对文件进行编辑,发现怎么都不行,这是因为普通模式下 vim 只能处理用户输入的命令,不能编辑文件。普通模式是用处最多的模式,因为 vim 基本命令都是针对普通模式下对文本进行操作的,无论我们处于什么模式,只要按下 Esc 键,我们就进入了普通模式!

vim_1.gif

插入模式(insert)

当然,刚开始就在普通模式下的话对新手真的是太不友好了,大部分人对编辑器的概念就是编辑修改文件,那么这个就是插入模式干的事。通过 i I a A o O 这六个按键进入插入模式,此时 vim 就跟一般的编辑器一样使用了,按下什么键就是什么键,所见即所得。

  • i 在光标处插入内容,I 将光标移动到行首插入
  • o 在下一行插入新行并进入插入模式,O 在上一行插入新行并进入插入模式
  • a 在光标后面进入插入模式,A 在行尾进入插入模式

vim_2.gif

可视模式(visual)

可视模式相当于普通编辑器的多选功能,可以选择一段文本进行相应操作,这个模式相对来说用的不是特别多,目前我也只是在复制粘贴时会用到, fine,visual mode 真香,可以方便地进行多行操作!!

  • v 进入可视模式,可上下左右选择
  • V 进入可视行模式,直接选中一整行,左右选择此时无效
  • ctrl + v 进入块选择模式,选中一整个矩形框表示的所有文本

vim_3.gif

2019.11.4 更新块选择

块选择模式可以做很多我曾经觉得 vim 做不到的事,比如给多行注释:

vim_16.gif

又比如给多行取消注释(虽然基本上所有的编辑器都可以直接 ctrl + / ,但还是要为我发现这一伟大功能而记录!)

vim_17.gif

光标移动

下面这些命令都是在普通模式下进行的,最基本的就是光标的上下左右移动了:

  • h or 光标左移
  • j or 光标下移
  • k or 光标上移
  • l or 光标右移

vim_5.gif

除此之外,有时候我们需要光标快速跳转,也有很多相应的指令:

  • 0 将光标跳转到行首
  • $ 将光标跳转到行尾
  • ^ 将光标跳转到行首第一个非空白字符

vim_8.gif

下面几个跳转命令是关于单词的:

  • w 跳到下一个单词(标点或空格分隔的单词)的开头(word)
  • W 跳到下一个单词(空格分隔的单词)的开头
  • e 跳到当前或下一个单词(标点或空格分隔的单词)的末尾(ending)
  • E 跳到当前或下一个单词(空格分隔的单词)的末尾
  • b 跳到当前或上一个单词(标点或空格分隔的单词)的开头(beginning)
  • B 跳到当前或上一个单词(空格分隔的单词)的开头

vim_9.gif

当然,也可以按行为单位跳转:

  • gg 跳转至第一行
  • G 跳转至最后一行
  • nG or :n 跳转至第 n 行
  • ge 跳转至上一个单词尾
  • <enter> or + 跳转至下一行首个非空字符
  • - 跳转至上一行首个非空字符

vim_10.gif

还可以找到对应的括号,这个功能基本所有现代编辑器都有:

  • % 跳转至与之相匹配的括号处

vim_13.gif

删除文本

删除操作也是非常常用的了,一般用 d 来删除,代表 delete ,删除操作如果配合上面的光标移动使用,可以有很多的组合方法:

  • dd 删除整行
  • d0 删除到行首
  • d$ or D 删除到行尾
  • d^ 删除到行首第一个非空字符
  • dgg 删除到文件头部
  • dG 删除到行尾
  • dw 删除当前单词
  • nx 删除当前 n 个字符
  • X 向前删除字符

vim_11.gif

查找替换

作为一个编辑器,查找替换功能肯定也不能少了:

  • /pattern 从光标处向文件尾搜索 pattern
  • ?pattern 从光标处向文件头搜索 pattern
  • n 向同一方向执行上一次搜索
  • N 向相反方向执行上一次搜索
  • * 向前搜索光标下的单词
  • # 向后搜索光标下的单词

vim_12.gif

  • :s/p1/p2/g 将当前行内的 p1 替换成 p2
  • :%s/p1/p2/g 将文件中所有的 p1 替换成 p2
  • :%s/p1/p2/gc 将文件中所有的 p1 替换成 p2,且每次替换前都要询问
  • r 替换当前光标处的字符

vim_14.gif

重复命令

vim 也拥有重复命令,能够减少手指的一些劳动力,虽然我平时用的挺少的,谁叫我是小白呢 :)

  • . 重复上一次操作
  • n+op 执行 op 操作 n 次

vim_15.gif

复制粘贴

要我说在 vim 中目前让我最不舒服的就是粘贴复制操作了,毕竟我们已经习惯了 Windows 里面 ctrl + c/v 的操作,突然一下子有些接受不了,我在日常使用中,如果是在插入模式的话我就直接用 Linux 的复制粘贴(就比 Windows 多加一个 shift 键),除此之外我就在可视模式下选住要复制的文本进行一波复制然后在普通模式下进行粘贴,感觉用惯了的话也还好

  • y 复制标记内容
  • yy or Y 复制整行
  • y$ 复制从当前位置到行尾的内容
  • p 粘贴到光标后
  • P 粘贴到光标前

vim_7.gif

撤回操作

记不记得 Windows 下有个 ctrl + z 可以撤销当前的操作? vim 里面也有,当我们瞎几把乱按了什么导致一些奇怪的事情发生时,没关系,按下 Esc 键,然后一直按 u 将文件回退到正常的版本!

vim_6.gif

在 Windows 上对应撤回的反撤回键就是 ctrl + y ,然而, vim 里面也有,那就是 ctrl + r

vim_18.gif

退出 vim

我现在还记得之前我的旁友们看了廖神的 git 教程,用 vi 编辑文件然后死活退不出来的沙雕经历,其实退出 vim 是很基本的操作,百度一下马上就记住了,这是在普通模式下的命令:

  • :wq or ZZ 保存文件后退出
  • :q 直接退出
  • :q! or ZQ 强制退出(放弃保存)

vim_4.gif


讲道理,上面这些操作入个门已经很够了,平时尽量多用 vim 练练手吧,还是没那么复杂的,等有空了俺再去折腾下 vim 的插件(俺可真是个人才,上面这些 gif 录了我好久,没办法,谁叫俺追求极致呢!)

reference

openvim

vim-cheatsheets

vim-visual-mode