Linux 学习笔记 2022-11-29---------Vim文本编辑器及其应用详解
Posted Amo Xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 学习笔记 2022-11-29---------Vim文本编辑器及其应用详解相关的知识,希望对你有一定的参考价值。
目录
- 1. Vim 编辑器概述
- 2. Vi和Vim之间到底有什么关系?
- 3. Vim 编辑器的三种模式(重点)
- 4. 命令模式(重点)
- 5. 末行模式(重点)
- 6. 编辑模式
- 7. 实用功能
- 8. 常用命令速查图
1. Vim 编辑器概述
在 Linux 系统中 一切皆文件, 因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。作为一名 Linux 使用者,我们必须熟练掌握 Linux 中至少一款文本编辑器的用法。对文本编辑器的功能(如查找、剪切和粘贴)了解越多,对我们越有帮助。文本编辑种类:
全屏编辑器: nano(字符工具)、gedit(图形化工具)、vi、vim
行编辑器: sed
可供选择的编辑器不止一种,很多人都找到了自己所喜爱的编辑器。考虑到工作中的实际场景,本文会详细地去介绍 Vim 文本编辑器。Vim文本编辑器,是由 vi 发展演变过来的文本编辑器,因其具有使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器等特点,成功圈住了很多人成为其死忠粉丝。众多 Linux 发行版系统,通常都已经默认安装好了 Vi 或 Vim 文本编辑器,Centos 也不例外,该系统就默认安装有 Vi 文本编辑器,但建议大家使用 Vim。
如果在命令行模式下即控制台终端输入 vim,输出结果为 Command not found,则表示此系统中未安装 Vim。安装方式如下:
yum -y install vim
当命令行中输入 Vim
显示下图所示的画面时,视为 Vim 安装成功。
2. Vi和Vim之间到底有什么关系?
vi 编辑器: vi(visual editor)编辑器通常被简称为 vi,它是 Linux 和 Unix 系统上最基本的文本编辑器,类似于 Windows 系统下的 notepad(记事本)编辑器。Vi 编辑器是 Unix 系统最初的编辑器,它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。尽管 Vi 可能是世界上复杂的编辑器(讨厌它的人是这么认为的),但其拥有的大量特性使其成为 Unix 管理员多年来的支柱性工具。在 GNU 项目中,程序员在将 Vi 编辑器移植到开源世界的同时,决定对其作一些改进。由于改进后的 Vi 不再是以前 Unix 中的那个原始的 Vi 编辑器了,开发人员也就将它重命名为 Vi improved
,也就是 Vim。总之,Vim 是 vi 编辑器的加强版,比 vi 更容易使用,vi 的命令几乎全部都可以在 vim 上使用。
GNU 项目,英文全称为 GNU is Not Unix,简单的说,就是一个开发类 Unix 操作系统的项目,GNU 操作系统是由 GNU 软件包及其第三方的免费软件包组成,所以其最大的特点就是免费。
因此可以这样说,Vim 是由 Vi 发展演变过程的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,已成为众多 Linux 发行版本的标配,本文强烈建议大家系统地学习 Vim。推荐使用 Vim 文本编辑器的原因有很多,比如说:
- 几乎所有的 Linux 发行版都内嵌有 Vim 文本编辑器,而其他的编辑器则不一定存在;
- 在使用 Linux 系统过程中,很多软件的编辑接口都会默认调用 Vim 文件编辑器,例如 crontab、Visudo、edquota 等命令;
- Vim 具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计;
- 使用 Vim 文本编辑器,编辑速度会更快。
所有原因中,最主要的还是第 2 条,就是因为有太多 Linux 命令会默认调用 Vim 作为编辑数据的接口,所以建议我们学会 Vim,在实际的工作场景中,更多也会使用 Vim 文本编辑器。Vim 编辑器学习重点: Vim 重点是光标的移动、模式切换、删除、查找、替换、复制、粘贴、撤销等命令的使用。Vim 功能非常强大,将其灵活运用需要我们不断地练习。参考学习链接:https://www.w3cschool.cn/vim/
3. Vim 编辑器的三种模式(重点)
Vim 是 一个模式编辑器,击键行为是依赖于 Vim的 的 模式。
3.1 三种模式
Vim 中存在三种模式 (大众的认知):命令模式(普通模式 Normal)、编辑模式 (输入/插入模式 Insert)、末行模式 (尾行模式、扩展命令模式 extended command)。
① 命令模式:在该模式下是不能对文件直接编辑的,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以输入快捷键(命令) 对文件内容进行复制、粘贴、替换、删除等操作。注意:当我们使用 Vim 编辑器,打开某个文件后默认进入的模式就是命令模式。 下图所示是在 CentOS 7/8.x 系统中 Vim 处于命令模式的状态示意图。
② 编辑模式:在编辑模式下,Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如下表所示),当编辑文件完成后按 Esc 键即可返回命令模式。
快捷键 | 功能描述 |
---|---|
i | 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动 |
I | 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令 |
o | 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本 |
O | 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 |
a | 在当前光标所在位置之后插入随后输入的文本 |
A | 在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令 |
下图所示即为 Vim 处于输入模式状态下的示意图:
③ 末行模式:末行模式用于对文件中的指定内容执行 搜索、替换、保存、退出、撤销、高亮 等操作。使 Vim 切换到编辑模式的方法是在命令模式状态下按 :
键,此时 Vim 窗口的左下方出现一个 :
符号,这是就可以输入相关指令进行操作了。
指令执行后(即相关指令输入完成按下 Enter 键) Vim 会自动返回命令模式。如想直接返回命令模式,按 Esc 即可。
下图所示为 Vim 进入末行模式后的状态:
对于一些新手朋友来说,经常不知道自己处于什么模式。不论是自己忘了,还是不小心切换了模式,都可以按一次 Esc 键返回命令模式。如果你多按几次 Esc 键后听到 瞪瞪————
的声音,则代表你已经处于命令模式了。
3.2 三种模式之间的关系
3.3 Linux Vim基本操作之文件的打开
使用 Vim 打开文件很简单,例如在命令行模式下打开一个自己编写的文件 profile
,打开方法如下:
[06:57:06 root@centos8 ~]#vim profile
刚打开文件时 Vim 处于命令模式,此时文件的下方会显示文件的一些信息,包括文件的总行数和字符数,以及当前光标所在的位置等,此时可以使用插入命令进入编辑模式对文件进行编辑,如下图所示:
除此之外,我们还可以利用下表中打开文件的命令格式,针对特定情形使用适当的打开方式,可以大大提高我们的效率。
Vim 使用的选项 | 说 明 |
---|---|
vim filename | 打开或新建一个文件,并将光标置于第一行的首部 |
vim -r filename | 恢复上次 vim 打开时崩溃的文件 |
vim -R filename | 把指定的文件以只读方式放入 Vim 编辑器中 |
vim + filename | 打开文件,并将光标置于最后一行的首部 |
vim +n filename | 打开文件,并将光标置于第 n 行的首部 |
vim +/pattern filename | 打幵文件,并将光标置于第一个与 pattern 匹配的位置 |
vim -c command filename | 在对文件进行编辑前,先执行指定的命令 |
补充说明如下:
vim 文件路径1 文件路径2 文件路径3 作用:同时打开多个文件
注意文件的切换::next
代表切换到下一个文件,:prev
代表切换到上一个文件。退出方式,在命令模式下,输入:q
按下回车即可。
使用 Vim 打开文件 如果该文件存在,文件被打开并显示内容,如果该文件不存在,当编辑后第一次存盘时创建它
4. 命令模式(重点)
当我们使用 vim 命令打开文件时,默认进入的就是命令模式。
4.1 光标移动
☆ 上、下、左、右
h 光标向左移动一位
j 光标向下移动一行(以回车为换行符),也就是光标向下移动
k 光标向上移动一行(也就是向上移动)
l 光标向右移动一位
#COMMAND:跳转由#指定的个数的字符 比如: 3l 光标向右移动3个字符
3k 光标向上移动3行
☆ 行内移动
| 快捷键 | 功能描述 |
| :-------- | :---------------------------------------- |
| w 或 W | 光标移动至下一个单词的单词首 |
| b 或 B | 光标移动至上一个单词的单词首 |
| e 或 E | 光标移动至下一个单词的单词尾 |
| nw 或 nW | n 为数字,表示光标向右移动 n 个单词 |
| nb 或 nB | n 为数字,表示光标向左移动 n 个单词 |
| 0 或 ^ | 光标移动至当前行的行首 |
| $ | 光标移动至当前行的行尾 |
| n$ | 光标移动至当前行只有 n 行的行尾,n为数字 |
#COMMAND:由#指定一次跳转的单词数
☆ 光标移动到行首与行尾
光标移动到行首,按键:`shift + 6 或 ^`(T 字母上面的 6,不要按小键盘的 6)。
光标移动到行尾,按键:`shift + 4 或 $`(R 字母的左上角的 4,不是小键盘的 4)
光标移动到首行的行首,按键:`gg`
光标移动到末行的行首,按键:`G / [Shift + G 键]`
数字gg 光标定位到数字对应行数的行首
数字G 光标定位到数字对应行数的行首
:数字 光标定位到数字对应行数的行首
☆ V光标移动至指定字符
fx 光标移动至当前行中下一个 x 字符处
Fx 光标移动至当前行中上一个 x 字符处
☆ 翻屏
向上翻屏,按键:`ctrl + b (before) 或 PgUp`
向下翻屏,按键:`ctrl + f (after) 或 PgDn`
向上翻半屏,按键:`ctrl + u (up)`
向下翻半屏,按键:`ctrl + d (down)`
H Head 屏幕顶部
M Middle 屏幕中间
L Low 屏幕底部
zt: 将光标所在当前行移到屏幕顶端
zz: 将光标所在当前行移到屏幕中间
zb: 将光标所在当前行移到屏幕底端
☆ 向上/下/左/右移动指定的行/列
数字+方向键(上下左右),比如 5+向上方向键,代表将光标向上移动 5 行
6+向下方向键,代表光标向下移动 6 行
☆ 快速定位到指定行(重点)
数字 + G
☆ 以当前行为准向上/下移动指定行
数字 +/-【等价于数字】5- :代表向上移动 5 行,5+(shift + = ) :代表向下移动 5 行
4.2 复制
☆ 复制光标所在行
按键:yy
粘贴:在想要粘贴的地方按下 p 键【将粘贴在光标所在行的下一行】,如果想粘贴在光标所在行之前,则使用 P 键。
☆ 以光标所在行为准(包含当前行),向下复制指定的行数
按键:数字yy,如:5yy
☆ 可视化模式下复制
按键:ctrl + v(可视块)或V(可视行)或v(可视),
然后按下↑ ↓ ← →方向键来选中需要复制的区块,按下y 键进行复制(不要按下yy),
最后按下 p 键粘贴,退出可视模式按下 Esc。
4.3 剪切/删除
x cut 删除光标所在字符,或者选中文字 d(移动命令) delete 删除移动命令对应的内容
☆ 剪切/删除光标所在行☆
按键:dd (删除之后下一行上移)
☆ 剪切/删除光标所在行为准(包含当前行),向下删除/剪切指定的行
按键:数字dd(删除之后下一行上移)
☆ 剪切/删除光标所在的当前行(光标所在位置)之后的内容,但是删除之后下一行不上移
按键:D (删除之后当前行会变成空白行)
☆ 可视化删除
按键:ctrl + v(可视块)或V(可视行)或v(可视),上下左右移动,
按下 D 表示删除选中行,d 表示删选中块,退出可视模式按下 Esc。
v 可视模式 从光标位置开始按照正常模式选择文本
V 可视行模式 选中光标经过的完整行
Ctrl + v 可视块模式 垂直方向选中文本
可视模式下,可以和移动命令连用,例如:ggVG
能够选中所有内容。提示:如果使用可视模式已经选中了一段文本,那么无论使用 d
还是 x
,都可以删除选中文本。删除命令可以和移动命令连用,以下是常见的组合命令:
dw # 从光标位置删除到单词末尾
d0 # 从光标位置删除到一行的起始位置
d # 从光标位置删除到段落结尾
ndd # 从光标位置向下连续删除 n 行
d代码行G # 从光标所在行 删除到 指定代码行 之间的所有代码
d'a # 从光标所在行 删除到 标记a 之间的所有代码
4.4 撤销/恢复
使用 Vim 编辑文件内容时,经常会有如下 2 种需求:
1、 对文件内容做了修改之后,却发现整个修改过程是错误或者没有必要的,想将文件恢复到修改之前的样子。
2、将文件内容恢复之后,经过仔细考虑,又感觉还是刚才修改过的内容更好,想撤销之前做的恢复操作。
撤销:u(小写) undo 的第 1 个字母,功能是撤销最近一次对文本做的修改操作。
恢复:Ctrl+R Redo 的第 1 个字母,功能是恢复最近一次所做的撤销操作。
U(大写) 第一次会撤销对一行文本(光标所在行)做过的全部操作,第二次使用该命令会恢复对该行文本做过的所有操作。
4.5 移动(程序)
1、段落移动。 vim
中使用空行来区分段落,在程序开发时,通常一段功能相关的代码会写在一起 ---- 之间没有空行
上一段
下一段
2、括号切换。 在程序世界中,()
、[]
、 使用频率很高,而且都是成对出现的。
% 括号匹配及切换
3、标记。 在开发时,某一块代码可能 需要稍后处理,例如:编辑、查看,此时先使用 m
增加一个标记,这样可以 在需要时快速地跳转回来 或者 执行其他编辑操作
标记名称可以是 `a~z` 或者 `A~Z` 之间的任意 一个字母
添加了标记的 行如果被删除,标记同时被删除
如果在其他行添加了相同名称的标记,之前添加的标记也会被替换掉
| mx | mark | 添加标记 x,x 是 a~z 或者 A~Z 之间的任意一个字母 |
| 'x | | 直接定位到标记 x 所在位置 |
4.6 替换
r replace 替换当前字符 命令模式
R replace 替换当前行光标后的字符 替换模式
R命令可以进入替换模式,替换完成后,按下ESC可以回到命令模式。
替换命令的作用就是不用进入编辑模式,对文件进行轻量级的修改。
4.7 缩排和重复执行
>> 向右增加缩进
<< 向左减少缩进
. 重复上次命令
缩排命令 在开发程序时,统一增加代码的缩进 比较有用!
- 一次性 在选中代码前增加 4 个空格,就叫做 增加缩进
- 一次性 在选中代码前删除 4 个空格,就叫做 减少缩进
- 在 可视模式 下,缩排命令只需要使用 一个
>
或者<
在程序中,缩进 通常用来表示代码的归属关系 前面空格越少,代码的级别越高,前面空格越多,代码的级别越低。
4.8 退出Vim编辑
ZZ 保存退出
ZQ 不保存退出
5. 末行模式(重点)
进入方式:由命令模式进入,按下 :
或者 /
(表示查找)即可进入末行模式。
退出方式:① 按下 Esc 键 ② 连按 2 次 Esc 键 ③ 删除末行全部输入字符
5.1 末行模式相关功能
保存操作(write)输入:`:w` 保存文件,输入:`:w 路径` 另存为
退出(quit)输入:`:q` 退出文件,默认情况下,退出的时候需要对已经进行修改的文件进行保存 `:w`,然后才能退出
保存并退出 输入:`:wq` 保存并且退出
强制(!)输入:`:q!` 表示强制退出,刚才做的修改操作不做保存。
备注:以后我们在更改系统配置文件时,极有可能会出现一些问题。这个时候就可以使用 ! 强制保存或退出。
调用外部命令(了解)输入:`:!外部命令` 【外部指令写法与在正常终端中执行一样】
搜索/查找 输入:`/关键词`,再按下回车 【按下 / 也是进入末行模式的方式之一】。
在搜索结果中切换 上/下一个结果:N/n (大写 N 代表上一个结果,小写 n 代表 next)。
如果需要取消高亮,则需要在末行模式中输入:`:noh`【no highlight】
⑦ 替换
`:s/搜索的关键词/新的内容` 替换光标所在行的第一处符合条件的内容(只替换1次)。
`:s/搜索的关键词/新的内容/g` 替换光标所在行的全部符合条件的内容
`:%s/搜索的关键词/新的内容` 替换整个文档中每行第一个符合条件的内容
`:%s/搜索的关键词/新的内容/g` 替换整个文档的符合条件的内容
注:% 表示整个文件,g 表示全局(global)如果把末尾的 `g` 改成 `gc` 在替换的时候,会有提示!**推荐使用!**
1. `y` - `yes` 替换
2. `n` - `no` 不替换
3. `a` - `all` 替换所有
4. `q` - `quit` 退出替换
5. `l` - `last` 最后一个,并把光标移动到行首
6. `^E` 向下滚屏
7. `^Y` 向上滚屏
显示行号 输入:`:set nu`,nu 代表 number,如果想取消显示,则输入:`:set nonu`
5.2 分屏命令(了解 平时用的不多 反正我是这样)
使用 分屏命令,可以 同时编辑和查看多个文件
:sp [文件名] split 横向增加分屏
:vsp [文件名] vertical split 纵向增加分屏
1、切换分屏窗口。 分屏窗口都是基于 CTRL + W
这个快捷键的,w
对应的英文单词是 window
| w | window | 切换到下一个窗口 |
| r | reverse | 互换窗口 |
| c | close | 关闭当前窗口,但是不能关闭最后一个窗口 |
| q | quit | 退出当前窗口,如果是最后一个窗口,则关闭 vim |
| o | other | 关闭其他窗口 |
2、调整窗口大小。 分屏窗口都是基于 CTRL + W
这个快捷键的,w
对应的英文单词是 window
| + | | 增加窗口高度 |
| - | | 减少窗口高度 |
| > | | 增加窗口宽度 |
| < | | 减少窗口宽度 |
| = | | 等分窗口大小 |
调整窗口宽高的命令可以和数字连用,例如:`5 CTRL + W +` 连续 5 次增加高度
6. 编辑模式
重点看前 2 个进入方式:i(insert)、a(after)。退出方式:按下 Esc 键。
7. 实用功能
7.1 代码着色
之前说过 Vim 是 Vi 的升级版本,其中比较典型的区别就是 Vim 更加适合 coding,因为 Vim 比 Vi 多一个代码着色的功能,这个功能主要是为程序员提供编程语言升的语法显示效果,如下:
在实际应用中,我们如何控制着色显示与否?syntax:语法,临时调整。开启显示::syntax on
、关闭显示::syntax off
7.2 Vim 计算器
当在编辑文件的时候突然需要使用计算器去计算一些公式,则此时需要用计算器,但是需要退出。我们如何能不退出 vim 编辑器,实现简易计算呢?
答:vim 自身集成了一个简易的计算器。
① 进入编辑模式
② 按下按键 ctrl + R 键
,然后输入=
,此时光标会变到最后一行
③ 输入需要计算的内容,按下回车
7.3 Vim 的配置(重点)
Vim 是一款编辑器,编辑器也是有配置文件的。Vim 配置有三种情况:
在文件打开的时候在末行模式下输出的配置(临时的)
个人配置文件(~/.vimrc,如果没有可以自行新建)set nu
全局配置文件(vim 自带,/etc/vimrc)set nonu
vim 启动 ⇒ 加载 /etc/vimrc ⇒ 加载 ~/.vimrc 文件(vim 加载的顺序)
① 新建好个人配置文件之后进入编辑
touch ~/.vimrc
② 在配置文件中进行配置
set nu
syntax on
配置好之后 vim 打开文件就会永远显示行号。问题:如果某个配置项,在个人配置文件与全局配置文件产生冲突的时候应该以谁为准?测试步骤:在两个配置文件中针对同一个配置项设置不同的值:
① 先在全局的配置中设置不显示行号,在个人的配置文件中设置显示行号,观察结果,最后显示行号:说明以个人为准
② 先在全局中配置显示行号,在个人中设置不显示行号,观察结果,最后的显示是不显示行号,说明以个人为准
结论:如果针对同一个配置项,个人配置文件中存在,则以个人配置文件为准,如果个人配置文件中不存在这一项,则以全局配置文件为准。(个人 > 全局)
7.4 异常退出
什么是异常退出:在编辑文件之后并没有正常的去 wq(保存退出),而是遇到突然关闭终端或者断电的情况,则会显示下面的效果,这个情况称之为异常退出:
解决办法:将交换文件(在编程过程中产生的临时文件)删除掉即可【在上述提示界面按下 D 键,或者使用 rm 指令删除交换文件】
rm -f readme.txt.swp
7.5 别名机制
作用:相当于创建一些属于自己的自定义命令。例如:在 Windows下有 cls 命令,在 Linux 下可能因为没有这个命令而不习惯清屏。现在可以通过别名机制来解决这个问题,可以自己创造出 cls 命令。别名机制依靠一个别名映射文件:~/.bashrc
效果如下所示:
注意:如果想新创造的命令生效,必须要重新登录当前用户或编译 bashrc文件(推荐)
命令:重启/su 切换用户 (switch user)
语法:su [用户名] 不写用户名表示切换到 root 用户
编译 bashrc 文件(推荐)
语法:source ~/.bashrc
提示:起的别名,一定不要是本身已经被系统支持的命令。
7.6 退出方式
回顾:在 vim 中,退出正在编辑的文件可以使用 :q
或者 :wq
。除了上面的这个语法之外,vim 还支持另外一个保存退出 (针对内容) 方法 :x
,说明:
① :x
在文件没有修改的情况下,表示直接退出(等价于 :q),在文件修改的情况下表示保存并退出(:wq)
② 如果文件没有被修改,但是使用 wq 进行退出的话,则文件的修改时间会被更新;但是如果文件没有被修改,使用 x 进行退出的话,则文件修改时间不会被更新的;主要是会混淆用户对文件的修改时间的认定。因此建议以后使用 :x
来进行对文件的保存退出。但是:不要使用 X,不要使用 X,不要使用 X,X 表示对文件进行加密操作。
8. 常用命令速查图
以上是关于Linux 学习笔记 2022-11-29---------Vim文本编辑器及其应用详解的主要内容,如果未能解决你的问题,请参考以下文章
2022-11-29:查找重复的电子邮箱。以下数据中a@b.com是重复的,请写出sql语句。 DROP TABLE IF EXISTS person; CREATE TABLE person (