(一)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常用命令
不定期完善中...
