欢迎光临
我们一直在努力

【Linux 系统篇(七)】基础开发工具(二) —— vim编辑器详解

在这里插入图片描述

大家好,欢迎来到 huangjin007_ 的博客
⭐
个人主页:huangjin007_
🔥
文章收录专栏:Linux 内功修炼手册(系统篇)

总会有一些坚持能从冰封的土地里培育出十万朵怒放的蔷薇


Linux 系统篇(七 ) —— vim编辑器详解

文章目录

  • Linux 系统篇(七 ) —— vim编辑器详解
    • 1. vi 与 vim
    • 2. Vim 的核心设计
      • 2.1 三种必会模式
      • 2.2 模式切换一览
      • 2.3 其他模式简介
    • 3. Vim 基本操作:打开、切换、退出
      • 3.1 用 Vim 打开文件
      • 3.2 模式切换第一步:进入插入模式
      • 3.3 回到命令模式
      • 3.4 退出 Vim
    • 4. 命令模式(正常模式)命令全集
      • 4.1 进入插入模式
      • 4.2 光标移动
      • 4.3 删除文字
      • 4.4 复制与粘贴
      • 4.5 替换与更改
      • 4.6 撤销与重做
      • 4.7 其他实用命令
      • 4.8 可视块模式(Visual Block)批量操作
    • 5. 底行模式命令集
      • 5.1 保存与退出
      • 5.2 显示与取消行号
      • 5.3 跳转到指定行
      • 5.4 查找字符串
      • 5.5 全局替换
      • 5.6 执行外部命令与分屏
    • 6. Vim 操作总结
    • 7. 简单 Vim 配置
      • 7.1 配置文件位置
      • 7.2 常用配置选项
    • 结语:

1. vi 与 vim

  很多人会问:vi 和 vim 到底是不是一回事?

  简单地说,vim 是 vi 的超级加强版。 vi是 Unix 系统早期就有的标准文本编辑器,几乎每个类 Unix 系统都自带。后来 Bram Moolenaar 在 vi 的基础上开发了 vim(即“改进版 vi”),它不仅完全兼容 vi 的所有指令,还加入了很多现代编辑器才有的特性。


2. Vim 的核心设计

  Vim 是一款多模式编辑器,同一个按键在不同模式下功能完全不同。

2.1 三种必会模式

我们主要讲解 三种核心模式:

模式名称英文名功能定位通俗理解
命令模式(正常/普通模式) Normal mode 控制光标移动、删除、复制、粘贴,以及进入其他模式 “指挥官模式”,一切操作的司令部
插入模式 Insert mode 真正输入、修改文字 “打字模式”,键盘上的字母会变成文档内容
底行模式 Last line mode 执行保存、退出、查找、替换、设置等命令 “命令行模式”,窗口最底下一行输入指令

  当你打开 Vim 时,默认进入的就是命令模式。

2.2 模式切换一览

  从命令模式出发,可以切换到其他任何模式。按 Esc 键则可以从任何模式返回命令模式。

在这里插入图片描述

2.3 其他模式简介

  • 替换模式:按 Shift + r(即大写 R)进入,输入的字符会覆盖光标位置的原有内容,而不是插入。适合修正小段文字。
  • 可视模式:按 v 进入字符选择,按 V 进入行选择,按 Ctrl + v 进入列块选择(矩形区域)。选定后可以批量删除、复制、缩进等。

3. Vim 基本操作:打开、切换、退出

3.1 用 Vim 打开文件

$ vim test.c

  回车后,你会看到全屏幕的 Vim 界面。如果 test.c 不存在,Vim 会新建一个空白缓冲区,等你保存时再创建文件。此时你处于命令模式,直接敲键盘不会输入任何文字。

3.2 模式切换第一步:进入插入模式

  从命令模式切换到插入模式,有三种最基础的方式:

按键功能
i 在光标当前位置前开始插入
a 在光标当前位置的下一个位置(即光标后)开始插入
o 在当前行下方新开一行,并定位到行首开始插入

  这三个按键是使用频率最高的进入插入模式的命令。

补充:

按键功能
Shift + i(即 I) 跳到当前行的行首(第一个非空字符处)并进入插入模式
Shift + a(即 A) 跳到当前行的行尾并进入插入模式

3.3 回到命令模式

  输入完后,如果你想退出插入模式。按 Esc 键即可返回命令模式,左下角的 — INSERT — 会消失。

3.4 退出 Vim

  在命令模式下,按 :(Shift + ;)进入底行模式,光标会跑到屏幕最下方。你可以输入:

