目录
1. vim 快捷键
1.1. 光标操作
gg
: 移动到文件头部位置;G
: 移动到文件末尾;nG
: 移动到n
行,10G
即移动到文件第十行;$
: 跳转到当前行末尾;^
: 跳转到当前行开头;w
: 向右移动一个单词;nw
: 向右移动多个单词;b
: 向左移动一个单词;nb
: 向左移动多个单词;ggvG
: 全选;
1.2. 文本操作
dd
: 删除本行;dG
: 清空整个文件内容;ndd
: 删除n
行;yy
: 复制当前行;p
: 粘贴;a
: 进入编辑模式, 插入内容位置在光标的后面;
复制此文件所有内容: ggvG
全选 + y
复制 + p
粘贴。
复制多行:
- v 进入可视模式, 通过移动光标选择目标, 按 y 复制, p 粘贴。
- 输入
:
进入命令行模式, 输入15 20 copy 21
, 即将从第十五行到第二十行的内容从第二十一行开始复制。
1.3. 查找与替换
1.3.1. 查找
在普通模式下输入 /
, 即可开始查找。
例如查找 root
, 输入 /root
按下 enter
即可跳转至 root
第一次出现的位置, 同时, 输入 n
可跳转至下一个 root
的位置, 输入 N
跳转至上一个的位置。
1.3.2. 替换
: s/root/admin/
将光标当前行第一个出现的root
替换为admin
, 没有则不替换;: s/root/admin/g
将光标当前行的所有的root
替换为admin
;: 3,5 s/root/admin/g
将第三至五行所有的root
替换为admin
;: %s/root/admin/g
将所有行的root
替换为admin
;
1.4. 保存与退出
:q!
不保存退出;:wq
保存并退出;:x
保存并退出;:w
保存;:w b.txt
另存为b.txt
;
2. Linux 下 vi 的使用命令
2.1. 命令
- 编辑文件:
vi filename
在 vi
查看模式下:
- 编辑:
i
键 - 退出插入模式:
Esc
- 保存:
:wq
或者Shift + ZZ
- 不保存文件:
:q!
- 整行操作:
dd
删除,yy
复制,p
粘贴 - 将光标处的字符删除:
x
- 在光标的下一行进行插入内容:
o
- 撤销与重做:
u
(撤销操作),U
(撤销某一行最近所有修改),Ctrl+R
(重做)
2.2. 进入 vi 的命令
vi filename
: 打开或新建文件, 并将光标置于第一行首vi +n filename
: 打开文件, 并将光标置于第 n 行首vi + filename
: 打开文件, 并将光标置于最后一行首vi +/pattern filename
: 打开文件, 并将光标置于第一个与 pattern 匹配的串处vi -r filename
: 在上次正用 vi 编辑时发生系统崩溃, 恢复 filenamevi filename….filename
: 打开多个文件, 依次进行编辑
2.3. 移动光标类命令
h
: 光标左移一个字符l
: 光标右移一个字符space
: 光标右移一个字符Backspace
: 光标左移一个字符k
或Ctrl+p
: 光标上移一行j
或Ctrl+n
: 光标下移一行Enter
: 光标下移一行w
或W
: 光标右移一个字至字首b
或B
: 光标左移一个字至字首e
或E
: 光标右移一个字至字尾)
: 光标移至句尾(
: 光标移至句首}
: 光标移至段落开头{
: 光标移至段落结尾nG
: 光标移至第 n 行首n+
: 光标下移 n 行n-
: 光标上移 n 行n$
: 光标移至第 n 行尾H
: 光标移至屏幕顶行M
: 光标移至屏幕中间行L
: 光标移至屏幕最后行0
: (注意是数字零)光标移至当前行首$
: 光标移至当前行尾
2.4. 屏幕翻滚类命令
G
: 翻到文本最后, 大写的 G, 即shift + g
Ctrl+u
: 向文件首翻半屏Ctrl+d
: 向文件尾翻半屏Ctrl+f
: 向文件尾翻一屏Ctrl+b
; 向文件首翻一屏nz
: 将第 n 行滚至屏幕顶部, 不指定 n 时将当前行滚至屏幕顶部。
2.5. 插入文本类命令
i
: 在光标前I
: 在当前行首a
: 光标后A
: 在当前行尾o
: 在当前行之下新开一行O
: 在当前行之上新开一行r
: 替换当前字符R
: 替换当前字符及其后的字符, 直至按 ESC 键s
: 从当前光标位置处开始, 以输入的文本替代指定数目的字符S
: 删除指定数目的行, 并以所输入文本代替之ncw
或nCW
: 修改指定数目的字nCC
: 修改指定数目的行
2.6. 删除命令
ndw
或ndW
: 删除光标处开始及其后的 n-1 个字do
: 删至行首d$
: 删至行尾ndd
: 删除当前行及其后 n-1 行x
或X
: 删除一个字符, x 删除光标后的, 而 X 删除光标前的Ctrl+u
: 删除输入方式下所输入的文本
2.7. 搜索及替换命令
/pattern
: 从光标开始处向文件尾搜索 pattern?pattern
: 从光标开始处向文件首搜索 patternn
: 在同一方向重复上一次搜索命令N
: 在反方向上重复上一次搜索命令- :
s/p1/p2/g
: 将当前行中所有 p1 均用 p2 替代 - :
n1,n2s/p1/p2/g
: 将第 n1 至 n2 行中所有 p1 均用 p2 替代 - :
g/p1/s//p2/g
: 将文件中所有 p1 均用 p2 替换
2.8. 选项设置
- all: 列出所有选项设置情况
- term: 设置终端类型
- ignorance: 在搜索中忽略大小写
- list: 显示制表位 (Ctrl+I) 和行尾标志($)
- number: 显示行号
- report: 显示由面向行的命令修改过的数目
- terse: 显示简短的警告信息
- warn: 在转到别的文件时若没保存当前文件则显示 NO write 信息
- nomagic: 允许在搜索模式中, 使用前面不带 “” 的特殊字符
- nowrapscan: 禁止 vi 在搜索到达文件两端时, 又从另一端开始
- mesg: 允许 vi 显示其他用户用 write 写到自己终端上的信息
2.9. 最后行方式命令
: n1,n2 co n3
: 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下: n1,n2 m n3
: 将 n1 行到 n2 行之间的内容移至到第 n3 行下- : n1,n2 d : 将 n1 行到 n2 行之间的内容删除
- : w : 保存当前文件
- : e filename: 打开文件 filename 进行编辑
- : x: 保存当前文件并退出
- : q: 退出 vi
- : q!: 不保存文件并退出 vi
- : !command: 执行 shell 命令 command
- : n1,n2 w!command: 将文件中 n1 行至 n2 行的内容作为 command 的输入并执行之, 若不指定 n1, n2, 则表示将整个文件内容作为 command 的输入
- : r!command: 将命令 command 的输出结果放到当前行
2.10. 寄存器操作
- "?nyy: 将当前行及其下 n 行的内容保存到寄存器? 中, 其中? 为一个字母, n 为一个数字
- "?nyw: 将当前行及其下 n 个字保存到寄存器? 中, 其中? 为一个字母, n 为一个数字
- "?nyl: 将当前行及其下 n 个字符保存到寄存器? 中, 其中? 为一个字母, n 为一个数字
- "?p: 取出寄存器? 中的内容并将其放到光标位置处。这里? 可以是一个字母, 也可以是一个数字
- ndd: 将当前行及其下共 n 行文本删除, 并将所删内容放到 1 号删除寄存器中。