vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器。Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能。
工作模式
Vim编辑器共有两种工作模式,一个是插入模式,一个是命令模式。
- 插入模式
用来编写文本内容。在命令模式下, 按字母i键
即可进入到插入模式。
- 命令模式
是用来编辑文本,如上下翻页等,复制粘贴,跳转到指定行等操作。在插入模式下,按Esc键
,再按冒号:键
即可进入命令模式。
当前编辑的顶部或者底部会显示vim处于何种模式下。如:mode:COMMAND!
所有命令都必须在英文输入法下面输入
命令对大小写敏感
打开/保存/退出
- 进入
1 2 3 | //filename,若已经存在则打开已存在的文件,不存在则新建一个文件 //默认开始进入的模式是命令模式 $ vi filename |
- 保存/退出
进入命令模式,
1 2 3 4 5 6 7 | :wq 保存修改并退出 ZZ 快捷键,保存修改并退出(前面没有冒号) :q! 不保存退出 :wq! 强行保存退出,(文件所属者科忽略文件的制度属性) :w 保存不退出 :wqa 保存所有文件 :w new_filename 另存为指定文件 |
编辑
- 插入
1 2 3 4 5 6 | a 在光标后附加文本 A 在本行行末附加文本 i 在光标前插入文本 I 在本行开始插入文本 o (字母) 在光标下插入新行 O (字母) 在光标上插入新行 |
- 剪切复制粘贴
1 2 3 4 5 6 7 8 | yy、Y 复制当前行 nyy,nY 复制当前行一下n行(包括当前行) p、P 粘贴在当前光标所在行下或行上 ddp 交换当前行和其下一行 dd 剪切当前行 ndd 剪切当前行一下n行(包括当前行) :1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。 :1, 10 m 20 将第1-10行移动到第20行之后。 |
- 删除
1 2 3 4 5 6 7 8 9 10 | x 删除后面的字符 X 删除前一个字符 删除3个字符就是3x dd 删除一行 D 删除到行尾 dw 删除一个单词(光标后部分) d4w 删除4个单词 d$ 删除当前光标到行尾 d^ 删除当前光标至行首 J 删除换行符,使下一行并上来。 nJ 连接后面的n行 |
- 撤销
1 2 3 4 | u 取消上一步操作(最多连续取消500次) Ctrl+r 恢复上一步被撤销的操作 U 撤销当前一行的操作 :e! 返回上次保存后的状态 |
定位
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | h、方向左键 左移一个字符 j、 方向下键 下移一行 k、方向上键 上移一行 l、 方向右键 右移一个字符 $ 移至行尾 0 移至行首 ^(尖角号) 移至行首 H 移至屏幕上端 M 移至屏幕中央 L 移至屏幕下端 ( (左小括号)移动到上一个句子首 ) (右小括号)移动到下一个句子首 { (左大括号)移动到上一个段落首 } (右大括号)移动到下一个段落首 '' (连续输入法两个单引号)光标跳转到上次停靠处 W 移动到下一个单词的首位置 w 将光标右移一个单词的首位置。光标停留在下一个单词的首位置 e 移动到单词末尾。 E 和小写用法一样,只是以空格字符作为字的分隔符 b 移动到单词的头部 B 和小写用法一样,只是以空格字符作为字的分隔符 //w W e E b B 都可以与n结合使用, n为数量单位, 如nw nW ne nE nb nB :set nu 设置行号为显示 :set nonu 设置行号为隐藏 :set nu! 设置行号为显示/隐藏 gg 光标移动到第一行 G 光标移动到最后一行 nG 光标跳转到指定行 :n 光标跳转到指定行 Ctrl + e 向下滚动一行 Ctrl + y 向上滚动一行 Ctrl + d 向下滚动半屏 Ctrl + u 向上滚动半屏 Ctrl + f 向下滚动一屏 Ctrl + b 向上滚动一屏 zz:将当前行滚动于屏幕中间,方便查看上下文 zt置顶,zb置尾 |
查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //在command模式下,通过按 f 或者 F 快速定位内容。(不需要输入冒号) f 向后查找 F 向前查找 //可以结合数字来进行多次查找,如按下 3fq ,就会放下查找第三个q //如果不加数字,如fq,就会向后查找第一个q * 向后查找, 查找与光标下的词组相同的词组。 # 向前查找, 查找与光标下的词组相同的词组。 //举例:假设光标停留在第一个if处 //if we are god if you are human //我们在command模式下,输入 * ,光标就会跳到“if you are human”的那个if上去 //查找string,回车后,按n键可以跳到下一个,N上一个, //?另外按/键后,按上下键可以找到以前查找的记录,同样的 :也有记录 /string //同上,默认向上查找 ?string :set ignorecase 大小写无关 :set noignorecase 大小写敏感 :set hlsearch 高亮显示查找结果 :set nohlsearch 取消高亮 :nohlsearch 去掉当前显示的高亮(一次性) |
替换
1 2 3 4 5 6 7 | r (小写)替换光标所在处一个字符 R (大写)开始替换,直到按ESC键退出替换, cc (小写)取代光标所在整行 S (大写)与ss(小写)效果相同 C (大写)取代到行尾,包括光标处字符 c0 (小写,数字0)取代到行首,不包括光标处字符 c^ (小写)与c0(小写,数字0)效果相同 |