这一章主要介绍vim编辑器的内部使用方法和注意事项
Vim编辑器有四种工作模式:正常模式、插入模式、命令模式、可视模式。简单的判断方法就是看底部,什么都没有就是正常模式,光标在编辑器最底下时则是命令模式,有insert(replace)就是插入模式,有visual(visual line、visual block)就是可视模式。如果不确定自己处在什么模式下,按Esc(有时需要按两下)回到正常模式。
vimtutor可以进入vim编辑器的简单教程,所以请看一下吧。
(1).进入vim编辑器
这个可以去看前一章,需要注意的是~代表该行没有任何内容,如果没有任何内容则代表这行有空白字符(如空格,Tab,Enter等)或不可见字符。
(2).退出vim编辑器
一般在命令模式下退出vim编辑器
:q |
如果文件违背修改,直接退回到Shell;否则提示保存文件 |
:q! |
强制退出,不保存修改内容 |
:wq |
w命令保存文件,q命令退出vi,合起来就是保存并退出 |
:w filename |
另存为新的文件 |
ZZ |
保存并退出,相当于wq,但更方便 |
(3).移动光标
正常模式下最简单的移动光标hjkl,最左边的h往左移,最右边的l往右移,j看起来像向下的箭头向下移,k就是向上移了。
注意:vim区分大小写,输入命令时不要锁定大写。可以在命令前加个数字作为前缀,例如2j就是光标向下移动两行。
以下还有一些移动光标的命令,不过请从正常模式下开始操作:
0或| |
将光标定位到一行的开头 |
$ |
将光标定位到一行的末尾 |
w |
定位到下一个单词 |
b |
定位到上一个单词 |
( |
定位到一句话的开头,以 !.?三种符号来界定。 |
) |
定位到一句话的结尾。 |
{ |
移动到段落开头,段落是以空行作为界定标准 |
} |
移动到段落结尾 |
[[ |
移动到第一行开头,在不是空行的情况下移动到第一个非空白字符 |
]] |
移动到最后一行开头 |
n| |
移动到第n行 |
1G |
移动到第一行开头 |
G |
移动到最后一行开头 |
nG |
移动到第n行开头 |
H |
移动到屏幕顶端开头 |
nH |
移动到距屏幕顶端n行的开头 |
M |
移动到屏幕中间开头 |
L |
移动到屏幕底部开头 |
nL |
移动到距屏幕底部n行的开头 |
:n |
移动到第n行开头 |
(4).控制命令
普通模式下使用
Ctrl+u |
向前滚动半屏 |
Ctrl+b |
向前滚动全屏 |
Ctrl+d |
向后滚动半屏 |
Ctrl+f |
向后滚动全屏 |
Ctrl+y |
向前滚动一行 |
Ctrl+e |
向后滚动一行 |
Ctrl+i |
刷新屏幕 |
(5).进入插入模式
只有切换到插入模式下才能编辑文件。以下展示了一些从正常模式切换到插入模式的命令
Insert(按键) |
这个按键有两种模式:在光标位置前插入文本和替换光标当前位置文本 |
i |
在光标位置前插入文本 |
I |
在当前行开头插入文本(光标会移动到开头) |
a |
在光标位置后插入文本(光标会后移一位) |
A |
在当前行末尾插入文本(光标会移动到末尾) |
o |
在当前位置下创建一行(光标会移动到空行) |
O |
在当前位置上创建一行(光标会移动到空行) |
(6).删除字符或行
x |
删除当前光标下的字符 |
X |
删除当前光标前的字符 |
dw |
删除当前光标到单词结尾的字符 |
d^ |
删除当前光标到单词首的字符 |
d$ |
删除当前光标到行尾的字符 |
D |
删除当前光标到行尾的字符 |
dd |
删除当前光标所在的行 |
cc |
删除当前行,并进入插入模式 |
cw |
删除当前单词,并进入插入模式 |
除了cc以外,都可以在前面添加数字进行重复操作
(7).修改文本
r |
替换当前光标下的字符 |
R |
从当前光标开始替换字符,进入插入模式下的替换模式 |
s |
删除当前光标下的字符,并进入插入模式 |
S |
删除当前行的字符,并进入插入模式 |
(8).复制粘贴
yy |
复制当前行 |
nyy |
从当前行开始复制n行 |
yw |
复制一个单词 |
nyw |
从当前单词复制N个单词 |
p |
将复制的文本粘贴到光标后面 |
P |
将复制的文本粘贴到光标前面 |
(9).文本查找
在正常模式下,输入/ 是向下查找,?是向上查找,还有一些特殊字符
^ |
匹配一行开头,^在字符串前面 |
. |
代替任何一个字符 |
* |
(有点奇怪好像是匹配-1个,0个,2个和2个以上的字符。由于-1这个问题,所以*不能放在字符串首位) |
$ |
匹配一行的结尾,$在字符串末尾 |
[] |
匹配一组字符,每一个字符单独匹配 |
如果希望使用这些字符本身,需要在前面使用反斜杠\。
单独匹配单个字符串,可以用fFtT。f向上搜索,F向下搜索,光标定位到匹配的字符。t向上搜索,光标定位匹配字符前面,T向下搜索,光标定位匹配字符后面。
(10).set命令
Set命令比较多,所以介绍几个可能会用到的
:set ic |
搜索时忽略大小写 |
:set ai |
设置自动缩进(自动对齐) |
:set nu |
显示行号 |
:set sw |
设置缩进宫格数,例如空格数为4,:set sw=4 |
:set ws |
设置循环搜索 |
:set wm |
设置自动换行 |
:set ro |
将文件类型改为只读 |
:set term |
输出终端类型 |
:set bf |
忽略输入的控制字符,如BEL(响铃)、BS(退格)、CR(回车)等 |
:set hlsearch |
打开高亮显示查找文本 |
大部分可以通过加no取消设置,例如:set nohlsearch。还有:nohlsearch可以取消单次查找高亮。
(11).运行外部命令
切换到命令模式,输入!和空格,再加上Linux命令即可
例如:
:! ls –a
即可显示当前目录下的文件。
按任意键可以返回vim编辑器
(12).文本替换
:s/search/replace/g
search为检索的文本,replace为替换的文本,g表示全局替换
(13).高级命令
J |
将当前行与下一行连接为一行 |
<< |
将当前行左移一个单位(一个缩进宽度) |
>> |
将当前行右移一个单位(一个缩进宽度) |
~ |
改写当前字符的大小写 |
^G |
Ctrl+G组合键可显示当前文件名和状态 |
U |
撤销对当前行所做的修改 |
u |
撤销上次操作,vi只可以撤销一次,vim可以一直撤销 |
:f |
以百分号(%)的形式显示当前光标在文件中的位置、文件名和文件的总行数 |
:f filename |
将文件重命名为filename |
:w filename |
保存修改到filename |
:e filename |
代开另一个文件名为filename的文件 |
:cd dirname |
改变当前工作目录到dirname |
:e # |
在两个打开的文件之间进行切换 |
:n |
如果用vim打开了多个文件(vim file1 file2…)时使用,切换到下一个文件 |
:N |
如果用vim打开了多个文件(vim file1 file2…)时使用,切换到上一个文件 |
:r file |
读取file并在当前行的下一行插入 |
:nr file |
读取file并在第n行的下一行插入 |