命令作用
:w write,保存当前文件但不退出
:q quit,退出 Vim(如果文件修改过没保存,会报错不让退)
:wq 保存并退出
:q! 强制退出,不保存修改(当你一通乱改想直接跑路时)
😡 保存并退出(功能同 :wq,文件未修改时不会更新时间戳)

  另外,命令模式下还有一个不需要冒号的快捷退出方式:ZZ(大写 Z 按两次),同样是保存并退出。


4. 命令模式(正常模式)命令全集

4.1 进入插入模式

  前面已经介绍了 i、a、o、I、A。这里再补充一个:

按键功能
Shift + o(即 O) 在当前行上方新开一行,并进入插入模式

  这样,你就有了从当前位置、行首、行尾、上行、下行等各个角度开始输入文字的本领。

4.2 光标移动

  Vim 的设计方向之一就是尽量不离开键盘主区,所以它推荐使用 h、j、k、l 四个字母键来移动光标,替代方向键。

  为什么这么设计?因为在 Vim 诞生的年代,某些键盘根本没有独立的方向键;而且手指不移动可以更快。

在这里插入图片描述

  除了单步移动,你还可以在它们前面加数字:5j 表示向下移动 5 行,10l 表示向右移动 10 个字符。

行内快速移动

按键功能
^ (Shift + 6) 移动到本行第一个非空白字符(即行首内容)
$ (Shift + 4) 移动到本行行尾
0(数字零) 移动到本行绝对行首(包括空白)

单词级移动

按键功能英文
w 光标跳到下一个单词的开头 word
b 光标跳回上一个单词的开头 backward
e 光标跳到当前(或下一个)单词的结尾 end

组合数字:3w 就是往后跳 3 个单词。

页级翻屏

按键功能
Ctrl + f 屏幕向前翻一页(forward)
Ctrl + b 屏幕向后翻一页(backward)
Ctrl + d 屏幕向下翻半页(down)
Ctrl + u 屏幕向上翻半页(up)

文件首尾跳转

按键功能
gg 快速跳到文件开头
G (Shift + g) 快速跳到文件末尾
ngg 或 nG 跳转到第 n 行,如 15G 跳到第 15 行行首

  另外,按 Ctrl + g 可以在底部显示当前文件名、总行数、当前行号以及当前位置的百分比。

4.3 删除文字

按键功能
x 删除光标所在位置的一个字符(相当于 Delete 键)
X (Shift + x) 删除光标前面的一个字符(相当于 Backspace 键)
nx 或 nX 连续删除 n 个字符,如 6x 删除从光标开始(含)向后 6 个字符;20X 删除光标前 20 个字符
dd 剪切(删除)光标所在一整行
ndd 从当前行开始,向下连续删除 n 行,例如 3dd 删除 3 行
dw 删除从光标到当前单词结尾的字符(包括空格)
d$ 或 D 删除从光标到行尾
d^ 删除从光标到行首(非空白处)

  理解:d 是“删除”的动作,后面跟的字母表示“范围”。例如 dw 可以读作“删除一个单词(word)”

  dd 其实是把整行内容放进了“剪贴板”(Vim 里叫寄存器),所以你删掉的这一行,一会儿用 p 还能粘贴回来,相当于“剪切”操作。

4.4 复制与粘贴

按键功能
yy 复制光标所在整行
nyy 复制从当前行开始的 n 行,如 6yy 复制 6 行
yw 复制从光标到当前单词结尾的字符
nyw 复制 n 个单词
y$ 复制从光标到行尾
y^ 复制从光标到行首
p 粘贴到光标所在位置的下方(如果复制的是整行);如果是单词或字符则粘贴到光标后
P (Shift + p) 粘贴到光标所在位置的上方(整行),或光标前(字符)

  关键规则:所有复制命令(y 系列)都必须与粘贴命令 p(或 P)配合使用,才能完成“复制–粘贴”的全流程。

4.5 替换与更改

按键功能
r 替换光标所在的一个字符。按下 r 后再输入一个新字符,原字符就被替换了,然后自动回到命令模式。
nr 从光标起,连续替换 n 个字符为同一个新字符。例如 5r* 会将后面 5 个字符都变成星号。
R (Shift + r) 进入替换模式,从此你输入的内容会逐个覆盖光标位置的原有字符,直到按 Esc 退出。适合修改一整段内容。
cw 更改(change) 从光标到单词结尾的内容。Vim 会先删除这些字符,然后自动进入插入模式等你输入新内容。
cnw 更改 n 个单词,如 c3w 删除光标后的 3 个单词并进入插入模式。
c$ 或 C 更改从光标到行尾的内容。
~ (Shift + ~) 切换光标下字符的大小写,并按一下向右移动一格。

  c 系列命令可以理解为“先删除后插入”,它比单纯删除再按 i 更快捷。

