Linux文本编辑vi
VI
基本介绍
vim
是从 vi
发展出来的一个 文本编辑器 ,可以理解为升级版本的 Vi
,功能更强大。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
vi
适用于文本编辑,但是 vim
更适用于 coding
。并且vim
完全兼容 vi
。
所有的类 Unix
系统都会内置 vi
文本编辑器,但不一定有 vim
,如果没有的话,需要我们命令安装一下:
yum -y install vim* # CentOS 系统
sudo apt-get install vim-gtk # Ubuntu 系统
基本上 vi/vim
共分为三种模式,分别是命令行模式(Command mode) ,输入模式(Insert mode) 和底线命令模式(Last line mode) 。
命令行模式
也称为交互模式,这是 vim
的默认模式,每次使用 vim
命令编辑文件的时候,就会先进入这个模式。
vi config.txt
特征:
- 在这个模式下,你不能输入文本;
- 它可以让我们在文本间移动,删除一行文本,复制黏贴文本,跳转到指定行,撤销操作,等等。
常用命令
命令 | 作用 |
---|---|
i | 切换到输入模式,以输入字符 |
x | 删除当前光标所在处的字符 |
X | 删除当前光标前一个字符 |
: | 切换到底线命令模式,以在最底一行输入命令 |
gg | 跳转到文件开头 |
G | 跳转到文件末尾 |
dd | 删除光标所在一整行数据,且临时存储到缓存区 |
yy | 复制整行文本到临时缓存区 |
p | 将指定缓存区内容放在光标位置之下;整行文本放在行下面,若是非整行文本则放在光标后面 |
P | 将指定缓冲区的内容放到当前光标的位置之上;整行文本放在行下面,若是非整行文本则放在光标后面 |
u | 撤销最近的修改,针对所有修改 |
U | 撤销对当前行上做的所有修改 |
r | 替换光标位置上的一个字符,但不会进入 insert 模式,先按 r 再按要替换成的字符,也可以 2r 把光标后面两个都替换掉 |
R | 替换从光标位置开始的字符,同时改变 vim 到文本输入模式 |
. | 重复上一次的修改 -- 注意该命令是英文符号点 |
>> | 向右移动本行一段距离 |
<< | 向左移动本行一段距离 |
翻页命令
命令 | 作用 |
---|---|
Ctrl + d | 将光标向下翻半屏,通常每次翻屏12行 |
Ctrl + u | 将光标向上翻半屏,通常每次翻屏12行 |
Ctrl + f | 将光标向下翻满屏,通常每次翻屏24行 |
Ctrl + b | 将光标向上翻满屏,通常每次翻屏24行 |
输入模式
这个模式是我们熟悉的文本编辑器的模式,就是可以输入任何你想输入的内容。进入这个模式有几种方法,最常用的方法是按字母键 i
( i、I、a、A、o、O
都可以进入插入模式,只是所处的位置不同),退出这种模式,只需要按下 Esc
键。
命令 | 作用 |
---|---|
i | 在光标的左侧 输入文本,光标右侧文本向右移动 |
I | 在光标所在行的行首 输入文本,相当于在行首执行了 i 命令 |
a | 在光标的右侧 输入文本 |
A | 在光标所在行的尾部 进行输入文本,相当于在光标行尾执行a命令 |
o | 在光标所在行的下一行 增添新的一行,光标停留在新行的行首 |
O | 在光标所在行的上一行 增添新的一行,光标停留在新行的行首 |
输入模式(Insert mode)
没什么可说的了,就是进入了编辑模式,可以自由编辑了.
底线命令模式
vim
的底线命令模式:在命令模式下按:
(注意是英文冒号),此时vim的窗口左下方会出现一个:
符号,这时就已经进入了底线命令模式了.
注意: 指令执行之后会把自动返回到命令行模式的。
作用: 底线命令模式可以对文件中指定的内容进行保存、替换、查询、删除等等操作。
常用命令
命令 | 作用 |
---|---|
:q | 退出 vim 编辑器 |
:q! | 不保存文件,直接退出 vim 编辑器 |
:w | 只保存文件,但不退出 vim 编辑器 |
:wq | 保存文件且退出 vim 编辑器 |
ZZ | 保存文件且退出 vim 编辑器 |
:start,endd | 从第 start 行开始到 end 行进行删除操作 最后一个 d 表示删除,如 :3,4d |
:%d | 清空文件内容(跳到行首 dG 执行也可删除) |
:! command |
暂时离开vim编辑器去到指令模式下执行 command 命令显示结果,如 :!ls |
😕string |
从文件首部开始查找到尾部;按 n 键可以跳到下一个,N 上一个,另外按 / 键后,按上下键可以找到以前查找的记录,同样的也有记录 |
:?string |
同上,从当前光标向文件首部查找 |
:%s/word1 /word2 /g |
从文件首到尾替换每一行的 word1为 word2 |
:set nu | 显示行号 也可以输入 set number |
:set nonu | 取消行号 |
:set ai/noai | 开启/关闭自动缩进 |
其他模式
ctrl + v
进入 块选择模式,我们通过一个案例来展示这个模式的基本使用。
vim 中批量添加注释
批量注释:
1、ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,
2、再按大写的 I 进入行首插入模式输入注释符号;例如:#号或者//(双斜线),
3、输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释。
批量取消注释:
1、ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,
2、按 d 即可删除注释。
常用命令演示
删除
## 字符和单词删除
d^ # 删除当前光标到行首全部单词
d$ # 删除当前光标到行尾的全部单词
dw # 删除当前光标后面的一个单词
dnw # 删除光标后面指定的n个单词 -- n表示要删除的单词数
## 单行删除
dd # 光标放在要删除的行 直接按 dd
:.d # 删除光标所在行
## 多行删除
3dd # 从光标的位置删除3行
:1,2d # 删除行号为 1到2行的数据
1,2d # 删除行号为 1到2行的数据
dnj # 从当前光标处向下删除n行 -- n表示删除的行数 ,删除3行就是 d3j
dnk # 从当前光标处向上删除n行 -- n表示删除的行数
## 您还可以使用以下字符来指定范围: .(点)-当前行, $-最后一行, %-所有行。
:.d # 删除光标所在行
:.,1d # 删除当前行到文件开头位置
:.,$d # 删除当前行到文件结尾位置
## 模式匹配删除 语法: :g//d 或 :g!//d
## 模式可以是文字匹配或正则表达式,以下是一些示例:
:g/foo/d # 删除所有包含字符串“foo”的行,它还会删除“foo”嵌入较大字词(例如“football”)的行。
:g!/foo/d # 删除所有不包含字符串“foo”的行,它还会删除“foo”嵌入较大字词(例如“football”)的行。
:g/^#/d # 从Bash脚本中删除所有注释,模式^#表示每行以#开头
:g/^$/d # 删除所有空白行,模式^$匹配所有空行。
:g/^\s*$/d # 删除所有空白行,与前面的命令不同,这还将删除具有零个或多个空格字符(\s*)的空白行
:g/^\s*#/d # 删除所有注释行
## 清空文件
dG
:%d
替换
语法为 : [addr]s/源字符串/目的字符串/[option]
全局替换命令为: :%s/源字符串/目的字符串/g
[addr]: 表示检索范围,省略时表示当前行。
“1,20” :表示从第1行到20行;
“%” :表示整个文件,同“1,$”;
“. ,$” :从当前行到文件尾;
[option] :表示操作类型