vi/vim常用命令

vim-editor

Vim 是从 vi 发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。

vi 简介

vi 是 Unix 和 Linux 操作系统使用的终端文本编辑器,任何一台安装了 Unix 或 Linux 的机器都会提供这套软件,它是系统管理员手中的得力工具。vim 是 vi 的升级版,它不仅兼容 vi 的所有指令(命令),而且还具有一些新特性。

vi 的操作模式

vi 有三种操作状态:

  • 命令模式(command mode)
  • 插入模式(insert mode)
  • 末行模式(last line mode)

它们的功能如下:

  1. 命令模式:当执行 vi 后,首先会进入命令模式(指令模式),此时输入的任何字符都被视为命令。命令模式用于控制屏幕光标的移动,文本的删除,移动复制某区段,进入插入模式下,或者进入末行模式。

  2. 插入模式:在命令模式下输入相应的插入命令进入该模式。只有在插入模式下,才可做文字数据输入和其它编辑操作,按 ESC 键可回到命令模式。

  3. 末行模式:在命令模式输入某些特殊字符,如 "/"、"?" 和 ":",可进入末行模式。在该模式下可存储文件或离开编辑器,也可以设置编辑环境,如寻找字符串、列出行号等。

vi 三种工作模式的转换如图:

vi工作模式

vi 的进入与退出

进入 vi

若要编辑文件 myfile,执行如下执行即可:

1
$vi myfile

终端显示 vi 的编辑窗口,进入命令模式。也可以直接输入 vi 创建一个新文件,然后在退出时保存文件或者丢弃。

退出 vi

如果在插入模式下,则先利用 ESC 键返回命令模式,然后可选用下列指令退出 vi。

  • :q! 离开 vi,并放弃刚才的修改。
  • :wq 保存退出。
  • :ZZ 保存退出。
  • :x:wq
  • :w 保存但不退出。
  • :q 退出 vi,若文件被修改过,则会被要求确认是否放弃修改。此指令可以 w 配合使用。

注意:如果不知道当前处于何种模式,可以多按几次 ESC 键,以便确认进入命令模式。

vi/vim 常用命令

命令模式的常用命令

在命令模式下可以进行文本的编辑工作。使用下列命令,配合一般键盘上的功能键,如方向键、Insert 键、Delete 键等,就可以利用 vi 来处理文本数据了。

光标的移动

命令 说明 功能键
h 向左移一个字符 \(\leftarrow\)
l 向右移一个字符 \(\rightarrow\)
j 向上移一个字符 \(\uparrow\)
k 向下移一个字符 \(\downarrow\)
0 移至该行之首 Home
$ 移至该行之末 End
^ 移至该行的第一个非空白字符处
H 移至窗口的第一行
M 移至窗口的中间那行
L 移至窗口的最后一行
G 移至该文件的最后一行
nG 移至该文件的第 n 行
gg 移至该文件的第一行
w 跳到下一个单词
b 跳到上一个单词
{ 按段移动,上移
} 按段移动,下移

翻屏与滚屏

命令 说明 功能键
Ctrl+f 向后翻一屏 PageDown
Ctrl+b 向前翻一屏 PageUp
Ctrl+d 向后翻半屏
Ctrl+u 向前翻半屏
zt 光标所在行移动到窗口顶端
zz 光标所在行移动到窗口中间
zb 光标所在行移动到窗口底部

删除(剪切)与修改

命令 说明 功能键
x 删除光标所在的字符 Delete
X 删除光标的前一个字符
dd 删除光标所在的行
ndd 删除包括光标所在行的 n 行文本
d0 删除从光标前一个字符开始一直到行首的文本
dw 删除从光标开始的一个单词
D 删除从光标开始一直到行末的文本
s 删除光标所在字符并进入插入模式
S 删除光标所在行并进入插入模式
r 替换光标所在字符
R 进入替换状态,替换光标所在字符及以后的字符,按 ESC 退出替换状态

复制粘贴

命令 说明
yyY 复制光标所在行
nyynY 复制包括光标所在行开始的 n 行
p (小写) 粘贴到光标的下一行
P (大写) 粘贴到光标的上一行

撤销与反撤销

命令 说明
u 撤销
Ctrl+r 反撤销

可视模式

命令 说明
v 选中文本(按字符移动)
V 选中文本(按行移动)

可视模式可以配合 dy 实现对文本块的删除(剪切),复制。

vim 下还支持配合 <> 实现对文本块的左右移动,首先使用 vV 选择要移动的部分,然后按 Ctrl+v 选中该文本块,接着可根据需要左移 < 或 右移 >

文本行移动(缩进)

命令 说明
>> 向右移动(缩进)
<< 向左移动(缩进)
> (vim 支持) 向右移动(缩进)
< (vim 支持) 向左移动(缩进)

重复命令

命令 说明
. 重复执行上一次的命令

退出命令

命令 说明
ZZ 退出保存,相当于末行模式下的 :wq

插入模式

所有以下命令都能从命令模式进入插入模式。

命令 说明
i 从光标所在字符前面开始插入字符
I 从光标所在行的行首开始插入字符
a 从光标所在字符后面开始插入字符
A 从光标所在行的行末开始插入字符
o 光标所在行向下新增一行
O 光标所在行向上新增一行

末行模式

查找命令

命令 说明
/exp 往前查找字符串 exp,n 下一个,N 上一个
?exp 往后查找字符串 exp,n 下一个,N 上一个

替换命令

命令 说明
:%s/abc/123/g 将当前文件中所有的 abc 替换成 123
:1,10s/abc/123/g 将 1 到 10 行的 abc 全部替换成 123

退出命令

命令 说明
:q 退出程序
:q! 强制退出,不保存修改
:w 保存修改
:w filename 将编辑内容存为名为 filename 的文件
:wq 保存退出
:x 若有修改保存,退出程序

:wq 强制性 写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间。

:x 写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。

其它命令

命令 说明
:set nu 显示行号
:set nonu 不显示行号
:set ff 查看文件格式
:set ff=unix 修改文件格式为 unix
:noh 取消搜索结果高亮

vi/vim 键盘图

vi-vim-cheat-sheet-cn

vi-vim-cheat-sheet