vi/vim编辑器详解

698 阅读3分钟

1、文本编辑器vi命令

1.1 文本编辑器的作用

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

1.2 Linux中最常用的文本编辑器

  • vi:类UNIX操作系统的默认文本编辑器
  • vim:vim是vi文本编辑器的增强版

1.3 推荐使用vi/vim编辑器的原因

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

2、vi/vim编辑器的工作模式

2.1 vi/vim编辑器的三种工作模式

  • 命令模式

    启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被vim识别为命令,而非输入字符。 该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作。

  • 输入模式

    命令模式按下i, I, o, O, a, A, r, R等任何一个字母之后即可进入输入模式。可以对内容进行编辑。 处于输入模式时,vi编辑器的最后一行会出现“–INSERT–”的状态提示信息。

    按Esc键可以回到命令模式。

  • 末行模式

    命令模式下,按 : (英文冒号)即进入末行模式。在此模式下,可进行读取、查找替换文件内容、保存文件、 退出编辑器等操作。

2.2 不同模式之间的切换

微信图片_20220216151130.png

3、vim命令格式

如果系统最小化安装,vim并没有提前安装,可以使用yum进行安装:

yum install vim -y

命令格式:

vim  [option]  file
vi   [option]  file

常用选项:

1. vim +#    //打开后文件后,让光标处于第#行的行首,+默认行尾
   例如:vim +10 1.txt   //打开后光标处于第10行2. vim +/PATTERN     //让光标处于第一个被PATTERN匹配的行
3. !vim              //打开上一次的文件

4、命令模式下的基本操作

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

操作类型操作键功能
翻页ctrl+f或者Pagedown向下翻页
ctrl+b或者Pageup向上翻页
行内快递跳转Home;0;^跳到本行的行首。Home和0跳到真行首,^跳到第一个非空字符。
按 End 键或$跳转到本行的行尾
2$跳转到下一行的行尾
行间快速跳转1G 或 gg跳转到文件的第一行包括空行
G跳转文件的末尾
#G#代表行号数字,直接跳转到#行
M跳转到当前显示页面的中间行
删除x或delete删除当前光标的字符
#d删除#个字符
dd删除一整行
#dd删除当前光标处向下的#行(包括当前行)
d^删除当前光标之前到行首
d$删除当前光标到行尾
dw删除当前光标处的单词
替换R 或shift+r替换当前光标处文字,会进入替换模式
复制粘贴yy复制当前光标处整行
#yy复制当前光标处向下的#行(包括当前行)
p (小写)粘贴到光标处下一行
P (大写)粘贴到光标处上一行
撤销操作u只取消上一次的操作,可多次使用
UU 取消所有操作
反撤销ctrl+r取消上一次的撤销操作
查找/字符向下查找
?字符向上查找
n向同一方向重复上次的查找指令
N向相反方向重复上次的查找指定

5、命令模式切换至输入模式

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

快捷键功能描述
i在光标前插入随后输入的文本,光标后的文本相应向右移动
I行首插入命令。=^i ,移动到第一个非空字符并进入插入模式
o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a在当前光标所在位置之后插入随后输入的文本
A行尾插入命令

6、末行模式下的基本操作

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

快捷键功能效果
:q退出不保存
:q!强制退出不保存
:w保存
: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)