Dive Into VIM
VIM命令行模式
1、光标的移动
-
h
,j
,k
,,l
,分别使光标向左,下,上,右移动; -
w
,光标向前移动一个单词,b
,光标向后移动一个单词; -
e
,到下一个单词的结尾; -
0
,光标移动到行首;$
,光标移动到行尾; -
^
,光标移动到当前行的第一个字母; -
)
,移动光标到下一个句子; -
(
,移动光标到上一个句子; -
ctrl+f
,光标移动到下一屏; -
ctrl+b
,光标移动到上一屏; -
G
, 移动到文件末尾; -
numG
,光标移动到指定行(eg.100G
就是第100行),配合se number
,显示行号使用; -
gg
,移动到文件开始; -
H
,光标移动到屏幕上方; -
M
,光标移动到屏幕中间; -
L
,光标移动到屏幕下方; -
*
,读取光标处的字符串,并且移动光标到它再次出现的地方,向后搜索。有点类似搜索/find
命令; -
#
,与*
类似,只是向前搜索; -
/text
,搜索文本,重复上次的搜索按n
; -
?text
,与上面的类似,反方向; -
ma
,做书签标记。a代表书签名字,书签名字只能是小写字母。用户看不到书签的存在; - ``a`,到书签的a处;
- ``.`,到上次编辑的地方,这个是默认的书签,不需要特别标记它。
dt"
,删除所有内容,直到遇到双引号,这个对码农很有用!t,
,到逗号前的第一个字符,逗号可以是任何字符;
2、插入命令
i
,在当前字符的左边插入;I
,在当前行首插入;a
,在当前字符的右边插入;A
,在当前行尾插入;o
,在当前行下面插入新行;O
,在当前行上面插入新行;c{motion}
,删除 motion 命令跨过的字符,并且进入插入模式。比如:c$
,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!
,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来;d{motion}
,和c{motion}
类似,区别是不进入插入模式;
3、有效移动大段文本,可视化模式
-
v
,按字符来选择大段文本可精确到字符,试试看,用h
,j
,k
,,l
来移动光标; -
V
,按行来选择大段文本精确到行,因此h
,l
,无效; -
ctrl+v
,块选择,这个太强大了,可以进行纵向编辑,有点像ultra editor里面的纵向编辑模式,比如想删除第一列的所有字符,用这个实在太方便了!!! -
d
,剪贴内容到剪贴板,但不进入插入模式; -
y
,拷贝内容到剪贴板; -
c
,剪贴内容到剪贴板,并且进入插入模式;
如果你很清楚在做什么,没必要进入可视化模式,前提是你必须知道你剪切拷贝了什么!
-
yy
,拷贝当前行; -
dd
,剪切当前行; -
cc
,剪切当前行并且进入插入模式; -
D
,剪切当前行到行尾; -
Y
,拷贝当前行,同yy
; -
C
, 剪切当前行到行尾并进入插入模式; -
x
,剪切当前字符到剪贴板; -
s
,与x
,类似,但是会进入插入模式; -
p
,粘贴; -
.
,这个命令很强大,意思是重复上一次的操作;
4、进阶命令
- 文本替换,命令
[range]s/from/to
- 方式一、使用可视化模式选中一段文本,比如将这段文本中的python替换成java,选中文本之后输入
:s/python/java
,回车后发现选中文本区的内容都被替换了。 - 方式二、先用
:se number
命令展示出行号,然后使用指定行号的方式来替换,例如:40,100s/python/java
,标识将第40行到100行中的python替换成java。
- 方式一、使用可视化模式选中一段文本,比如将这段文本中的python替换成java,选中文本之后输入