vi & vim

这俩都是文本编辑器。vi是Linux默认的编辑器,类似于windows的记事本。vim是vi的拓展,比vi更强大。可以用于在Linux中编辑文件内容。笔记中使用vim。它有两种模式,命令模式和编辑模式,在命令模式中可以做一些检索、筛选等操作。在编辑模式中可以对文档进行修改。

进入 & 退出

进入命令模式

方法:vim <文件名>。此时进入命令模式,不能对文件内容进行操作。对文档的检索是在这种模式下进行的。

03-vim - 图1

进入编辑模式:

i:编辑位置在当前光标位置之前

按下i再按_

03-vim - 图2

03-vim - 图3

I:在光标所在行的行首插入新增文本

按下I再按_

03-vim - 图4

03-vim - 图5

a:在该命令之后输入的字符都插到光标之后

按下a再按_

03-vim - 图6

03-vim - 图7

A:在光标所在行的行尾添加文本

按下A再按_

03-vim - 图8

03-vim - 图9

o:在光标所在行的下面新开辟一行,随后输入的文本就插入在这一行

按下o再按_

03-vim - 图10

03-vim - 图11

O:在光标所在行的上面新开辟一行,随后输入的文本就插入在这一行上

按下O再按_

03-vim - 图12

03-vim - 图13

r:替换光标所在的哪一个字符

按下r再按_

03-vim - 图14

03-vim - 图15

R:一直替换光标所在的文字,直到按下ESC为止

按下R再按三次_再按Esc

03-vim - 图16

03-vim - 图17

退出编辑模式

在编辑模式下按 Esc 键。

退出命令模式

需要使用转义字符:

  • :q:若未修改文件,此命令可以退出编辑器。
  • :wq:把编辑缓冲区的内容写入文件中,退出编辑器,回到Shell下。
  • :ZZ:x:仅当作过修改时才将缓冲区内容写到文件上。
  • :q!: 强行退出vi。告诉vi,无条件退出,丢弃缓冲区内容。

vim流程图

03-vim - 图18

命令模式下的光标跳转

  1. 方向键和Backspace键的使用和正常情况下相同。
  2. 移动到上一行,列不变:k
  3. 移动到上一行行头:-
  4. 移动到下一行,列不变:j
  5. 移动到下一行行头:+
  6. 如果在相应命令的前面加上一个数字n,相应命令执行n次。如2k表示向上移动两行,列不变。
  7. 移至行首:^0
  8. 移至行尾:$
  9. 移至指定行:行号G。如2G,移动到第二行行首。
  10. 移至指定列:列号|。如2|,移动到本行第2列。

文本删除

  1. 命令x(小写字母)删除光标所在的字符。
  2. 命令X(大写字母)删除光标前面的那个字符
  3. 命令dd删除光标所在的整行
  4. 命令D从光标位置开始删除到行尾
  5. d<光标移动命令>删除从光标位置开始至光标移动命令之间的所有字符。如:
    1. d0:从光标位置(不包括光标位)删至行首。
    2. d3l:从光标位置(包括光标位)向右删3个字符。
    3. d$:从光标位置(包括光标位)删至行尾。与D相同。
    4. d5G:将光标所在行至第5行都删除。

复原命令

  1. u:取消前面刚执行的插入或删除命令的效果,恢复到此前的情况。
  2. U:总是把当前行恢复成它被编辑之前的状态。

重复命令

.:在命令模式下,重复执行前一次插入命令或删除命令

补充文本编辑

命令方式下

  1. d0:删至行首
  2. d$:删至行尾
  3. ndd:删除当前行及其后的n-1行
  4. yy:复制当前行的文本
  5. 10yy:复制包括当前行及其后面9行文本
  6. p:在当前行后面插入一个空行,把缓冲区的内容粘贴过来
  7. P:在当前行前面插入一个空行,把缓冲区的内容粘贴过来

ex转移方式下

  1. :n1,n2 d:将n1行到n2行的内容删除
  2. :n1,n2 co n3:将n1行到n2行的内容复制到n3行下
  3. :n1,n2 m n3:将n1行到n2行的内容移到n3行下

字符串检索

  • 向下检索:/模式〈Enter〉。例如:/int
  • 向上检索:?模式〈Enter〉。例如:?flout

字符串替换

  1. :n1,n2s/word1/word2/gn1n2为数字。在n1n2行之间寻找word1这个字符串,并将该字符串替换为word2。例如:100,200s/a/A在100行到200行之间搜索a并替换成A。
  2. :1,$s/word1/word2/gc:全局搜索word1,替换成word2。g改成gc表示要用户确认。
  3. :%s/$/s2/g:在整个行的末尾添加s2。
  4. 全局替换命令g::g/模式/命令表
  5. :g/s1/p:打印文本中有s1的行。p命令表示打印。

块选择

ctrl+v,然后使用方向键选择块。

  1. y:复制反白的地方
  2. d:将反白的地方删除掉
  3. p:插入复制的内容

参考:https://jingyan.baidu.com/article/84b4f565c6b9e560f6da3291.html。