Vim是解决文本快速处理(尤其是服务器端)的神器,本文简单总结下常用的命令。
Vim中包括如下常见模式“ 普通模式:Vim启动后的默认模式,可用于光标的移动、文本的删除等。 插入模式:向文本中插入字符。 可视化模式:用于区块选择,可通过v一类的命令进入 命令行模式: 在命令行内输入命令。在其它模式下,通过ESC 进入命令行模式。
:set number 显示各行行号, set nonumber取消该功能 :set list 显示制表符和行末, set nolist取消该功能 :set fileencoding 查看当前文件编码 :e ++enc=gb18003 强制采用某种编码重新打开本文档(临时的)
:w 保存文件但不退出vim :w file 将修改保存到file,但不退出vi :wa或ZZ或:x 保存文件并退出vi "q! 不保存文件,退出vi :e! 放弃所有修改,并从上次保存文件开始再编辑
通过光标移动选择指定的字符区间/行/区块,是实现其它复杂操作的基础。
-> 或l向右逐字符移动 <- 或h 左箭头,向左逐字符移动 w 下一个单词的开头, 可实现跨行 e 下一个单词的结尾,可实现跨行 b 上一个单词的开头, 可实现跨行 ^ 行首(第一个非空字符) $ 行末(最后一个非空字符) 0或|:当前行的第一列
向上箭头或k 向上一行 向下箭头或j 向下一行 数字+向上/下箭头 向上/下移动数字行 +或Enter键 下一行的第一个非空字符 - 上一行的的第一个非空字符 H: 屏幕第一行 M: 屏幕中建行 L: 屏幕最后一行 ( : 句子的开头 ): 句子的结尾 {: 段落的开头 }: 段落的结尾 ctrl+f 向前翻页 ctrl+b 向下翻页 gg 第一行 G 最后一行 数字+% 文档的 数字%处
:set ic 查找时忽略大小写 :set noic 查找时对大小写敏感
/text 命令行模式下输入,从文本从头开始,向下寻找目标字符串,最终定位到字符串所在行第一个非空字符 ?text 命令行模式下输入,从文本从尾开始,向上寻找目标字符串,最终定位到字符串所在行第一个非空字符 n: 配合前面的/text和?text使用,向同一方向寻找下一个。 N: 配合前面的/text和?text使用,向相反方向寻找下一个。
查找功能还支持正则表达式,如^$选择空行。
v 字符可视化模式,文本选择以字符为单位,跨行选择时前序行会被全部选中。 V 行可视化模式,文本选择以行为单位,直接选择所在所在行, ctrl+v 块可视化模式,文本选择以矩形区块为单位,通过指定矩形左上角和右下角点,定义所选区块,特别适用于选择表格列等场景。
i 在光标所在位置处进入插入模式(效果类似于左侧插入) I 在光标所在行行首进入插入模式 a 在光标所在位置右边进入插入模式(效果类似于右侧插入) A 在光标所在行行尾进入插入模式 o 在光标所在行下,插入新的一行进入插入模式 O 在光标所在行上,插入新的一行进入插入模式 s 删除光标所在字符,并进入插入模式 S 删除光标所在行,并进入插入模式
yy 将当前行的内容复制到临时缓冲区 nyy 将第n行的内容复制到临时缓冲区 x 剪切
p 将临时缓冲区内的文本粘贴到光标后 P 将临时缓冲区内的文本粘贴到光标前
c: 可视化模式选择高亮指定文本后,使用c即可删除指定文本,同时进入插入模式 rchar: 用 char 替换当前字符(注意是单个字符) R text ESC : 用 text 替换当前字符直到按下 Esc 键
d: 删除,注意删除后的文本是在剪切板里的,所以仍可将其进行p操作 db: 删除光标前面的word dw: 删至下一个字的开头 d^: 删除光标至行首 dw: 删除光标至行末 dd: 删除一行 dG: 从当前行一直删至文件结束 数字+dd: 删除光标起的若干行 :m,nd: 删除第m-n行,其实这是进入命令行模式后的删除,此处的m和n可以采用数字表示绝对行号,也可以采用+m表示从本行开始往下的第m行(+0表示本行),-m同理
> 增加光标区域所在行的缩进 < 减少光标区域所在行的缩进
u 撤销上一步操作 U 撤销当前行的所有修改 ctrl+r 恢复上一步被撤销的操作
:r file 读入文件 file 内容,并插在当前行后 :nr file 读入文件 file 内容,并插在第 n 行后
:ranges/oldtext/newtext/g 全文范围内,用newtext 替换 oldtext :m,ns/oldtext/newtext 第m-n行范围内,用newtext 替换 oldtext,这里的m和n除了用绝对行号,还可以使用相对行号 :g/text1/s/text2/text3 全文范围内,查找包含 text1 的行,用 text3 替换 text2, :g/text/command 上一条命令的通用版本,在所有包含 text 的行运行 command 所表示的命令,这里的g可以改为指定行区间
:v/text/command 上一条命令的反向命令,即所有不包含 text 的行运行 command 所表示的命令,这里的g可以改为指定行区间