4.6 撤销与重做

按键功能
u 撤销上一步操作。可以连续按多次,一步步往回退。
Ctrl + r 重做刚才被撤销的操作,也就是“撤销的撤销”。

重要提醒:

  • 一旦你退出 Vim(执行了 :q 或关闭终端),所有撤销历史都会被清空。下次再打开这个文件,你将无法用 u 恢复到上一次编辑时的状态。
  • 如果你只保存了文件(:w)而没有退出 Vim,那么撤销历史依然完整可用,你可以继续按 u 回到保存前的某个状态。

4.7 其他实用命令

这里补充几个高频率命令:

按键功能
. (句点) 重复上一次的修改操作。比如你刚刚用 dd 删了一行,移动光标后按 . 就会再删一行。
J (Shift + j) 将下一行合并到当前行末尾,中间加一个空格。
>> 和 << 当前行向右/向左缩进一个 shiftwidth 的距离。
* 和 # (Shift + 3) * 查找光标所在的单词(向下查找),# 向上查找。所有匹配项会被高亮显示,按 n 继续找下一个。

4.8 可视块模式(Visual Block)批量操作

进入可视块模式

  在命令模式下,按下 Ctrl + v,左下角会显示 — VISUAL BLOCK –,表示已进入可视块模式。

  理解:进入该模式后,你依然可以像在命令模式下那样移动光标(h/j/k/l、G、数字G、w 等),只不过此时光标移动所覆盖的矩形区域会被高亮选中。简单说:你的光标走到哪里,矩形选区就画到哪里。

批量添加注释(最常用场景)

  假设你要给下面这几行代码批量加上 // 注释:

int a = 1;
int b = 2;
int c = 3;

