介绍

vim有三个模式:输入模式、命令模式、底线命令模式。

  • 输入模式:只有在输入模式下才可以进行文字编辑,在输入模式中也分为insert和replace,即插入模式和替换模式。
  • 命令模式:可通过从键盘上输入相关命令,控制屏幕光标的移动,删除字符、字或行的内容,撤销文本的修改,移动复制某区段等功能,以及进入到插入模式或底线模式中。
  • 底线命令模式:底线模式主要进行一些文字编辑的辅助功能,比如字符串搜索、替换、保存文件等操作,一般以:/等开头的命令。

图来源菜鸟教程,侵删

使用vim

新建test.txt文件

1
vim test.txt

这条指令执行了两个操作:

  1. 检查当前目录下test.txt文件是否存在
  2. 若存在,则直接打开test.txt文件
  3. 若不存在,则新建一个test.txt文件并且打开该文件

我当前目录下是不存在test.txt文件的,所以打开是空白的,如图:

01-vim20221105-943

在test.txt文件添加内容

要求:在test.txt文件添加内容"hello,vim"。

在前面介绍说到,我们在添加内容前,应该要切换到插入模式,才能输入内容,我们可以在英文输入法下,按i或者Ins按键(有些键盘没有这个按键),当控制台左下角出现--INSERT--时,表示已经切换到输入模式了,这时候可以输入内容了。(tips:~表示该行内容为空)

02-切换到insert模式-20221105-375

退出vim编辑器

输入完内容后,我们可以按Esc这个按键切换到命令模式,此时左下角是不显示任何字符的,命令模式下,在英文输入法下,我们可以输入以:wq,表示退出并保存(此时的的光标在左下角)。

03-退出并保存-20221105-878

查看文件

04-查看文件-20221105-548

  • ls:表示查看当前文件夹的非隐藏文件
  • cat test.txt:表示将test.txt文件内容输出到终端上

总结

经过一个简单的例子,你大概也了解vim编辑器的使用方法了,无非就是四个步骤:

  1. vim 文件名
  2. 切换到insert模式
  3. 输入内容
  4. :wq退出vim编辑器

当然,平时我们使用的时候,也有时候会使用到replace模式,也就是替换模式。

vim退出文件

需要在命令模式中执行命令

  1. :wq:退出并保存
  2. :q!:退出不保存(强制退出vim)
  3. :e!:放弃当前修改,从上次保存文件重新开始编辑
  4. :w:保存(不退出vim)
  5. :q:退出(不保存)
  6. ZZ:保存并退出

一般前三个就够用了

vim复制粘贴内容格式错乱

在使用Xshell远程Linux系统时在复制内容到vim编辑器时,有时候复制内容会错乱,如下图:

05-vim复制粘贴格式错乱-20221105-588

解决方法

在粘贴内容前设置取消自动缩进就好,切换到命令模式,执行该命令:set paste就可以解决格式错乱问题了。

Vim移动光标至行首、行尾

需要在命令模式中执行命令

Vim光标移至行首

  1. 0
  2. Home键
  3. ^
  4. Shift+6

Vim光标移至行尾

  1. End
  2. Shift + 4
  3. 2$(数字表示移下多少行尾)

插入命令

字符 备注
I 光标定位到行首插入
A 光标定位到行尾插入
i 当前位置插入
a 当前位置插入
O(大写) 在当前行之前插入一行
o(小写) 在当前行之后插入一行

vim查找

需要在命令模式中执行命令

向下查找

/内容:回车之后,n查找下一个,N查找前一个

向上查找

?内容:回车之后,n查找下一个,N查找前一个

屏幕滚动

切换到命令模式中执行命令

  1. Ctrl + d: 向下滚动半屏
  2. Ctrl + u:向上滚动半屏
  3. Ctrl + f:向下滚动一屏
  4. Ctrl + b :向上滚动一屏

撤销和重做

需要在命令模式中执行命令

u (小写):撤销(Undo)
U (小写):撤销对整行的操作
Ctrl + r: 重做(Redo),即撤销的撤销。

删除

  1. x :删除当前字符
  2. 3x:删除当前光标开始向后三个字符
  3. X:删除当前字符的前一个字符。X=dh
  4. dl:删除当前字符, dl=x
  5. dh:删除前一个字符
  6. dd :删除当前行
  7. dj:删除上一行
  8. dk :删除下一行
  9. 10d:删除当前行开始的10行
  10. D :删除当前字符至行尾。D=d 删除当前字符之后的所有字符(本行)
  11. kdgg :删除当前行之前所有行(不包括当前行)
  12. jdG(jd shift + g) : 删除当前行之后所有行(不包括当前行)
  13. :1,10d: 删除1-10行
  14. :11,d :删除所有行
  15. J(shift + j):删除两行之间的空行,实际上是合并两行

粘贴、复制、剪切

复制

  1. yy :拷贝当前行
  2. ny:拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。
  3. :1,: 将整个文件复制一份并添加到文件尾部。

粘贴

  1. p :在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。
  2. shift+p :在当前行前粘贴
  3. :1,10 co 20 :将1-10行插入到第20行之后。

剪切

正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切

  1. ndd :剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
  2. :1,10d :将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
  3. :1, 10 m 20:将第1-10行移动到第20行之后。

注释

perl程序中#开始的行为注释,只需要在首行加入#即可注释

  1. 3,5 s/^/#/g :注释第3-5行
  2. 3,5 s/^#//g :解除3-5行的注释
  3. 1,$ s/^/#/g:注释整个文档。
  4. :%s/^/#/g :注释整个文档,此法更快。