0
:移动到文本开头
$
:移动到文本结尾
+
:光标下一行开头
-
:光标所在行开头
w
:移动到单词的结尾(包含空格字符串),如 cursort**,** delete lines**,** iinsert ccharacters**,**
W
:向前移动到单词的开头(不计标点符号),ccursort, delete lines, insert characters,
b
:向衙移动一个单词
B
:向后移动一个单词(不计标点符号)
G
:跳转到指定的行
e
:单词的结算处不包含标点
E
:字符尾部包含标点
a
:Append
c
:Change
d
:Delete
p
:Put
y
:Yank
x
:delete a single character
r
:replace a single character
dd
:apply the command to the entire line
P
:do the operation above the current line, instead of below it
i
:在光标前插入
a
:在光标后插入
c
:Change Text
cw
: To the end of a word
c2b
:Back two words
c$
:To the end of the line
c0
:To the beginning of the line
cc
:To replace the entire current line
C
:与c$
功能一样
r
:替换单个字符
R
:simply enters overstrike mode. 一直替换直到你输入Esc键
s
:delete the text and enters input model 删除并进入插入模式
S
:删除整行并进入插入模式,与cc
等效
~
:更改大小写,Provide a numeric prefix to change the case of multiple characters.
d
:加文本对象,表示删除
dw
:删除一个单词,从光标所在位置开始删除;总是会删除两个单词之间的空格 ;删除单词最多但不包含标点字符
dW
:删除光标下一个单词,直到下一个空格字符
dd
:删除整行
D
:从光标处删除到结尾与d$
相同
de
:删除一个单词,但会保留两个单词之间的空格;仅删除到单词的结尾
dE
:delete the end of a word, including punctuation. 删除到单词结尾,但包含标点符号
db
:向后删除一个单词
d$
:从光标处删除到结尾
d0
:从光标处删除到开头
x
:删除光标当前的字符
X
:删除光标当前的前一个字符
u
:回复上一次操作
U
:回复到原始状态
"3p
:将3号寄存器的内置粘贴出来 ,单词或行的一部分不会保存在寄存器中,或者使用"ayw
将一个单词复制到寄存器a中
p
:如果删除不是一行内容的话,会在光标处进行粘贴;如果删除的为一行内容则在光标当前行的下一行进行粘贴;非整行-光标之后,整行-光标下一行
P
:如果删除的不是整行内容时,会在光标处前进行粘贴;如果删除的是整行内容则在当前行的前上一行进行粘贴;非整行-光标之后,整行-光标上一行
xp
:交换两个字母的位置
y
:命令也会将内容复制到删除寄存器(deletion register)
yy
:复制当前行
Y
:复制当前行与yy
相同
y0
:从光标处开始复制到开头
y^
:从光标处开始复制到行开头(不包含空格)
y$
:从光标处到结尾进行复制
4yy
:从光标处开始向下复制4行
.
:可以重复上一次命令
u
:撤消上一次编辑,可以不在当前行
U
:撤消当前行上的所有操作,如果再按一次,则会恢复到第一次按U
的状态
Ctrl+r
:撤消撤消操作,也就是回到u
上一次状态
a
:在光标后插入
A
:在文本结尾处追加
o
:在光标的下一行进行插入
O
:在光标的上一行进行插入
s
:删除当前字符,并进入插入模式
S
:删除行并替换文本,进入插入模式
R
:进行替换模式,进行编辑,从光标处开始,进行覆盖
A或a
:append
I或i
:Insert
O或o
:open
S或s
:substitute
R或r
:replace
50i*Esc
:在光标前插入50个*字符
25a*-Esc
:在光标后插入25个*-字符
2r&&
:将当前字符以及后面一个字符替换为&字符
2S
:删除两进入编辑模板 与2jc
命令相同
2s
:删除指定字符然后进入插入模式
ea
:跳到一个单词结算然后进入插入模式
J
:将光前行与下一行合并成一行
3J
:将3行合并成一行
ctrl+F
:向下翻一页
ctrl+B
:向上翻一页
ctrl+D
:向下翻半页(Down)
ctrl+B
:向上翻半页(Up)
ctrl+E
:一行一行向下翻页
ctrl+Y
:一行行向上翻页
z Enter或 z+
:将当前滚动到屏幕的顶部
z.
:将当前行滚动到屏幕的中间
zz
:将当前行滚动到屏幕的蹭
z-
:将当前行滚动到屏幕的底部
20z Enter
:20行所在位置滚动到屏幕的顶部
H
:光标移动到当前屏幕顶部,不会滚动
L
:光标移动到当前屏幕询问,不会滚动
**scrolloff:**如果设置为非值,则回顶部空出几行
ctrl+L
:重新绘制屏幕
H
:移动到屏幕首先的第一个字符
M
:移动到屏幕中间行第一个字符上
L
:移动到屏幕最后一行的第一个字符上
2H
:移动到屏幕首行下第2行的第一个字符
2L
:移动到离屏幕最后行的前两行的第一个字符串
j
:向下移动一行
k
:向上移动一行
ENTERY
:移动到下行第一个不为空的字符串上,忽略空格与Tab
+
:移动到下一行第一个不为空的字符串上与Enter
一样,忽略空格与Tab
-
:移动到前一行的第一个不为空的字符串,忽略空格与Tab
^
:移动到当前行第一个不为空的字符上
n |
:移动n个字符在当前行上,如果n大于行的字符串则移动到最后
0
:移动到当前行开头,不忽略空白字符
文本块包含:单词,句子,段落,章节(sections)
句子:根据标点**?,!,.** vi 后面跟至少2个空格字符为判断结尾。vim终止标点后一个空格字符即为句子结尾
段落:则是根据两块文本之间是否有空白行来判断
数字组合,编辑组合,复制组件
e
:移动到以标点或空格分隔的单词结尾处。也就是说会移到标点或空格前
E
:移动到以空格分隔单词结尾处,空格前一个字符串
(
:移动到当前行句子的开头处
)
:移动到下一句子的开头处
{
:移动到当前段落的开头处
}
:移动到下一个段落的开头处
[[
:移动到当前章节的开头处
]]
:移动到下一个章节的开头处
3)
:向后移动3个句子
d)
:删除一个句子
/ pattern ENTER
:从前向后找,在当前文件中进行搜索,如果能搜索到光标会停止在第一次出现的位置
? pattern ENTER
:从后往前找,
**最后的搜索模式在全局是
n
:向同一个方向重复搜索
N
:向相反的方向重复搜索
/ ENTER
:向前重复搜索
? ENTER
:向后重复搜索
通过搜索改变
d/move ENTER
:从光标处删除到搜索的位置
f x
: find 光标移动到找到的x字符上,从前向后找
F x
:光标移动互找到的x字符串,从后向前找
t x
:up to 光标移动到找到的字符x的前面一个字符上,从前向后找
T x
:光标移动到找到x字符后一个字符, 从后向前找前,
;
:同一个方向重复搜索
,
:反方向重复搜索
dfx
:从光标开始的位置删除到x字符位置
ct.
:从光标处删除到.的前一个字符,并进入插入模式
G
Go To ,将光标移动到文件最后一行
22G
:移动到22行处
``:回到原始的位置,最后一次执行G的位置
''
:回到上次标记的位置
Ctrl+G
:展示当前行,非移动命令
更多的编辑命令
Change | Delete | Copy | From cursor to.. |
---|---|---|---|
cH | dH | yH | Top of screen |
cL | dL | yL | Bottom of screen |
c+ | d+ | y+ | Next Line |
c5| | d5| | y5| | Column 5 of curent line |
2c) | 2d) | 2y) | Second sentence following |
c{ | d{ | y{ | Previous paragraph |
c/ pattern | d /pattern | y / pattern | Pattern |
cn | dn | yn | Next Pattern |
cG | dG | yG | End of file |
c13G | d13G | y13G | Line number 13 |
两个通用模式
text object:移动命令
vim -c n file
:打开一个文件,光标在指定n行处
vim -c / pattern file
:打开文件,光标在第一次pattern发生的位置, 如果wrapscan
选项已经禁用则无法使用
vim + file
:打开文件,光标在最后一行
vim -R file
:只读模式打开一个文件
view file
:使用只读命令打开一个文件
ex -r fileName
:恢复某个文件的缓存
vi -r fileName
:恢复某个文件的缓存
:pre
:将当前的编辑缓冲进行保留,也就是会写到.swp文件中
部分行的小删除不会保存到编号寄存器
"* :对应粘贴寄存器
"":默认寄存器
"0-9:0-9号寄存器
"a-z:a-z号寄存器
"2p
:将2号寄存器的内容粘贴出来
"1pu.u.u.
:可以从1号寄存器开始获取每个寄存器的内容
"dyy
:将当前行复制到d寄存器
"a7yy
:将当前以下7行复制到a寄存器
"dP
:将d号寄存器中的内存复制到当前行的上一行位置
"ap
:将a号寄存器中的内容复制到当前行的下一行位置
"zd)"
:删除从光标处到句子结尾,然后存放到z寄存器
"Zy)"
:将当前光标到句子结尾,追加到z寄存器
m x
:使用x标记当前位置,原始的vi只支持小写字母,vim支持大小写字母
'x
:将光标移动互x标记位置的所在行的第一个字符
``x`:将光标移动到标记的位置x处
''
:返回到前一个标记或上下文的行首。移动到标记的行处
``:移动后返回到前一个标记或上下文的确切位置。移动到标记处
d`a:从光标处删除到指定标记点位置
d'a
:从光标处删除到指定标记点所在行,所在行也会删除
可以通过两次标记来删除内容
:
:进入Ex编辑器模式
:3,18d
:删除第3行到18行,包括第3行和第18行
:160,224m23
:将160行到224行的内容移动到23行
:23,29co100
:将23-29行内容复制到100行后
:set nu
:设置显示行号
:set nonu
:设置不显示行号
:set !nu
:设置不显示行号 vim
:1,10#
:显示1到10行的内容在下方
:=
:显示总行数
:.=
:显示当前光标所在行的行数
:/pattern/=
:显示从光标所在位置开始向下搜索第一次出现pattern的行号
.
:表示 当前行
$
:表示文件最后一行
0
:表示文档的顶部,相当于1-
%
:表示文件中的每一行
:.,$d
:从当前行删除到最后一行
:20,.m$
:将20行到当前行的内容移动到最后一行
:%d
:删除文件中的所有行
:%t$
:复制所有的行到文件最后(连续复制)
可以使用+
,-
运算符来操作
:.,.+20d
:删除当前行以下20行
:226,$m.-2
:将226行到最后一行移动到当前行的上2行
:.,+20#
:显示当前行到下20行的内容
:-,+t0
:将当前行的上一行与下一行,一共3行复制到顶部
可以省略.
来操作;直接使用+
,-
进行相对定位操作;当+
,-
没有数字时,默认为1; 也可以使用++
或--
来移动2行
:/pattern/d
:从光标下一行开始进行匹配,删除匹配到pattern的行
:/pattern/+d
:从光标一下开始进行匹配,删除匹配到pattern行的下一行
:/pattern1/,/pattern2/d
:删除从pattern1匹配的行到pattern2的行
:.,/pattern/m23
:将当前行到匹配到pattern的行移动到第23行
:?pattern?d
:从光标上一行开始进行匹配,删除匹配到pattern的行
:/pattern1/,/pattern2/t10
:从光标下一行开始,从匹配到pattern1的行到pattern2的行复制到第10行
d/pattern
:删除从光标位置到第一次匹配到pattern的位置中的字符
:.,/while/d
:删除从光标处到第一次匹配到while的行
:100,+5p
:执行这个命令时会报错,vim会理解为从100行,到光标下5行的位置进行打印,如果光标所在行+5小于100则会报错,如果想实现100行以及100以下5行需要进行打印,则需要执行:100;+5p
,其中;
将重新定义位置
:100;+5p
:将第100行到100行以下5行进行打印
:/pattern/;+10p
:打印匹配到的pattern下10行进行打印
g:显示包含模式的行。
g!:表示不包含模式的行,与v
相同
:g/pattern
:显示文件中最后一次出现pattern的位置
:g/pattern/p
:显示所有匹配到位置
:g/pattern/nu
:带行号显示所有匹配的位置的行号
:g!/pattern
:显示 没有匹配pattern的内容
:60,120g/pattern/p
:显示60到120行所有匹配到pattern的行
:1,3d | s/pattern1/pattern2/
:删除1到3行,然后对第4行的进行pattern1与pattern2的替换
:1,5m10| g/pattern1
:将第1到5行移动到第10行,然后显示匹配到的pattern1所在行的内容
ZZ
:保存并退出文件;将缓冲区写入到文件,但不退出
:w
:只保存文件
:wq
:保存并退出文件,即使文件没有更新,写入也是无条件发生的。这会更新文件的修改时间.
:x
:写入文件并退出,只有当文件修改时,才会被修改。
:w!
:强制写入
:q!
:强制退出,还原原来的文件
:230,$w newfile
:将230到文件结尾保存到新文件中
:.,600w newfile
:将当前行到600行保存到新文件中
:240, $w >> file
:将240行到文件结尾的内容追加到文件中
:r filename
:将一个文件内的内容插入到光标所在位置的下一行。
:10r filename
:将filename中的内容插入到第10行
:$r filename
:将文件内容插入到文件最后一行
:0r filename
:将文件内容插入到文件开头
/pattern/r filename
:将文件插入到pattern匹配的位置
vim file1 fiel2
:vim打开多个文件
:n
:下一个文件
:args
:显示 参数列表,用括号括住的是文件名
:rewind
:可以将当前文件设置为第一个文件名
:prve
:返回上一个文件
:last
:下一个文件
:e filename
:打开其它文件,如果文件存在,如果不存在则会以单词为内容新建立一个文件
:%
:当前文件名
:e#
:可以回到上一次编辑的文件
:e! #
:放弃当前编辑的内容,返回到上一次文件中
:e!
:放弃当前编辑的内容,返回上一次保存的节点
: w %.new
:将当前文件保存为另与文件相同的.new文件
ctrl+^
:可以快速切换到上一个文件中,相当于:e #
两种方式,一种在command model下,一种是在ex command model下来操作
方式一:
"a4yy
:将当前行以下4行复制到a寄存中
e filename
: 打开一个新的文件
"ap
:将a寄存器的内容复制到 filename中
方式二:
:23,24ya
a :将23到24行内容复制到a寄存中
pu a
:将a寄存中的内容复制出来
:s/old/new/
:将old替换成new,只替换old第一次出现的位置
:s/old/new/g
:将全文中的old替换成new
:50,100s/old/new/g
:将第50到100行的内容进行替换
:1,$s/old/new/g
:从第1行到文本结尾进行内容的替换
%s/old/new/g
:全文替换与1,$
相同
:1,30s/his/the/gc
:每一次替换都需要进行确认