移动
-
h
、j
、k
、l
对应左、下、上、右。 -
0
移动到行首,$
移动到行尾。 -
w
向前移动一个单词,W
向前移动一个单词但不包括标点符号。 -
b
按单词后移,B
按单词后移但不包括标点符号。 -
^F
向前滚动一屏,^B
向后滚动一屏,^D
向前滚动半屏(下),^U
向后滚动半屏(上)。 -
+
到下一行的首字符,-
到上一行的首字符。 -
z回车
把当前行移动到屏幕顶部并滚动,z.
把当前行移动到屏幕中央并滚动,z-
把当前行移动到屏幕底部并滚动。 -
^L
刷新屏幕。 -
H
移动到起始点——屏幕首行,M
移动到屏幕的中间行,L
移动到屏幕的末行,nH
移动到屏幕首行下面的地n行。 -
^
移动到当前行的第一个非空格的字符。 -
n|
移动到当前行的第n列。 -
(
移动到当前句子的开始,)
移动到下一句子的开始,{
移动到当前段落的开始,}
移动到下一段落的开始。 -
[[
移动到当前节的开始,]]
移动到下一节的开始。 -
n
同向重复搜索,N
反向重复搜索,/回车
向前重复搜索,?回车
向后重复搜索。 -
fx
在行内搜索(光标移动到)x的下一个实例,Fx
在行内搜索(光标移动到)x的上一个实例,tx
在行内搜索(光标移动到)x的下一个实例前面的字符,Tx
在行内搜索(光标移动到)x的上一个实例后面的字符,;
同方向重复前面的搜索命令,,
反方向重复前面的搜索命令。 -
nG
移动到文件的第n行,G
移动到文件的尾部,^G
显示当前行的位置,``
返回到以前的标记或上下文,‘’
返回到包含以前标记的行的开始。 - 组合命令只要满足通用命令格式
(数字)(命令)(文本目标)
即可 -
'x
(单引号)移动光标到x所标记的行的首字符。 -
`x
(反引号)移动光标到x锁标记的字符。
修改文本
-
i
在光标前插入文本,I
在行首长入文本;a
在光标后追加文本,A
在行尾追加文本。 -
o
在光标所在行的下面新建一行,等待输入新文本,O
在光标所在行的上面新建一行,等待输入新文本。 -
c
替换选中区域文本,一般与移动命令组合,例如组合cw
到单词的尾部,c2b
后退两个单词,c$
到行尾,c0
倒行首。cc
专门用来替换整个当前行。C
用来替换从当前光标位置到行尾的所有字符(c$
)。 -
r
用以替换单个字符,s
类似于c
但只替换单个字符,使用计数也可以替换多个字符,R
使用新文本覆盖现有文本。 -
~
用于大小写转换。 -
d
命令用于删除,也可以组合移动命令,例如dw
删除到本行中下一个单词前(包括空格),而de
之删除道当前的单词的词尾(dE
则可以删除到词尾包括标点符号),db
向后删除或者删除到行首d0
、d$
。dd
用于删除当前整行,可用计数2dd
删除两行。D
命令用来删除从光标位置到行尾的文本。 -
x
之删除一两个字符。 -
p
粘贴命令把位于缓冲区的文本粘贴到光标位置的后面。大写版本P
则把这些文本粘贴到光标的前面。如果删除了一行或多行,那么p
将把已删除的文本粘贴到光标下面的新行中。如果删除的内容不到一整行,那么p
将把已删除的文本粘贴到当前行中的光标后面。 -
xp
组合使用x
、p
可以实现调换两个字母的顺序。 -
y
复制文本,与修改和删除命令一样,复制命令也可以与任何移动命令和计数结合在一起使用(yw
、y$
、4yy
)。类似于dd
和cc
,yy
也做用于一整行,但Y
只是和yy
功能一样。 -
.
句点用以重复命令。 -
u
用以撤消一部编辑,对应的U
则撤消所有对单行进行的所有编辑。 -
J
用于合并两行。
其他操作
- 从缓冲区输出文本
p
或P
。 -
ZZ
保存编辑推出文件。 -
:x
只有在修改文件后才能执行退出命令,:wq
则无条件进行。 -
vi +n file
打开文件到第n行。 -
vi + file
打开文件到最后一行。 -
vi + /pattern file
打开文件到模式首次出现的地方。 -
vi -c command file
打开文件后运行命令,通常是行号或者搜索。 -
vi -R
以只读的方式进行。 -
vi -r
系统崩溃后恢复文件。 -
mx
用 x( x 可以为任何字符)标记当前位置。
缓冲区
-
vi -r
恢复缓冲区的文件,用于系统崩溃后的恢复。 -
"
双引号用于缓冲区的操作,如"2p
将二号缓冲区中的删除内容粘贴到光标后面,例如"dyy
复制当前行到d
缓冲区中,"a7yy
复制接下来的7行到a
缓冲区中,"dp
粘贴d
缓冲区中的内容到光标前,"ap
粘贴a
缓冲区中的内容到光标后。 -
"1pu.u.u etc.
这样就会一次吧所有缓冲中的内容粘贴到文件中。没输入一次u
,恢复的文本就会被删除;当输入.
时,下一个缓冲区的内容就会恢复到文件中,一直输入u
、.
直到恢复了在寻找的文本为止。 -
1-9
前9次删除操作,由最近到最早的。 -
a-z
需要时使用的命名缓冲区,大写字母表示添加到改缓冲区区尾。
ex命令相关
此段引用vim的ex模式介绍
- 使用
ex filename
打开文件;这时候你看不到文件的内容,只能看到该文件的行数还有冒号提示符。 - ex命令由一个行号和一个命令组成,比如
1p
,1
是行号,p
是print命令,事实上,p
是默认的,当只有行号的时候,也能打印东西出来,就是行号所表示的行。1,3
表示打印从第一行到第三行,没有行号的时候,则表示操作的是当前行。 - 在vi里面调用ex命令,需要进入命令模式,在底下输入冒号,然后enter键,vi底层是用了ex编辑器。
- 几个命令:
命令 | 缩写 | 功能 |
---|---|---|
delete | d | 删除行 |
move | bar | 移动行 |
copy | c or t | 复制行 |
- 对于ex来说,行尤为重要,在编辑的时候,你可以用
.
来表示当前行,$
来表示最后一行,而%
最代表每一行,使用%的话,相当于1,$
,这些东西能和显式的行号搭配使用。比如:3,18d
删除3到18行的内容,:150,180m23
,把150到180这个块移动到23行后面,:23,38co100
把前面的部分拷贝到100行后面,需要行号显示的时候:set nu
这个命令会对你帮助甚大,:d
删除所有的行,:%t$
拷贝所有行然后放到末尾,:20,.m$
把20到当前行移动到文件尾,ps:vi里面trl+G
显示当前行,在ex里,你可以用:.=
得到相同的结果 ,也可以用:=
得到文件的总行数,使用:/pattern/=
则打印出模式出现的第一次的行数。 - 相对行号的设置,
+
号和-
号放在数字中间的时候,用来表示数字范围,例如::.,.+20
当前行到当前行后的20行,:226,$m.-2
把226行到结束间的内容移动到当前行前的两行。事实上,当你使用相对行号的时候,当前位置甚至不需要你输入.,默认位置就是从当前位置算起的。 - 搜索寻址的方式,例如:
:/pattern/d
删除模式后面一行,:/pattern/+d
删除模式后面一行的下一行,:/pattern1/,/pattern2/d
删除模式1第一行到包括模式2的第一行。 - 有时候可能你迷糊了一下,觉得这样就能删掉100行以后的5行:
:100,+5 d
事实上却告诉你这样一般来说是不行的,因为相对行默认是以当前行为起点的,所以你这个命令的执行结果有赖于你当前行的位置。这时候ex提供了一个让你延续这种习惯的语法:100;+5 d
,把中间的逗号换成分号,你就可以以前操作数作为相对位置的起点了。 -
g
代表全局范围,:g/pattern
在全局找pattern出现的最后位置,:g/pattern/p
找到包含模式的所有行,:g!/pattern/p
找到所有不包含模式的行。 - 使用
|
能够在一行执行多个ex命令,例如:1,3d | s/thier/their/
会把第一行到第三行删除(保留文件中的顶行),然后在当前行(该行是调用ex提示符以前的第4行)进行替换。1,5m | g/pattern/nu
会把第一行到第五行移动到第十行后面,然后显示所有包含模式pattern的行(和行号)。 -
:160,224ya a
将第160到224行的内容复制a
缓冲区中,使用:e letter
然后:pu a
实现打开letter文件并从缓冲区a
中复制。 -
:r filename
把filename的内容插入到光标所在位置的下一行,:185r filename
内容插入到185行之后。:/pattern/r filename
将filename的内容插入到当前文件第一次出现pattern的行之后。 -
:w %.new
等同于:w filename.new
,将当前缓冲区的内容写到目标文件吗中,因为%
表示当前的文件名。
网友评论