Linux 学习笔记 2022-11-29---------Vim文本编辑器及其应用详解

Posted Amo Xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 学习笔记 2022-11-29---------Vim文本编辑器及其应用详解相关的知识,希望对你有一定的参考价值。

目录

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 文本编辑器的原因有很多,比如说:

  1. 几乎所有的 Linux 发行版都内嵌有 Vim 文本编辑器,而其他的编辑器则不一定存在;
  2. 在使用 Linux 系统过程中,很多软件的编辑接口都会默认调用 Vim 文件编辑器,例如 crontab、Visudo、edquota 等命令;
  3. Vim 具有编辑程序的能力,会主动利用不同的字体颜色辨别语法的正确性,方便程序设计;
  4. 使用 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 (

最新青龙面板一键搭建及拉库脚本教程----JD挂机一体化平台搭建之篇一2022.11.29

linux学习笔记二

linux学习笔记一

Linux学习笔记

Linux学习笔记