操作步骤如下:

  • 定位:将光标移动到第一行 int 的 i 上(即你要插入注释符号的列位置)。
  • 进入可视块模式:按下 Ctrl + v。
  • 选中目标行:连续按 j(或 2j)向下选中 3 行。你会发现,光标所过的每一行都在同一列位置被高亮成了一个细长矩形。
  • 进入块插入模式:按下 Shift + i(即大写 I)。此时你会发现只有第一行出现了闪烁的光标,其他行暂时变暗。
  • 输入注释符号:键入 //(或 #,根据你的语言)。
  • 应用修改:按下 Esc 键。Vim 会瞬间将你输入的 // 添加到刚才选中的每一行的相同列位置,效果如下:
  • //int a = 1;
    //int b = 2;
    //int c = 3;

    总结可视块模式常用步骤

    操作按键序列
    进入块模式 Ctrl + v
    选中矩形区域 用 h/j/k/l、G 等移动光标
    在块前插入相同内容 Shift + i -> 输入文字 -> Esc
    在块后追加相同内容 Shift + a(大写 A)-> 输入文字 -> Esc
    删除块内容 d 或 x
    复制块内容 y
    粘贴块 移动光标后 p

    5. 底行模式命令集

      底行模式让 Vim 变得像一个命令行驱动的编辑器,它处理文件级别的操作。使用前请确保你已经按 Esc 回到命令模式,然后输入 :(冒号),底行出现光标等待命令。

    5.1 保存与退出

      前面已经列过基础命令,这里再整理一遍,加上了一些细节:

    命令说明
    :w 保存文件(写入磁盘)
    :w 文件名 另存为新文件,类似“另存为”
    :q 退出 Vim(若文件修改过会警告)
    :q! 强制退出,丢弃所有修改
    :wq 保存并退出
    😡 保存并退出,若内容未变则不更新文件时间戳
    :wqa 保存所有标签页/分屏并退出

      另外,命令模式下的 ZZ 等价于 :wq,ZQ 等价于 :q!。

    5.2 显示与取消行号

    命令效果
    :set nu 在每一行前面显示行号
    :set nonu 取消行号显示

      这个设置在本次 Vim 会话中有效,关闭后失效。

    5.3 跳转到指定行

      在底行模式下,直接输入一个数字并回车,光标就会跳到该行行首。

    例如:

    :15

      光标立刻跳转到第 15 行。

    5.4 查找字符串

    命令功能
    /关键字 向下查找“关键字”。按回车后,光标跳到第一个匹配项。
    ?关键字 向上查找“关键字”。

      找到第一个匹配后,你可以用以下按键在结果间跳转:

    按键功能
    n 跳到下一个匹配项(与查找方向相同:/ 则向下,? 则向上)
    N (Shift + n) 跳到上一个匹配项(与查找方向相反)

      / 和 ? 的本质区别:/ 是从光标位置向文件末尾方向搜索;? 是从光标位置向文件开头方向搜索。

    5.5 全局替换

    基本语法:

    :[range]s/old/new/[flags]

    • range:作用范围,% 表示全文,也可以用 1,10 表示第 1 到第 10 行。
    • s:substitute(替换)。
    • old:要替换掉的原始文本。
    • new:新的文本。
    • flags:修饰符,常用 g(global,一行内所有匹配都替换,否则只替换每行的第一个匹配),c(confirm,每次替换前询问)。

    最常用命令:

    :%s/hello/hi/g

      将全文中所有 hello 替换为 hi。

      如果你想每次替换前都确认一下,可以:

    :%s/foo/bar/gc

      Vim 会在每个匹配处停下,等你按 y(替换)或 n(跳过)等。

    5.6 执行外部命令与分屏

    命令功能
    :! 命令 临时退出 Vim 去执行一条 shell 命令,执行完毕后按回车返回 Vim。例如 :!ls -l 查看当前目录文件。
    :vs 文件名 垂直分屏,在右侧打开另一个文件(若文件不存在则新建)。使用 Ctrl + ww 可以来回切换光标所在的界面,命令行中的命令是对光标所在的文件执行的 。

    6. Vim 操作总结

    命令模式常用指令速记

    类别命令含义
    移动 h j k l 左 下 上 右
    单词 w b e 下一词首、上一词首、词尾
    行内 0 ^ $ 绝对行首、行首文字、行尾
    文件 gg G nG 文件头、文件尾、第 n 行
    翻页 Ctrl+f/b/d/u 向前/后页,向前/后半页
    插入 i a o I A O 光标前/后/下行/行首/行尾/上行插入
    删除 x X dd dw D 删一字/前一字/整行/一词/至行尾
    复制 yy yw y$ 复制行/词/至行尾
    粘贴 p P 粘贴到后/前
    替换 r R ~ 替换单字/替换模式/大小写切换
    更改 cw c$ C 改一词/至行尾/至行尾
    撤销 u Ctrl+r 撤销/重做
    查找 * # 向下/向上查找当前词

    底行模式常用指令速记

    命令作用
    :w 保存
    :q 退出
    :wq / 😡 保存并退出
    :q! 强制退出
    :set nu / :set nonu 显示/取消行号
    :数字 跳到指定行
    /词 向下查找
    ?词 向上查找
    n / N 下一个/上一个匹配
    :%s/old/new/g 全文替换
    :vs 文件 垂直分屏
    :!命令 执行外部命令

    7. 简单 Vim 配置

      Vim 的外观和行为可以通过配置文件进行定制。

    7.1 配置文件位置

    Vim 有两级配置:

  • 系统级配置:/etc/vimrc(或 /etc/vim/vimrc)。里面的设置对所有用户生效。修改它通常需要 root 权限。
  • 用户级配置:用户主目录下的 .vimrc 文件,如 /root/.vimrc 或 /home/你的用户名/.vimrc。这是你自己的私人配置,修改后只会影响你本人。
  •   一般情况下,我们只动自己家目录下的 .vimrc。如果这个文件不存在,新建一个即可。

    7.2 常用配置选项

    打开 ~/.vimrc,添加以下几行,保存后重启 Vim 即可看到效果。

    " 启用语法高亮(代码关键字彩色显示)
    syntax on

    " 在每一行左侧显示行号
    set number

    " 设置按下 Tab 键时显示的空白宽度为 4 个空格
    set tabstop=4

    " 设置自动缩进和退格时使用的空格数为 4
    set shiftwidth=4

    " 在插入模式下,按 Tab 键插入空格而不是制表符(这样代码缩进不会因不同编辑器而异)
    set expandtab

    " 设置软制表符宽度:当 expandtab 开启时,按一次 Tab 插入 4 个空格
    set softtabstop=4

    " 高亮显示当前行(便于定位光标在哪一行)
    set cursorline

    " 显示右下角的行列信息,如“12,5”表示第12行第5列
    set ruler

    " 输入下面符号时自动补齐另一半
    inoremap ' ''<ESC>i
    inoremap " ""<ESC>i
    inoremap ( ()<ESC>i
    inoremap [ []<ESC>i
    inoremap { {<CR>}<ESC>O


    结语:

      今天的内容到这里就结束了,希望你能有所收获~

    干货整理到手抖,觉得有用的话,赏个三连回回血?__(:ᗤ」ㄥ)_ _

    赞(0)
    未经允许不得转载:171主机测评 » 【Linux 系统篇(七)】基础开发工具(二) —— vim编辑器详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址