这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
概述
vim有两种模式:Normal和Insert模式。
- 处于Normal时,所有的键都为功能键,像传统Windows系统中,按下Ctrl键下的效果。比如,Ctrl + C为复制内容,那么处于Normal下,按「C」相当于复制(注意,这是比喻,实际Normal中的C是其他功能)。用VIm打开文件时,就处于Normal模式;当在Insert模式时,按下【Esc】键,回到Normal模式。
- Insert模式,就是编辑模式了,可以编辑文档。一般我们可以通过在Normal模式按下【i】键,进入Insert模式
入门命令(Norma模式)
i
进入Insert 模式,按ESC
回到 Normal 模式x
删当前光标所在的一个字符:wq
保存文件并退出:q
退出vim,如果文件已修改,不能直接退出,需要:q!
命令强制退出:w [newfilename]
另存为newfilename文件(当前编辑的文件还属当前文件)dd
删除当前行,并把删除的当前行存在剪贴板p
粘贴剪贴板(dd
存在剪贴板的内容,会粘贴到光标的下一行)h
j
k
l
移动光标,分别为:←↓↑→
进一步学习
更多的进入插入模式的方式
从前面的学习,我们知道通过在Normal模式按i
进入编辑模式。这时候,我们就可以在光标之前插入内容。为了提高我们的编辑效率,有时候我们需要在不同的位置插入内容。vim提供了多种插入模式:
a
在光标后插入o
在当前行后插入一个新行O
大写的o, 在当前行前插入一个新行cw
先按c,再按w。删除光标到这个单词结尾的部分,并进入Insert模式。ps:w
移动到下一个单词位置
光标移动
我们最常用的移动方式就是上下左右移动,vim还有其他好用的光标移动方式:
0
数字零(注意,不是9宫格数字键盘上的0,而是字符上的0),移动到行头^
移动到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等),而0
是直接移动到行头$
移动到本行行尾g_
移动到本行最后一个不是blank字符的位置/pattern
先按「/」,再键入所要匹配的内容。搜索pattern
的字符串,如果搜索出多个匹配,可按n键到下一个。ps:命中搜索结果,会高亮显示,如果想要清除高亮效果,可以再次匹配不存在的文本;或者使用命令:noh
复制、剪切、粘贴
复制,在vim中也叫yank(提起)。复制相关的命令都是y
开头
yy
复制整行(nyy或者yny ,复制n行,n为数字);y^
复制当前(光标前,不包含当前光标所在位置)到行头的内容;y$
复制当前(包含光标所在位置)到行尾的内容;yw
复制一个word (nyw或者ynw,复制n个word,n为数字)
剪切,在vim中也叫delete。剪切相关的命令都是d
开头
dd
剪切整行d^
剪切至行首d$
剪切至行尾dw
剪切一个word
粘贴,在vim中也叫put(放下)。
p
小写p代表贴至游标后(下),因为游标是在具体字符的位置上,所以实际是在该字符的后面P
大写P代表贴至游标前(上)
说明:整行的复制粘贴在游标的上(下)一行,非整行的复制则是粘贴在游标的前(后)
Undo/Redo 撤销/重做
u
undo,撤销。如,删除某行,再按u
时,会撤销删除某行,相当于还原了某行Ctrl + r
redo,重做。如,删除某行,再按u
时,会撤销删除某行,再按Ctrl + r
,又重新删除某行。
undo/Redo 可以理解成操作的前进后退。
打开/保存/退出/改变文件
:e <path/to/file>
打开一个文件:w
存盘:saveas <path/to/file>
另存为<path/to/file>
:x
,ZZ
或:wq
保存并退出 (:x
表示仅在需要时保存,ZZ不需要输入冒号并回车)。:x
和ZZ
与:wq
最大的区别是::x
和ZZ
在内容未更改时,不会保存;:wq
即使内容未更改,也会保存。文件修改时间可以很明显看出这两者的区别区别。:q!
退出不保存:qa!
强行退出所有的正在编辑的文件,就算别的文件有更改。:bn
和:bp
你可以同时打开很多文件(在bash里,vim
命令紧跟多个文件名),使用这两个命令来切换下一个或上一个文件。(使用:n
到下一个文件,切换到最后一个文件时,再执行就会报错了)
高效使用
高效移动光标
- N
G
「N」表示数字,「G」为大写,表示移动到第N行 :N
「N」表示数,同样可以达到移动到N行目的gg
移动到第一行G
移动到最后一行w
或W
移动到下一个单词的开头,它们的区别是对单词字符的分隔符e
或E
移动到下一个单词的结尾b
或B
移动到上一个单词的开头ge
或gE
移动到上一个单词的结尾%
匹配括号移动,包括()[]{}
,但不包括【】()「」
(中文的括号)。注意:需要把光标先移动到括号上*
和#
匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
高效选择
当我们想选取文本内容是,可以按v
进入视模式选择,结合移动光标命令进行选择相关内容。然后再执行相关命令,如d
删除所选内容;y
复制所选内容