-
Normal 模式下
[ ESC ]
i
=== 插入模式(Insert
)
x
=== 删除光标所在的前一个字符
dd
=== 删除当前行,并把删除的行存到剪贴板里
dt!
=== 删除当前行所有内容,只到遇到!
,!
可以换成其他字符
hjkl
=== (←↓↑→
)移动
- 各种插入
a
==== 在光标后插入
0
==== 在当前行下插入一个新行
cw
==== 将光标后到一个单词结尾字符替换为新输入的字符
- 移动光标
0
==== 零,到本行行头
$
==== 到本行行尾
/str
==== 搜索str
的字符串
- 复制/粘贴
yy
==== 复制当前行
p
==== 粘贴复制的内容
- 撤销/恢复
u
==== 撤销
Ctrl + r
==== 恢复撤销的内容
以
:
开始的命令需要输入<enter>
回车
- 打开/保存/退出/改变文件
:e <path/to/file>
=== 打开文件,tab
可以补全
:wq
=== 保存(w
)并退出(q
)
:w <path/to/file>
=== 另存为<path/to/file>
- 替换
:s/from/home/
=== 将当前行的第一个from
替换为home
:s/from/home/g
=== 将当前行所有from
替换为home
:s/from/home/gc
=== 将当前行所有from
替换为home
,但每替换一个会询问一次
:3s/from/home/g
=== 将第3行所有from
替换为home
:1,3s/from/home/g
=== 将第1-3行所有from
替换为home
:%s/from/home/g
=== 将所有from
替换为home
:1,.s/from/home/g
=== 将第1行到当前行的所有from
替换为home
,.
当前行
:.,$s/from/home/g
=== 将当前行到最后一行的所有from
替换为home
- 更有效率的移动
nG
=== 移动到第n
行
gg
=== 第一行
G
=== 最后一行
w
=== 到下一个单词的开头
e
=== 到下一个单词的结尾
g_
=== 到本行最后一个不是空格字符的位置
^
=== 到本行第一个不是空格字符的位置
fa
=== 到下一个为a
的字符处,a
可替换为其他字符
2fa
=== 在当前行查找第二个出现的a
t,
=== 到逗号前的第一个字符,逗号可以变成其它字符
Ctrl+>/<
=== 左右缩进
- 以下两个命令很重要
%
=== 匹配括号移动,需要把光标先移到括号上,在括号的开头结尾间移动
*
和#
=== 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
- 区域选择
<action>a<object>
和<action>i<object>
action
可以是任何的命令,如d
(删除),y
(拷贝),v
(可视模式选择)
object
可能是w
一个单词,W
一个以空格为分隔的单词,s
一个句子,p
一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]
。
di"
=== 删除"
中的内容,不包括"
da"
=== 删除包括"
在内的内容
dw
=== 删除一个单词
-
块操作
<Ctrl+ v>
块操作,典型的操作:
0 <C-v> <C-d> I-- [ESC]
0
=== 到行头
<C-v>
=== 开始块操作
<C-d>
==== 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
I-- [ESC]
== I是插入,插入“--”,按ESC键来为每一行生效。
-
可视化选择:
v,V,<C-v>
v
进入字符可视化模式, 文本选择是以字符为单位的
V
进入行可视化模式, 文本选择是以行为单位的
Ctrl+v
进入块可视化模式, 可以选择一个矩形内的文本
进入 v 和 V
后,可以:
J
==== 把所有的行连接起来(变成一行)
<
或>
==== 左右缩进
=
=== 自动给缩进在所有被选择的行后加上点东西:
<C-v>
选中相关的行 (可使用j
或<C-d>
或是/pattern
或是%
等……)
$
到行最后
A,
输入字符串,按ESC
- 分屏 :split
和 :vsplit
:split
==== 创建上下分屏 , 缩写sp filename
:vsplit
==== 创建左右分屏 , 缩写vsp filename
Ctrl+W c
=== 关闭当前窗口
Ctrl+W dir
=== dir就是方向,可以是hjkl
或是←↓↑→
中的一个,用来在各个分屏之间切换。。先按一下Ctrl+W