概述
在Linux中,vim是用来编辑文档的,它比vi更好用。它有两种模式,命令模式和编辑模式,在命令模式中可以做一些检索、筛选等操作。在编辑模式中可以对文档进行修改。
进入&退出
进入
vim 文件名。此时进入的是命令模式,不能对文件内容进行操作。对文档的检索是在这种模式下进行的。
修改
在命名模式中点击i、c、o、s、c、r等中任意一个进入编辑模式,也就是说编辑模式是嵌在命令模式中的。
退出编辑模式
按下ESC键就会退出编辑模式,进入命令模式。
退出命名模式
-
:wq
:把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到 shell下。(操作过程是,先键入冒号“:”,再键入命令wq。以下命令操作相同); -
:ZZ
or:x
:仅当作过修改时才将缓冲区内容写到文件上; -
:q!
:强行退出vi。感叹号(! )告诉vim,无条件退出,丢弃缓冲区内容。
文本输入命令
指的就是从命令模式切换到编辑模式输入的指令。
插入命令
-
i
:从光标当前位置之前开始插入 -
I
:在光标所在行的行首插入新增文本
附加命令
-
a
:从光标当前位置之后开始插入 -
A
:在光标所在行的行尾添加文本
打开命令
-
o
:在光标所在行的下面新开辟一行,随后输入的文本就插入在这一行上 -
O
:在光标所在行的上面新开辟一行,随后输入的文本就插入在这一行上
替换命令
-
r
:替换光标所在的哪一个字符。 -
R
:直替换光标所在的文字,直到按下ESC为止
光标移动命令
在命令模式下快速移动光标
基本移动命令
移至行首(常用)
-
^
:移到当前行非空格列的开头 -
0
:移动到当前行真正的开头
移至行尾
$
移至指定行
可以使用命令(键)[行号]G将光标移至由行号所指定的行的开头,如::3
移动到第三行
移至指定列
可以使用命令(键)[列号]| 将光标移至当前行指定的列上。
文本修改命令
删除字符
-
x
:删除光标所在的字符。 -
X
:删除光标前面的那个字符。
删除文本对象
-
dd
:删除光标所在的整行 -
D
:从光标位置开始删除到行尾
复原命令
-
u
:取消前面刚执行的插入或删除命令的效果,恢复到此前的情况。 -
U
:总是把当前行恢复成它被编辑之前的状态
重复命令
·
:在命令方式下,重复执行前一次插入命令或删除命令。
字符串检索
- 向下检索命令的基本格式是:
/模式〈Enter〉
,例如:/sTudent
- 向上检索命令的基本格式是:
?模式 〈Enter〉
,例如:?flout
字符串检索与替换
-
:n1,n2s/word1/word2/g
:n1和n2为数字,在n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2。例如:100,200s/cauc/CAUC
,在100行到200行之间搜索cauc并替换成CAUC。 -
1,$s/word1/word2/g
:直接替换 -
1,$s/word1/word2/gc
: 交互,待用户确认 - 选项g(global)表示该行中所有与模式匹配的都用替换文本替换。如果没有只替换各行第一次出现的模式
- 选项c(config)表示每一次替换都要询问,如果回答Y则替换,否则不替换。
例
- 将/etc/man.comfig复制到本目录中:
vim man.config
- 使用vim打开本目录下的man.config文件:
vim man.config
- 在vim中设置行号:
:set nu
- 移动到第58行,向右移动40个字符,请问双引号内是什么目录:
:58G
- 移动到第一行,并且向下搜索“bzip2”字符串,请问它在第几行:
1G
/bzip2
- 接下来要将50~100行的man改为MAN,并且一个一个挑选是否需要修改,如何执行命令?
:50,100s/man/MAN/gc
- 修改完之后 ,突然反悔了,要全部复原 ,有哪些办法:
u一直撤销
- 要复制 51~60的内容,并且贴到最后一行之后:
51G
10yy
G
p
- 删除11~30行之间的20行:
11G,20dd
- 将这个文件另存为man.test.config文件:
:w man.test.config
- 到第29行,并且删除15个字符:
29G,15x
- 储存后离开:
:wq
多文件编辑
-
vi file1 file2
可同时打开多个文件 - :n 编辑下一个文件
- :N 编辑上一个文件
- :files 列出当前Vim打开的所有文件
多窗口功能
-
:sp {filename} filename
:可省略,省略的话就同时打开同一个文件 -
:ctrl + w + j
:光标移动到下面的窗口 -
:ctrl + w + k
:光标移动到上面的窗口