关注

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

在这里插入图片描述

大家好,欢迎来到 huangjin007_ 的博客
个人主页:huangjin007_
🔥 文章收录专栏:Linux 内功修炼手册(系统篇)
总会有一些坚持
能从冰封的土地里
培育出十万朵怒放的蔷薇

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


1. vi 与 vim

  很多人会问:vivim 到底是不是一回事?

  简单地说,vimvi 的超级加强版。 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 + ;)进入底行模式,光标会跑到屏幕最下方。你可以输入:

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

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


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

4.1 进入插入模式

  前面已经介绍了 iaoIA。这里再补充一个:

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

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

4.2 光标移动

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

  为什么这么设计?因为在 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)快速跳到文件末尾
nggnG跳转到第 n 行,如 15G 跳到第 15 行行首

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

4.3 删除文字

按键功能
x删除光标所在位置的一个字符(相当于 Delete 键)
X (Shift + x)删除光标前面的一个字符(相当于 Backspace 键)
nxnX连续删除 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/lG数字Gw 等),只不过此时光标移动所覆盖的矩形区域会被高亮选中。简单说:你的光标走到哪里,矩形选区就画到哪里。

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

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

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

操作步骤如下:

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

总结可视块模式常用步骤

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

5. 底行模式命令集

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

5.1 保存与退出

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

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

  另外,命令模式下的 ZZ 等价于 :wqZQ 等价于 :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 / :x保存并退出
:q!强制退出
:set nu / :set nonu显示/取消行号
:数字跳到指定行
/词向下查找
?词向上查找
n / N下一个/上一个匹配
:%s/old/new/g全文替换
:vs 文件垂直分屏
:!命令执行外部命令

7. 简单 Vim 配置

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

7.1 配置文件位置

Vim 有两级配置:

  1. 系统级配置/etc/vimrc(或 /etc/vim/vimrc)。里面的设置对所有用户生效。修改它通常需要 root 权限。
  2. 用户级配置:用户主目录下的 .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

结语:

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

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

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/Huang_jin007/article/details/163136917

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--