1 辅助记忆
- 部分小写代表命令未完待续,大写代表命令完成时。
- 另有部分小写代表当前位置之后,大写代表当前位置之前。
- 次数在具体操作之前
- 位置在具体操作之后
2 移动
2.1 字符移动
k | 上移 |
h | 左移 |
l | 右移 |
j | 下移 |
在命令前加上数字代表命令执行次数,如:5k,表示上移5行
2.2 单词移动
W w | 移动到下一个单词开头 |
E e | 移动到下一个单词结尾 |
B b | 倒退到上一个单词开头 |
* 和 # | 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个) |
若为大写则忽略标点符号直接到下一空格,在命令前加上数字代表执行次数,如:2w,表示往下移动2个单词
2.3 行间移动
0 | 移动到行首 |
^ | 移动到行首非空字符 |
$ | 移动到行末 |
+ | 移动到下一行开头 |
– | 移动到上一行开头 |
f或F | 移动到下一个字符处,f向前,F向后,例:3fa代表移动到前面第三个a处 |
t或T | 移动到下一个字符前,t向前,T向后 |
2.4 滚屏
Ctrl+f | 往前滚动一整屏 |
Ctrl+b | 往后滚动一整屏 |
Ctrl+d | 往前滚动半屏 |
Ctrl+u | 往后滚动半屏 |
Ctrl+e | 往后滚动一行 |
Ctrl+y | 往前滚动一行 |
z<Enter> | 将光标所在行移动到屏幕顶端 |
z. (zz) | 将光标所在行移动到屏幕中间 |
z- | 将光标所在行移动到屏幕低端 |
2.5 当前屏移动
H | 移动到屏幕顶端的行 |
M | 移动到屏幕中央的行 |
L | 移动到屏幕底端的行 |
nH | 移动到屏幕顶端往下的第n行 |
nL | 移动到屏幕顶端往上的第n行 |
2.6 行间移动
nG或ngg或:n | 转至第n行 |
G | 转至文本末尾 |
gg | 移至文本开头 |
2.7 文本块移动
( | 移动到当前句子开头 |
) | 移动到下一个句子开头 |
{ | 移动到当前这一段开头 |
} | 移动到下一段开头 |
[ [ | 移动到当前这一节的开头 |
] ] | 移动到下一节的开头 |
% | 匹配括号移动 |
2.8 标记移动
ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
2.9 历史移动
Ctrl+O | 返回光标之前所在位置 |
Ctrl+i | 撤销返回 |
3 插入
i | 在光标之前插入 |
a | 在光标之后追加 |
A | 在一行的结尾处追加 |
I | 在一行的开头处插入 |
o | 在光标所在位置的下一行打开新行插入 |
O | 在光标所在位置的上一行打开新行插入 |
10I*<Esc>代表输入十个*,5o###<Esc>代表输入5行###。
4 编辑
4.1 删除
4.1.1 字符删除
x | 删除光标所在处字符 |
X | 删除光标所在前字符 |
4.1.2 单词删除
dw | 删除到下一个单词开头 |
de | 删除到本单词末尾 |
dE | 删除到本单词末尾包括标点在内 |
db | 删除到前一个单词 |
dB | 删除到前一个单词包括标点在内 |
4.1.3 行删除
dd | 删除一整行 |
D或d$ | 删除光标位置到本行结尾 |
d0 | 删除光标位置到本行开头 |
4.2 修改
4.2.1 字符替换
r | 单个字符替换 |
R | 按esc前不断输入则连续替换 |
~ | 更改大小写 |
4.2.2 单词剪切
cw | 从光标处剪切到单词结尾 |
cb | 从光标处剪切到单词开头 |
4.2.3 行剪切
c$或C | 从光标剪切到本行末尾 |
c0 | 从光标剪切到本行开头 |
cc或S | 剪切整行 |
s | 删除光标所在位置的字符,然后插入 |
4.3 复制
ynl | 向右复制n个字符 |
ynh | 向左复制n个字符 |
ynw | 向前复制n个单词 |
ynb | 向后复制n个单词 |
y0 | 复制到行首 |
y$ | 复制到行末 |
yy | 复制整行 |
yH | 从当前行复制到屏幕顶端 |
yL | 从当前行复制到屏幕低端 |
p或P | 粘贴,p为往后粘贴,P为往前粘贴 |
4.4 其他技巧
>> | 选中区域右缩进 |
<< | 选中区域左缩进 |
= | 选中区域对齐缩进 |
=% | 对齐缩进括号内语句块 |
G=gg | 全文缩进 |
/pattern ?pattern | 搜索pattern /往前搜索,?往后搜索(如果有多个匹配,n到下一个,N到上一个) |
.(小数点) | 可以重复上一次的命令 |
4.4.1 大小写变换
gu | 变小写命令可组合单元 |
gU | 变大写命令可组合单元 |
~ | (单个字符大写转小写,小写转大写) |
guw | (光标到词尾,大写转换成小写) |
gUw | (光标到词尾,小写转换成大写) |
guu | (光标到行尾,大写转换成小写) |
gUU | (光标到行尾,小写转换成大写) |
guG | (光标到文件未,大写转换成小写) |
gUG | (光标到文件未,小写转换成大写) |
4.4.2 区域操作
<start position><command><end position>
start position与end position可以为:0 ^ $ /pattern
command可以为d (删除 ) v (可视化的选择) gU (变大写) gu (变小写)等等,例如:ye代表从当前位置拷贝到本单词的最后一个字符,y2/foo代表拷贝2个 “foo” 之间的字符串。
4.4.3 区域选择
<action>a<object> 或 <action>i<object>
- action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
- object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:”、 ‘、 )、 }、 ]。
假设你有一个字符串 (map (+) (“foo”)).而光标键在第一个 o 的位置。
vi" → 会选择 foo. va" → 会选择 "foo". vi) → 会选择 "foo". va) → 会选择("foo"). v2i) → 会选择 map (+) ("foo") v2a) → 会选择 (map (+) ("foo"))
4.5 宏录制
- qa 把你的操作记录在寄存器 a。
- @a 会replay被录制的宏。
- @@ 用来replay最新录制的宏。
示例: 在一个只有一行且这一行只有“1”的文本中,键入如下命令: qaYp<C-a>q→
qa 开始录制 Yp 复制行.
<C-a> 增加1.(SublimeText中为C-up)
q 停止录制. @a → 在1下面写下 2 @@ → 在2 正面写下3 现在做 100@@ 会创建新的100行,并把数据增加到 103.
4.6 :ex命令模式
ex命令由行地址(行号)和命令组成,它们都以回车键结束。
4.6.1 常用编辑命令
4.6.2 定义行的范围
例如: :11, 15 m 23(把11~15行移动到23行下面)
- 行地址符
.(点) 代表当前行 $ 代表文件的最后一行 % 代表文件的每一行,等同于1, $的组合 例如:
: . , $ d 删除从当前行到文件末尾 :20, . m $ 把20~当前行的文本移动到文件末尾 :% d 删除文件中的所有行 :% t $ 复制所有行并把它们粘贴到文件的尾部(成为连续的副本) - 正则搜索定位
:/pattern/ d 删除下一个包行模式pattern的行 :/pattern/+ d 删除下一个包行模式pattern的行的下一行(也i可使用+1来代替) :/pattern1/,/pattern2/ d 删除第一个包行pattern1的行与第一个包行pattern2的行之间的所有行 :. , pattern m 23 从当前行到第一个包行pattern的行之间的文本移动到23行后面。 - 重定义当前行
将逗号“,”改为“;”即: :100, +5 p (100, 6p) -> :100 ; +5 p (100, 105p)
4.6.3 组合命令
竖直线(|)是命令的分割符,它允许用户把多个命令组合在同一个ex提示符下。 同时使用|时,要注意制定的行地址。如果一个命令影响到文件中行的顺序,那么下一个命令将使用新的行位置进行工作。例如:
:1,3 d | s/thier/their/ 把第1行到第3行删除,然后在当前行(该行是调用ex提示符以前的第4行)进行替换
:1,5 m 10 | g/pattern/nu 把第1行到第5行移动到第10行后面,然后显示所有包含模式pattern的行。
4.6.4 g全局操作模式
:g/{pattern}/[cmd] 其中g后面一个字符会被自动当作分隔符
表示对指定范围内的满足{pattern}的行进行[cmd]操作 例如:
#删除所有空行和空白行 :g/^ *$/d
4.6.5 s替换
:[addr]s/源字符串/目的字符串/[option]
+ [addr] : 表示检索范围,省略时表示当前行。 - 5 :表示第5行 - 1,20 :表示从第1行到20行; - % :表示整个文件,同1,$; - . ,$ :从当前行到文件尾; - 'a :标记a所在的行(之前要使用ma做过标记); - .+1 :当前光标所在行的下面一行。 - ?chapter? :从当前位置向上搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式。 - /chapter/ :从当前位置向下搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式。 + [option] : 表示操作类型,省略时表示仅对每行第一个匹配进行替换 - g :表示全局替换; - c :表示进行确认; - p :表示替代结果逐行显示(Ctrl + L恢复屏幕);
例如:
#将多个空格换成一个空格 :%s/ */ /g
4.6.6 norm命令
在:后指出后面是normal模式的指令。 例:
:%norm jdd #删除偶数行