vi是linux中非常强大的文本编辑器,必须对该命令的各种操作都达到熟悉的地步,才能更好的展开学习工作。本文仅记录了常用的一些操作。
一、vi简介
vi 编辑器是 Linux/UNIX 环境下经典的编辑器,vi 可以执行输出、删除、查找、替换、块操作等众多文本操作,另外,vim 是 vi 的增强版,与 vi 编辑器完全兼容,所以此处仅记录vi的使用操作。
二、vi工作模式及切换
vi 编辑器有 3 种基本工作模式,分别是命令模式、文本输入模式和末行模式
- 命令行模式
使用 vi 命令进入 vi 编辑器状态下的模式,或者在其他模式下按下Esc键也可进入命令模式。该模式下用户可以执行命令,详见下文。 - 末行模式
在命令模式下,用户按 : 键即可进入末行模式下,此时 vi 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个 : 作为末行模式的说明符,等待用户输入命令。该模式下,用户可以做一些与输入文字无关的事,入搜索字符串、替换关键词等。末行命令执行完后,vi 自动回到命令模式。 - 文本输入模式
命令模式下点击键盘上的 [a 或 o 或 i ]等键,就会进入该模式。在该模式下,用户输入的任何字符都被 vi 当做文件内容保存在该文件中,并将其显示在屏幕上。按下Esc键,即可回到命令模式下。
三、vi的基本使用方法
1. vi的进入、保存、退出
进入:vi filename
保存退出需在末行模式下进行操作,末行模式下输入如下字符
:q 表示直接退出,但是若在文本模式下修改过内容则不能直接退出,即该命令生效条件是,未对文件内容进行任何的编辑操作
:wq 保存该文件后退出
:x 同:wq一样,保存该文件后退出
:q! 不保存内容,强制退出。如:在误修改文件内容后,执行该命令会忽视修改操作,直接退出vi,即文件内容未被修改,与编辑前保持一致。适用于误操作
2. 光标移动操作(重要)
vi中光标的移动既可以在命令模式下,也可在文本模式下,不过方法不尽相同
文本模式下:四个方向键
命令模式下:四个方向键以及如下。注:以下命令在屏幕没有回显
h 左移。若在按h前,按下数字n,则光标左移n个字符
j 下移。若在按j前,按下数字n,则光标下移n行
k 上移。若在按k前,按下数字n,则光标上移n行
l 右移。若在按l前,按下数字n,则光标右移n个字符
0 行首。数字0
$ 行尾。
H 屏幕上显示的第一行,不一定是文件头
L 屏幕上显示的最后一行,不一定是文件尾
gg 光标移动到文件头。连续按两下g键
G 光标移动到文件尾。大写状态下按一下G键
nG 光标移动到第n行
w/W 光标移动到下一个单词的词首(大小写对单词的切割符号是不一样的)
e/E 光标移动到下一个单词的词尾(大小写对单词的切割符号是不一样的)
b/B 光标移动到上一个单词的词首(大小写对单词的切割符号是不一样的)
M 光标移动到屏幕的中间一行
{ 将光标向前移至上一个段落的开头。一个段落被定义为是以一个空白行开始和结束的片段
} 将光标向前移至下一个段落的开头
末行模式下光标在整个文件中的移动
:0 光标移动到文件的第1行
:$ 光标移动到文件的最后一行
:n 光标移动到文件的第n行
3. 文本插入操作
以下操作会从命令模式切换到文本输入模模式
3.1 插入insert命令
i 插入文本从光标所在位置前开始
I 将光标移到当前行的行首,然后在其前插入文本
3.2 附件append命令
a 在当前光标所在位置之后追加新文本
A 将光标移到当前行的行尾,然后在其后追加新的文本
3.3 打开open命令
o 在光标所在行的下面新开一行,并将光标置于该行的行首,等待输入文本
O 在光标所在行的上面新开一行,并将光标置于该行的行首,等待输入文本
4. 文本的修改
均需在命令行模式下
4.1 文本删除、移动
x 删除光标处的字符。若在x之前加上数字n,则删除从光标所在位置开始向右的n个字符。
X 删除光标前面的那个字符。若在X之前加上数字n,则删除从光标前面那个位置开始向左的n个字符。
dd 删除光标所在的整行。若在dd前加上数字n,则删除当前行及其后的n-1行的内容
d$或D 两者功能一样,删除从光标所在处开始到行尾的内容
d0 删除从光标前一个字符开始到行首的内容
dw 删除一个单词。若光标在某个词的中间,则从光标位置开始删至词尾。若在dw前加上数字n,则删除n个指定的单词
4.2 文本复制、粘贴
yy 复制光标所在的整行。若在yy前加上数字n,则复制当前行及其后的n-1行的内容
p 粘贴。
// dd,yy,p 类似于Windows下的剪切、复制、粘贴
4.3 取消上一命令undo,恢复到误操作之前的状态
u 取消刚才输入的命令。继续多次按u,类似于WPS中一致按ztrl+z,会一直回退,不管被编辑了多少次
U 取消刚才输入的命令。只能回退一次,即按一次大写U,回退到刚才的状态,再按一次大写U,就又到现在的状态了。
4.4 重复命令 redo
重复命令只能在命令模式下工作,效果是再执行一次刚完成的命令。结果是依赖光标当前位置的
. 即命令模式下按“.”即可
5. 文本的搜索与替换
末行模式下进行操作,有回显
5.1 搜索
/ 从光标位置处向文件尾方向搜索
? 从光标位置处向文件头方向搜索
若输入的模式被找到,光标会停在找到的模式上。
n 继续搜索下一个匹配的模式
N 找到上一个匹配的模式
5.2 替换 (所有的文本替换操作均以 : 开头)
:s/text1/text2 将匹配到的第一个text1替换成text2
:s/text1/text2/g 将所有的text1替换成text2
:m,ns/text1/text2/g 将从m行开始到n行结束的所有的text1替换成text2。$代表末行,所以 :1,$s/text1/text2/g 会将文件内所有的text1替换成text2
6. 高级应用技巧
末行模式
:set nu 显示行号
:set nonu 关闭显示行号功能
:set ic 忽略大小写,主要是为了方便搜索
:set noic 不忽略大小写
:syntax on 打开关键字高亮显示功能
:syntax off 关闭高亮显示
|