vi、vim编辑器详细解析

228 阅读6分钟

vi、vim——文本编辑器

vi、vim是什么

文本编辑器的作用

在Linux中一切皆是文件,因此在修改和维护文件时就需要用到文本编辑器了。

  • 创建和修改系统中的文件
  • 维护系统中的各种配置文件

vi和vim的区别

vi:vi是最初的文本编辑器,1. 是UNIX和类UNIX系统上的标准编辑器,它简单高效,但功能相对较少。

vim:vim是vi的升级版本,vim大多可以兼容vi,也同时也具备了很多vi没有的功能

为什么推荐使用vim编辑器

  1. 几乎所有的Linux发行版本都内嵌有vin文本编辑器,而其他的编辑器则不一定存在。
  2. vim具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计

vi、vim的工作原理

vi、vim的三种工作模式

命令模式:

启动vi/vim时就默认进入命令模式,在这个模式下输入的都当作命令来处理,该模式是另外两模式的主。(该模式中可以处理光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作。)

编辑模式:

开启vim后在其命令模式下输入i(或I, o, O, a, A, r, R)键,方可进入编辑模式创建文件或者修改文件。需要退出编辑模式到命令模式,可输入esc键。

末行模式:

从命令模式进入末行模式需要输入英文的":"键进入,在该模式下,可进行读取、查找替换文件内容、保存文件、 退出编辑器等操作。

3340f44912bcfa6edbf85ef56aa697c.png

三个模式下的基础操作

命令模式下:

:此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。

操作功能操作键效果
光标跳转数字+G跳转到字行
gg跳转第一行
数字+w单词间跳转
复制y复制
yy复制一行
yw复制一个单词
数字+10yy按照行数复制
粘贴p在光标下一行粘贴
P(大写)在光标上一行粘贴
撤回u撤回上次操作
ctrl+r撤回后撤回(反悔撤回)
剪切(删除)dddd后按p是剪切,什么都不做是删除
数字+dd根据行数剪切
dw剪切一个单词
保存退出ZZ(大写)保存退出
ZQ保存不退出
行首行尾跳转"^"跳转至行首第一个非空白字符
0跳转至行首(包括空格)
$跳转至行尾
end键跳转至行尾
翻屏ctrl+f向页尾翻一屏
ctrrl+b向页首翻一屏
删除x删一个字符
x+p交换字符顺序
大小写~大小写转换
替换字符r替换字符
R替换模式 可以一直替换
合并J合并两行,相当于删换行符$

命令模式切换至输入模式

输入模式:

使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令,当编辑文件完成后按 Esc 键即可返回命令模式。

快捷键用法描述
i在光标前处插入
I在光标当行行首进行操作
o在光标的下一行操作
O在光标的上一行进行操作
a在当前光标所在位置之后插入
A行尾插入命令

末行模式

文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按":"(英文冒号)键,此时 Vim 窗口的左下方出现一个“:”符号,这时就可以输入相关指令进行操作了。

快捷键功能效果
:q退出不保存
:q!强制退出不保存
:w保存
:/精确查找并高亮
nohl取消高亮
:w 新文件名另存为新文件
:wq 或 :zz 或 :x保存并退出
:e 其他文件名(如果已修改需要加e!)打开新文件进行编辑
:r 其他文件名在当前文件中读入其他文件内容
: [替换范围] s/旧内容/新内容[/g]将旧内容替换为新内容
:s /old/new替换当前行中的第一个old改为new
:s /old/new/g替换当前行中的所有old改为new(/@#都可做分隔符)
:#,# s/old/new/g#到#行所有old改为new
:% s/old/new/g%代表全文,全文替换所有old改为new
:$ s/AB/CD/g$表示最后一行,最后一行的AB替换为CD
:$-1 s/AB/CD/g$-1表示倒数第二行,倒数第二行进行替换
:# d删除 第#行
:#,# d删除#到#行
:#,# y复制三到6 行
:set nu (:set nonu取消设置)加行号 不显示行号
:set cul (:set nocul 取消设置)光标所在行有下划线(取消)
:set ai对齐 回车后和上一行对齐
:set all可以看所有的一些帮助
:set key=password加密码
:set key=空白取消密码
:set tabstop=4 (set ts=4)按tab键,一次为四个空格
:!< command>在vim内执行外部命令
:!ls按回车后会列出当前目录内容
:!hostname按回车后显示当前主机名
:!date按回车后显示当前日期
:1,3 co 10将第1~3行复制粘贴到第10行下方(co表示copy)
:1,3 m 10将第1~3行剪切到第10行下方(m表示move

可视模式:

市场环境中不太实用的

  • v 面向字符,-- VISUAL -- (逐个选择字符)
  • V 面向整行,-- VISUAL LINE --(逐个选择整行)
  • ctrl-v 面向块,-- VISUAL BLOCK --(任意行数字数选择)

### 配置文件定制vim的工作特性

Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。

  • 系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);
  • 用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。
/etc/.vimrc #全局
~/.vimrc #个人

创建符合自己需求的配置文件

[root@localhost ~]# ls -a
.                .bashrc    .ICEauthority         .Xauthority  文档
..               .cache     initial-setup-ks.cfg  zhubao       下载
anaconda-ks.cfg  .config    .local                公共         音乐
.bash_history    .cshrc     .mozilla              模板         桌面
.bash_logout     .dbus      .tcshrc               视频
.bash_profile    .esd_auth  .viminfo              图片
[root@localhost ~]# vim .vimrc    //在个人home目录里创建一个.vimre的文件

输入需要添加的功能 a image.png

设置参数功能描述
set nu显示行号
set cul突出显示当前行。
set ai设置自动缩进,即每行的缩进同上一节相同。
set ts=4设置 Tab 键宽度为 4 个空格。

末行模式 查找替换

通式 :  范围 s /旧字符/新字符/修饰符

旧字符可以使用正则表达式表示,但是新字符是不可使用的,新字符必须是确定的字符。

范围结果
不写默认处理光标所在行
%代表全文
$最后一行
$-1最后一行减一(倒数第二行)
nn代表数字
3.103到10行
.代表当前行
.,$-1当前行倒数第二行
#,+#左侧代表起始行加上右侧表示的行数

s/// 可以换成, s@@@ 或 s###,这样避免冲突。

修饰符

  • g:全局替换
  • j:忽略大小写
  • c:替换前询问是否替换