(一)Vim模式
- vim的三种工作模式:命令模式(Command Mode) 、输入模式(Input Mode)、末行模式(Last line Mode)
-
切换的方法:
- 命令模式下输入 a、i、o进入输入模式
- 输入模式下按 Esc 进入命令模式
- 命令模式下输入 : 进入末行模式
- 末行模式下指令错误则返回命令模式
- 简写记忆:
- 输入-->命令:Esc
- 命令-->输入:a i o A I O
- 以下所有命令都是在命令模式下
(二)常用Vim命令
-
这个图涵盖了常用的Vim命令
-
插入文本
-
I
—— 在当前行第一个非空字符前插入 -
gI
—— 在当前行第一列插入 -
a
—— 在光标后插入 -
A
—— 在当前行最后插入 -
o
—— 在下面新建一行插入 -
O
—— 在上面新建一行插入
-
-
文档操作
-
:w
—— 保存修改 -
:wq
—— 保存并退出 -
ZZ
—— 保存并退出 -
:x
—— 保存并退出 -
:q[uit]
—— 退出当前窗口
-
-
删除
-
x
—— 删除光标所在位置的一个字符 -
nx
—— 删除光标所在位置的后面n个字符 -
dw
—— 向后删除一个单词 -
db
—— 向前删除一个单词 -
dd
—— 删除光标所在行 -
ndd
—— 删除从光标所在行开始的n行
-
-
移动
-
0
—— 移动到行首 -
g0
—— 移到光标所在屏幕行行首 -
$
—— 移动到行尾 -
g$
—— 移动光标所在屏幕行行尾 -
^
—— 移动到本行第一个非空白字符 -
g^
—— 同 ^ ,但是移动到当前屏幕行第一个非空字符处 -
n|
—— 把光标移到第n列上 -
nG
—— 到特定的行数(n) -
:n
—— 移动到第n行 -
n+
—— 移至游标所在位置之后的第 n 列 -
n-
—— 移至游标所在位置之前的第 n 列 -
:$
—— 移动到最后一行 -
gg
—— 到文件头部 -
G
—— 到文件尾部 -
f/F+字符
—— 向前/向后移动到特定的字符 -
(
—— 前移1句 -
)
—— 后移1句 -
{
—— 前移1段 -
}
—— 后移1段 -
j
—— 下移一行 -
k
—— 上移一行 -
gj
—— 移动到一段内的下一行 -
gk
—— 移动到一段内的上一行 -
+或Enter
—— 把光标移至下一行第一个非空白字符
上面的操作都可以配合n使用,比如输入3h, 则光标向左移动3个字符
-
-
复制
-
yw
—— 复制单词 -
yf
—— 复制当前字符到指定字符 -
yy或Y
—— 复制当前行 -
nyy
—— 复制当前行开始的n行 -
y[n]w
—— 复制1(n)个词 -
y$
—— 从光标当前位置复制到行尾 -
y0
—— 从光标当前位置复制到行首
-
-
剪切
-
d
—— 删除(剪切)在可视模式下选中的文本 -
d$ or D
—— 删除(剪切)当前位置到行尾的内容 -
d[n]w
—— 删除(剪切)1(n)个单词 -
d0
—— 删除(剪切)当前位置到行首的内容 -
[n] dd
—— 删除(剪切)1(n)行
-
-
粘贴
-
p
—— 在光标之后粘贴 -
P
—— 在光标之前粘贴
-
(三)不常用Vim命令
-
插入文本
-
:r filename
—— 在当前位置插入另一个文件的内容 -
:[n]r filename
—— 在第n行插入另一个文件的内容 -
:r !date
—— 在光标处插入当前日期与时间(同理:r !command
可以将其它shell命令的输出插入当前文档)
-
-
文档操作
-
:e file
—— 关闭当前编辑的文件,并开启新的文件,如果对当前文件的修改未保存,vi会警告 -
:e! file
—— 放弃对当前文件的修改,编辑新的文件 -
:e+file
—— 开始新的文件,并从文件尾开始编辑 -
:e+n file
—— 开始新的文件,并从第n行开始编辑 -
:enew
——编译一个未命名的新文档 -
:e
—— 重新加载当前文档 -
:e!
—— 重新加载当前文档,并丢弃已做的改动 -
:e#或ctrl+^
—— 回到刚才编辑的文件,很实用 -
:f或ctrl+g
—— 显示文档名,是否修改,和光标位置 -
:f filename
—— 改变编辑的文件名,这时再保存相当于另存为 -
gf
—— 打开以光标所在字符串为文件名的文件 -
:n1,n2w filename
—— 选择性保存从某n1行到另n2行的内容
-
-
删除
-
x
—— 删除游标所在该字元 -
X
—— 删除游标所在之前的字元 -
r
—— 输入新字元取代(replace)游标所在字元(如:ra将游标所在字元以 a 取代) -
R
—— 进入取代状态,直到Esc
为止 -
s
—— 删除游标所在之字元,并进入输入模式,直到Esc
-
S
—— 删除游标所在的一行,并进入输入模式,直到Esc
-
-
移动
-
b
—— 移动到上个字的第一个字母 -
w
—— 移动到下个字的第一个字母 -
e
—— 移动到下个字的最后一个字母 -
B
—— 移动到上一个单词开头,忽略一些标点 -
W
—— 移动下一个单词开头,但忽略一些标点 -
E
—— 移动到下一个单词末尾,如果词尾有标点,则移动到标点 -
H
—— 移至视窗的第一行 -
M
—— 移至视窗的中间那行 -
L
—— 移至视窗的最后一行 -
G
—— 移至该文件的最后一行 -
+
—— 移至下一列的第一个字元处 -
-
—— 移至上一列的第一个字元处 -
ctrl+b
—— 屏幕后移动一页 -
ctrl+f
—— 屏幕向前移动一页 -
h或退格
—— 左移一个字符 -
l或空格
—— 右移一个字符 -
ge
—— 后移一个单词,光标停在上一个单词末尾 -
gE
—— 同 ge ,不过‘单词’包含单词相邻的标点 -
tc
—— 把光标移到同一行的下一个c字符前 -
Tc
—— 把光标移到同一行的上一个c字符后
-
-
复制
-
y[n]l
—— 复制光标右边1(n)个字符 -
y[n]h
—— 复制光标左边1(n)个字符 -
:m,ny
—— 复制m行到n行的内容 -
y1G或ygg
—— 复制光标以上的所有行 -
yG
—— 复制光标以下的所有行
-
-
剪切
-
d[n]l
—— 删除(剪切)光标右边1(n)个字符 -
d[n]h
—— 删除(剪切)光标左边1(n)个字符 -
:m,nd
—— 剪切m行到n行的内容 -
d1G或dgg
—— 剪切光标以上的所有行 -
dG
—— 剪切光标以下的所有行 -
d/f
—— 这是一个比较高级的组合命令,它将删除当前位置到下一个f之间的内容
-
-
滚屏
-
ctrl-u
—— 文本向下滚到半屏。光标不随文本移动。相当于文本的窗口上移半屏 -
ctrl-d
—— 窗口向下移动半屏,相当于文本向上滚动了半屏 -
ctrl-e
—— 向上滚动一行 -
ctrl-y
—— 向下滚动一行 -
ctrl-f
—— 向前滚动一屏(forward) -
ctrl-b
—— 向后滚动一屏(backward) -
zt
—— 把当前行置于屏幕顶端 -
zb
—— 把当前行置于屏幕底 -
zz
—— 把当前行置于屏幕*
-
-
标记
-
m{a-z}
—— 标记光标所在位置,局部标记,只用于当前文件 -
m{A-Z}
—— 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效 -
`{a-z}
—— 移动到标记位置 -
'{a-z}
—— 移动到标记行的行首 -
`{0-9}
—— 回到上[2-10]次关闭vim时最后离开的位置 -
``
—— 移动到上次编辑的位置。''也可以,不过``精确到列,而''精确到行 。如果想跳转到更老的位置,可以按C-o,跳转到更新的位置用C-i -
`"
—— 移动到上次离开的地方 -
`.
—— 移动到最后改动的地方 -
:marks
—— 显示所有标记 -
:delmarks a b
—— 删除标记a和b -
:delmarks a-c
—— 删除标记a、b和c -
:delmarks a c-f
—— 删除标记a、c、d、e、f -
:delmarks!
—— 删除当前缓冲区的所有标记
使用标记可以快速移动。到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 后退 和 前进
-
-
查找
-
/something
—— 在后面的文本中查找something -
?something
—— 在前面的文本中查找something -
/pattern/+number
—— 将光标停在包含pattern的行后面第number行上 -
/pattern/-number
—— 将光标停在包含pattern的行前面第number行上 -
n
—— 向后查找下一个 -
N
—— 向前查找下一个
-
-
替换
-
:s/old/new
—— 用new替换当前行第一个old -
:s/old/new/g
—— 用new替换当前行所有的old -
:n1,n2s/old/new/g
—— 用new替换文件n1行到n2行所有的old -
:%s/old/new/g
—— 用new替换文件中所有的old -
:%s/^/xxx/g
—— 在每一行的行首插入xxx,^表示行首 -
:%s/$/xxx/g
—— 在每一行的行尾插入xxx,$表示行尾
-
-
分屏编辑
-
vim -o file1 file2
—— 水平分割窗口,同时打开file1和file2 -
vim -O file1 file2
—— 垂直分割窗口,同时打开file1和file2
-
-
排版
-
<<
—— 向左缩进一个宽度 -
>>
—— 向右缩进一个宽度 -
:ce(nter)
—— 本行文字居中 -
:le(ft)
—— 本行文字靠左 -
:ri(ght)
—— 本行文字靠右
-
-
拼写检查
-
:set spell
—— 开启拼写检查功能 -
:set nospell
——关闭拼写检查功能 -
]s
—— 移到下一个拼写错误的单词 -
[s
——作用与上一命令类似,但它是从相反方向进行搜索 -
z=
—— 显示一个有关拼写错误单词的列表,可从中选择 -
zg
—— 告诉拼写检查器该单词是拼写正确的 -
zw
—— 与上一命令相反,告诉拼写检查器该单词是拼写错误的
-
原博地址:http://www.jianshu.com/p/ab8b6dfd220e?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=qq