(一)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和file2vim -O file1 file2
—— 垂直分割窗口,同时打开file1和file2-
排版
-
<<
—— 向左缩进一个宽度 -
>>
—— 向右缩进一个宽度 -
:ce(nter)
—— 本行文字居中 -
:le(ft)
—— 本行文字靠左 -
:ri(ght)
—— 本行文字靠右
-
-
拼写检查
:set spell
—— 开启拼写检查功能:set nospell
——关闭拼写检查功能]s
—— 移到下一个拼写错误的单词[s
——作用与上一命令类似,但它是从相反方向进行搜索z=
—— 显示一个有关拼写错误单词的列表,可从中选择zg
—— 告诉拼写检查器该单词是拼写正确的zw
—— 与上一命令相反,告诉拼写检查器该单词是拼写错误的
参考文章推荐
Vim 常用命令大全
Linux基础命令和Vim常用命令
不定期完善中...