linux文本编辑器

Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在开发运维中被广泛使用。

vim 的使用

基本上 vi/vim 共分为三种模式,命令模式(Command Mode)、输入模式(Insert Mode)和命令行模式(Command-Line Mode)。

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。

以下是普通模式常用的几个命令:

  • i:切换到输入模式,在光标当前位置开始输入文本。
  • x : 删除当前光标所在处的字符。
  • : :切换到底线命令模式,以在最底一行输入命令。
  • a : 进入插入模式,在光标下一个位置开始输入文本。
  • o:在当前行的下方插入一个新行,并进入插入模式。
  • O : 在当前行的上方插入一个新行,并进入插入模式。
  • dd : 剪切当前行。
  • yy : 复制当前行。
  • p(小写):粘贴剪贴板内容到光标下方。
  • P(大写):粘贴剪贴板内容到光标上方。
  • u :撤销上一次操作。
  • Ctrl + r :重做上一次撤销的操作。
  • :w :保存文件。
  • :q :退出 Vim 编辑器。
  • :q! :强制退出Vim 编辑器,不保存修改。

若想要编辑文本,只需要启动 Vim,进入了命令模式,按下 i 切换到输入模式即可。命令模式只有一些最基本的命令,因此仍要依靠底线命令行模式输入更多命令。

光标移动

  • Ctrl + f:屏幕向下移动一页,相当于Page Down按键
  • Ctrl + b:屏幕向上移动一页,相当于Page Up按键
  • 0或功能键Home:这是数字0 :移动到这一行的最前面字符处
  • $或功能键End:移动到这一行的最后面字符处
  • G:移动到这个档案的最后一行
  • gg:移动到这个档案的第一行,相当于1G
  • n Enter:n 为数字。光标向下移动n行
  • n G:n 为数字。移动到这个档案的第n行。例如 20G 则会移动到第20行(可配合 :set nu),也可输入20,然后shift+g

复制粘贴

  • x, X:在一行字当中,x 为向后删除一个字符, X为向前删除一个字符

  • nx:n 为数字,连续向后删除 n 个字符。举例来说,连续删除10个字符,10x

  • dd:剪切游标所在的那一整行,用 p/P 可以粘贴。

  • ndd:n 为数字。剪切光标所在的向下 n 行,例如 20dd 则是剪切20行,用p/P可以粘贴。

  • dG:删除光标所在到最后一行的所有数据

  • yy:复制游标所在的那一行

  • nyy:n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行

  • u:撤销,复原前一个动作

  • [Ctrl]+r:重做上一个动作

  • .:点,重复前一个动作的意思。

  • p, P:p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行。举例来说,目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行

    其他:

1
2
3
4
5
6
7
8
9
d1G	删除光标所在到第一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除10行,10cj

搜索替换

  • /word:查找单词word,命令模式下/单词,回车,n查找下一个,N上一个

  • :n1,n2s/word1/word2/g:n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2

  • :1,$s/word1/word2/g:%s/word1/word2/g:从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2

  • :1,$s/word1/word2/gc:%s/word1/word2/gc:从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2,且在取代前显示提示字符给用户确认 (confirm) 是否需要取代。

输入模式

在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式。

  • i,**I **进入输入模式(Insert mode): i 为从目前光标所在处输入, I 为在目前所在行的第一个非空格符处开始输入
  • a, **A **进入输入模式(Insert mode): a 为从目前光标所在的下一个字符处开始输入, A 为从光标所在行的最后一个字符处开始输入。
  • o, **O **进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行, O 为在目前光标所在的上一行处输入新的一行!
  • r, R 进入替换模式(Replace mode): r 只会替换光标所在的那一个字符一次,R会一直替换光标所在的文字,直到按下 ESC 为止

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下 :(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。在底线命令模式中,基本的命令有:

  • :w:保存文件。
  • :q:退出 Vim 编辑器。
  • :wq:保存文件并退出 Vim 编辑器。
  • :q!:强制退出Vim编辑器,不保存修改。
  • :set nu:显示行号,设定之后,会在每一行的前缀显示该行的行号。
  • :set nonu:取消行号。

ESC 键可随时退出底线命令模式。