vim进入时的默认模式,对于一个编辑器而言,大部分的操作是查看,默认是Normal模式很合理
光标移动
h 左移
l 右移
k 向上
j 向下
w 移动光标到下一个单词开头
e 移动光标到下一个单词结尾
b 移动光标到上一个单词开头
^ 移动光标到本行的最开头字符处
$ 移动光标到本行末尾
H 移动光标到屏幕首行
M 移动光标到屏幕中间行
L 移动光标到屏幕尾行
gg 移动到文档首行
G 移动到文档尾行
:n 移动到第n行
ctrl + f 向下翻页 page down
ctrl + b 向上翻页 page up
ctrl + d 向下翻半页
ctrl + u 向上翻半页
ctrl + e 向上翻一行
ctrl + y 向下翻一行
[[ 转到上一个位于第一列的 {
]] 转到下一个位于第一列的 }
{ 转到上一个空行
} 转到下一个空行
f[str] 行首调到str字符位置,; 下一个字符
'' 两个单引号 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查找到某个单词后, 再输入此命令则回到上次停留的位置
'. 一单一点 此命令相当好使, 它移动光标到上一次的修改行
`. 一倒引一点 此命令相当强大, 它移动光标到上一次的修改点
复制、粘贴、删除、撤销、重复操作 ** y 表示拷贝, d 表示删除, p 表示粘贴,u U表示撤销**
yy 表示拷贝光标所在行
+y 复制到系统粘贴板,可以跨文件粘贴
yw 表示拷贝从当前光标到光标所在单词结尾的内容
y0 表示拷贝从当前光标到光标所在行首的内容
y$ 表示拷贝从当前光标到光标所在行尾的内容
p 粘贴到光标下一行
P 粘贴到光标上一行
dd 表示删除光标所在行
D 表示删除从当前光标到光标所在行尾的内容
X 删除光标之前一个字符
x 删除光标之后的一个字符
xp 交换光标与其之后的字符位置
ddp 交换光标所在行与下一行位置
J 合并光标行和下一行
u 撤销到上一步操作
U 行撤销
. 重复上一步操作
特殊编辑
ga 显示光标所指字符的encoding 编码,比如ASCII码guw 光标所在单词光标后的字符小写gUw 光标所在单词光标后的字符大写查找
/str 表示向下查找?str 表示向上查找n 查找到之后,向下一个匹配处N 查找到之后,向上一个匹配处替换
:[addr]s/源字符串/目的字符串/[option]:%s/源字符串/目的字符串/g 全局替换[addr] 表示检索范围,省略时表示当前行 “1,20” :表示从第1行到20行;“%” :表示整个文件,同“1,$”;“. ,$” :从当前行到文件尾; s : 表示替换操作[option] : 表示操作类型 g 表示全局替换;c 表示进行确认p 表示替代结果逐行显示(Ctrl + L恢复屏幕);省略option时仅对每行第一个匹配串进行替换;如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义 如 \t可以配合复制、删除操作
以上命令均是在VIM的一般模式(Normal)下使用的,其中*代表一个数字和单词字符,正则表达式规则是:[0-9a-zA-Z]
:help recording 查看宏帮助
在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行
号定位. 如:5yy[y5y] 表示拷贝光标以下 5 行5dd[d5d] 表示删除光标以下 5 行:12,24y 表示拷贝第12行到第24行之间的内容:12,y 表示拷贝第12行到光标所在行之间的内容:,24y 表示拷贝光标所在行到第24行之间的内容. 删除类似5fx 表示查找光标后第 5 个 x 字符5w(e) 移动光标到下五个单词的头部(尾部).