Linux基础开发工具 --- vim - 详解

news/2025/10/4 9:07:43/文章来源:https://www.cnblogs.com/yxysuanfa/p/19125297

在VS2022上一并达成的,这种从代码编写,编译到调试,运行,将所有功能都集成在一款器具上的工具称之为IDE(集成开发工具)。就是之前我们编写,编译,调试,运行代码都

Linux中的开发工具不是 IDE,而是一个个独立的应用:

写代码的器具为:编辑器 vim,vi(vi 是很老的编辑器)

编译代码的工具为:gcc,g++

调试的工具为:gdb,cgdb

构建工具为:makefile,make,cmake,git

本篇博客主导关于编辑器 vim 的运用,vim 是一个只用来写代码的软件。vim 是一个在终端下编写代码的工具,作为程序员必须掌握一种能够在 linux 后端编写代码的文本编辑器,而 vim是应用最为广泛的后端文本编辑器。要想采用好vim,相关的指令必须掌握。

vim 的三种模式

我们先以 vim 的三种模式为切入点,后面会逐渐扩展其它模式。这三个模式分别是:命令模式,底行模式,插入模式

说,在编辑的时候,命令越多,效率也就越高。为什么命令越多,效率越高呢?基于就是平常我们利用键盘按 123acd 键,屏幕上就呈现123acd;按 ctrl c 和 ctrl v,就是复制粘贴,是快捷操作。实际上我们允许将快捷键理解为指令。显然命令许可增加编辑效率,也就自动化和批量化,越熟悉这些命令,编辑时效率就越高就是命令背后围绕命令来展开的就是。vim 的核心就

1. 模式之间的切换

使用 vim 编写 C 语言的 “hello world” 程序。vim 代码文档,打开文件,编写代码。打开资料之后,默认处在命令模式下,这也是为什么一开始无论我们怎么按动键盘,vim 都不会有反应,基于它将我们输入的东西识别成了非法命令。

插入模式。进入到插入模式后,怎么回到命令模式?按 Esc 键(最左上角)就是当按 i 键,此时就进入了插入模式,并且左下角会显现 -- INSERT -- ,表明此时

故而从命令模式进入插入模式按 i 键,从插入模式回退到命令模式按 Esc 键。

怎么退出命令模式呢?一般情况下,需要从命令模式进入到底层模式,然后输入对应的指令才能退出。如何进入底行模式呢?按 shift ;(一起按),然后再按 q 键,就退出 vim 了。若现在位于底行模式,想进入命令模式,按 Esc 键即可。

所以从命令模式进入底行模式按 : 键,从底行模式回退到命令模式按 Esc 键。

通过应该注意的是插入模式和底行模式不能够直接切换,必须由命令模式作为中介。如此,三种模式之间的切换方式如下图所示:



接下来讲解三种模式用到的指令。

2. 命令模式

在将命令模式的相关指令功能时,先介绍底行模式下的一个命令 ---set nu,其功能为显示代码行数set nonu 机制与 set nu 相反



复制粘贴功能

yy 功能为:复制光标所在行的所有内容

p 功能为:粘贴 yy 所复制的内容到当前所在行的下一行

功能演示:



n + yy功能为:复制光标所处位置的 n 行的内容

n + p 功能为:粘贴 n 行复制的内容

光标移动功能

shift+g(G) 功能为:进入文本末端。功能演示:



gg 功能为:进入文本开始。功能演示:



n shift+g(G) 功能为:定位到第 n 行。功能演示:输入 10 G



shift+4($) 功能为:定位到当前光标所在行的结尾。作用演示:



shift+6(^) 功能为:定位到当前光标所在行的开始。功能演示:



之前介绍的指令都是大范围移动的,有没有局部范围移动的指令?有,按键盘的上下左右键,或者按 hjkl 这四个相邻的键,这四个键的功能分别为:h(左)j(下)k(上)l(右)。推荐使用 hjkl 键来控制光标的局部移动。

可能有人会想,既然有了方向键来控制光标的移动,为什么还要设置 hjkl ?源于在使用键盘时,hjkl 这四个键就在右手所在处,用起来更加的快捷;并且在电脑诞生之初,没有方向键,故而选择hjkl 这四个键来充当方向键。若想问为什么不是 wasd 这四个键,那应该思考它是什么时候作为游戏移动方向键的。

通过按 hjkl 这四个键,光标每次只能移动一个字符,若目标行的代码很长,想要移动到改行的某一处,岂不是要移很久?我们能够按其它键,实现快速移动的效果。

w 功能为:按照“单词”为单位,向右移动b 功能为:按照”单词“为单位,向左移动

一个单词。在利用 w 和 b 键时,特殊字符只能一个个跳过,数字和字母组成的串可以一并跳过。机制演示:就是这里的“单词“是什么意思?由字母和数字组成的串是一个单词,单独的特殊字符



n w/b 功能为:以“单词”为单位,向右/左移动n个单词

删除和撤销功能

dd 功能为:删除光标所在行的内容。功能演示:



n dd 功能为:删除从光标所在行开始的 n 行的内容。功能演示:5 dd



若后悔之前所执行的操作,按 u键,功能为:撤销之前执行的操作;若对刚刚的撤销操控又后悔了,按ctrl r键,特性为:撤销 u 的操作

将文本的某些内容撤销后,再保存文本内容,这时 ctrl r 键仍热允许达成撤销 u 的执行的机制。只要没有退出 vim,随时都可以撤销,一旦退出 vim ,就无法撤销了。

若不想删除整行内容,只想删除某个字符,按 x 键,功能为:删除光标所在的字符(持续按x键,持续删除)x 删除字符时是从左向右删除,若想要从右向左删除,按shift+x(X)键,能力为:从右向左删除光标所在的字符。机制演示:



n x 功能为:从光标所在位置开始,从左向右连续删除n个字符n shift + x(X) 功能为:从光标所在位置开始,从右向左连续删除 n 个字符

替换和注释功能

shift+`(~)功能为:大小写迅速转换。功能演示:



若在编写代码时,某个字符写错了,想要将它修正,应该怎么办?将光标移动到要修改的字符位置处,按 r 键,进入单词的替换模式,再输入替换字符,这样错误字符就修正完毕了。r 功能为:替换光标所在位置的一个字符。功能演示:



n r 功能为:将光标所在位置的一个字符替换成 n 个替换字符。功能演示:2 r e



若想要修改光标所在行的内容,按 shift+r(R)键,进入替换模式,之后会在文本的左下角显示 --REPLACE-- 表示当前处于替换模式。shift+r(R) 功能为:让 vim 进入替换模式,进行批量化的内容替换。若想要退出替换模式,回到命令模式,按 Esc 键。

ctrl v功能为:进入视图模式,进入之后文本的左下角会表明 -- VISUAL BLOCK --,表示当前处于替换模式。进入视图模式后,按 hjkl 键选中区域,之后按shift+i(I)键快速进入到插入模式,再输入 // ,再按 Esc 键,便就做完了批量化注释。功能演示:



位于视图模式下,使用 hjkl 键选择区域,再按 d 键,便完成了批量化去注释。功能演示:



若想要将从第 m 行到第 n 行的内容注释掉,输入 (m-n) j选中区域,shift+i ,//,Esc,完成大区域的注释。ctrl v 进入视图模式,按 hjkl 键选择区域,按 d 键,完成大区域的去注释。

通过在视图模式下,既然能够批量化的注释,自然也就许可批量化的增加文本中的内容,选中区域,输入内容,将选中的区域都增加新增内容。功能演示:



3. 底行模式

w 功能为:保存文本文件q 功能为:退出文本文件wq 功能为:保存并退出文本文件。当在退出前,修改了文本文件中的内容且没有保存,此时按 q 键,会显示:



w! 功能为:强制保存q! 功能为:强制退出wq! 功能为:强制保存并退出。这三个指令都是用来处理没有文本的权限时,怎么保存和退出文本。

对于普通用户,若去掉了对 code.c 文件的 r 权限,然后使用 vim 打开 code.c 文件,会发现文档里面什么都没有,这是因为没有文件的 r 权限。

若往档案中写入内容,然后再保存,会显示:就是加上对 code.c 的 r 权限,去掉对 code.c 的 w 权限,然后运用 vim 打开 code.c 文件,会发现能够查看到资料中的内容,只



显示仅有只读权限。若想要退出输入 q! ,强制退出。

若在使用 vim 编写程序时,不小心退出了 XShell 软件,且文本文件中的内容没有保存,此时再重新登陆 XShell ,用 vim 打开文本文件,会出现以下内容:



Found a swap file by the name ".test.c.swp" 发现了一个 swp 资料,vim 在关闭的时候,将我们刚刚写的临时文件保存了起来。最下面几个单词的意思分别为:

1. Open Read-Only:以只读的方式打开

2. Edit anyway:强制编辑

3. Recover:恢复之前未保存的修改

4. Delete it:删除swap文档

5. Quit:退出

6. Abort:终止

以 . 开头,若想要查看输入 ls -al 指令:就是输入 r/R 之后,打开文本文件,接着保存并退出;当再次打开时,它仍然会出现相同的内容,这是为什么?因为当 vim 闪退时,会默认在当前目录下生成一个临时文件。但是输入 ll 指令查看时,为什么看不见呀?由于这个临时文件



.test.c.swp 就是 vim 生成的临时文件,若不想再显示那些内容,删除 swp 文件即可。

/key 功能为:匹配搜索,按 n 键自动跳到包含 key 内容所在的行处功能演示:



!cmd(任意指令) 功能为:不退出vim,直接执行cmd命令。效果演示:



%s/dst/src/g 功能为:将文本文件中所有的 dst 都替换成 src。功能演示:%s/hello/666/g



vim 文件名,打开该文件,不往里面写入内容。直接 !q 退出,若该资料本身不存在,则该路径下不会新建同名文件;!wq 强制保存并退出,若该档案本身不存在,则会在该路径下新建同名文件。所以在使用 vim 编写代码时,不应该先 touch 一个档案,然后再 vim 打开该文件,可以直接vim 文件名。

vs文件名 功能为:分屏,建立多文件编写代码。将屏幕分成两个屏:



光标位于哪个分屏,此时就在操作哪个分屏。若想将光标从一个分屏移动到另一个分屏,按ctrl ww ,功能为:选中分屏通过。再输入 vs 文件名,分成三个屏,还能够分成4个屏甚至更多,退出并保存这些文件后,会发现在当前路径下生成了3个文档:



当退出 vim 后,光标在第 n 行,退出之后再次打开,光标还在原来的位置。若想要打开文本文件时光标就位于某行位置,可以输入vim 文件名 +n,使光标定位到 n 行。功能演示:



4. 插入模式

插入模式不必多说,该模式就是写模式。之前曾介绍过由命令模式进入插入模式的一种方法,再来介绍两种方法 a 和 o,aio这三种方法可以由命令模式进入到插入模式。位于命令模式下时,每次退出都需要进入底行模式才行,有更简便的方法的shift+z(Z),等同于shift+; q,直接退出 vim 。

5. 五种模式之间的转化方式

在介绍命令模式中的指令的能力时,提到过另外两种模式替换模式和视图模式。下图展示了这五种模式之间的替换方式:



vim 的便捷配置

什么难事。就是为什么是简单配置,基于 vim 的配置一件非常复杂的事,但如果只是便捷的配置,那不

配置文件的位置:在目录 /etc/ 下,有个名为 vimrc 的文件,这是框架中公共的 vim 配置⽂件,对所有用户都管用;而在每个用户的主目录下,都允许自己建立私有的配置文件,命名为:“.vimrc”。例如,/root 目录下,通常已经存在⼀个.vimrc 资料,如果不存在,则自己创建。

在 zs 普通账户下配置 vim:

用 vim 打开某文本文件,里面什么都没有:



演示 vim 的简单的配置:

一般在用户的家目录下,会保存着一个隐藏的临时目录,当前 zs 的家目录下并没有想要看到的:



如果没有,自己创建 touch .vimrc。打开 .vimrc ,向里面写入配置项 set nu,显示代码行号。再打开文本文件,编写代码时就自动显示行号了:



可以运用 which 指令查看到 vim 所在的目录:



这也就说明了vim实际上就是一个指令。

当我们以普通用户的身份打开 vim 时,vim 命令就会去当前用户的家目录下去查找配置文件 .vimrc。

当 vim 启动时,会将 .vimrc 文件中的调整项作为 vim 启动的原始配置文件。因此将配置项写入.vimrc配置文件中就是对vim做基础配置,本质就

可以使用 AI 来搜索你想要添加的配置项。

但是实际上大家自己做的 vim 的配置,基本上很难用,因为没有我们最需要的作用,如语法提醒,自动补齐。在实际上使用 vim 时,用到的都是强大的功能,这些都需要 vim 插件,想要什么插件可以通过 AI 获取。再安装这些插件时,不建议直接安装到系统里,可以在当前目录下,创建一个.vim 目录,将下载的插件安装到 .vim 目录中,然后再配置 .vimrc 中的配置项,再在 .vim 目录中引用 .vimrc 。

在学习权限时,提到过普通用户 sudo 进行权限提升时,是默认提升失败的,倘若想要成功,得让 root 用户将普通用户添加到信用用户列表中。怎么添加呢?找到 /etc/sudoers ,打开/etc/sudoers目录,找到下示内容:



按照 100 行所示的格式,添加要添加的用户账号:



添加完毕后,输入wq,保存并退出,会发现退出不了,需要 !wq ,强制保存并退出。

否添加成功:就是来验证



为什么我一个超级用户,在退出 /etc/sudoers 文件时,还要强制退出呢?这与文件的权限有关,root 对该资料只有 r 权限:



如果我们以普通用户的身份,去打开 /etc/sudoers 文件,会发现什么都没有,因为普通用户没有权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025十一集训——Day2模拟赛

赛时: 四个题都很可做的样子, T3好像是原??? OK T1 简单二分,切了。 调 lowerbound 那里 +-1 的细节,8:50 成功过掉大样例。 开 T2。 9:00,想到差分。 诶T2咋是原,就一黄f**k.本文来自博客园,作者:zhangxia…

完整教程:ARM Cortex-M:内存保护单元 (MPU) 发布

完整教程:ARM Cortex-M:内存保护单元 (MPU) 发布pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

【Clion】【文件编码】Clion内置控制台中文字体乱码的解决方案及编码格式调整

View Post【Clion】【文件编码】Clion内置控制台中文字体乱码的解决方案及编码格式调整Clion内置控制台中文字体乱码的解决方案及编码格式调整一、问题描述 在使用Clion时,在保证文件编码,项目编码,属性文件的默认编…

完整教程:JavaWeb零基础学习Day1——HTMLCSS

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

淘宝联盟网站建设源码网站服务器租赁合同

疑问:Mysql多事务默认情况下,同时修改同一条记录运行修改吗?是否要手动加上for update行锁。 猜想:MySQL 会自动对涉及的数据行加上写锁(排他锁),以确保数据的一致性和隔离性。这是在默认的事务…

2025十一集训——Day模拟赛

赛时: 四个题都很可做的样子, T3好像是原??? OK T1 简单二分,切了。 调 lowerbound 那里 +-1 的细节,8:50 成功过掉大样例。 开 T2。本文来自博客园,作者:zhangxiao666,转载请注明原文链接:https://www.cnb…

Qt纯代码实现智能安防集中管理平台/楼宇对讲管理系统/门禁管理/视频监控

一、前言说明 这个项目很多年前就完成的,属于一个定制的项目,最初做的事楼宇对讲相关的功能,后面陆续增加了门禁和视频监控,这些模块加起来,慢慢的形成了一个智能安防集中管理平台的模样,但是确切的说又不够标准…

在织梦网站做静态网页伦敦做网站

文章目录 一、Hazelcast简介1、Hazelcast概述2、Hazelcast之IMDG3、数据分区 二、Hazelcast配置1、maven坐标2、集群搭建(1)组播自动搭建 3、客户端4、集群分组5、其他配置 三、Hazelcast分布式数据结构1、IMap2、IQueue:队列3、MultiMap4、I…

长沙做网站推广代理记账公司注册需要什么条件

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 人工智能(AI)已经成为当今世界最具革命性的技术之一,它正在深刻改变各个行业&#x…

网站流量提升方法vps搭建asp网站

八爪鱼,被动收入,财务自由,现金流,现金流游戏,各银行利率,money,资产负债表,财务自由,资产管理,个人理财,管理个人资产,理财,打造被动收入,躺着赚钱,让钱为我打工

汉文博士词典库源文件已在 github 开放

无版权问题的词典源文件已从城通网盘转存至 Github: https://github.com/wmjordan/Hanbox.Dict 部分词典的编译配置文件需使用汉文博士 7.0 或更新的版本编译。

网站自己怎么制作做网站用asp还是php

3.1 表达式和语句 表达式一共分为三种: (1)变量或常量 运算符构成的计算表达式 (2)new 表达式,结果是一个数组或类的对象。(后面讲) (3)方法调用表达式&…

梧州市建设局网站数据来源网站怎么做脚注

问题描述: 我的团队一直在处理一个包含基于标准库的 SD 卡的项目。最近我们决定迁移到 HAL 并开始了。 幸运的是,我们项目的所有部分都尽可能地更改为 HAL,它们运行良好,但我们不知道为什么 SD 卡不能正常运行。 我们没有更改外设的配置时钟&…

读人形机器人30未来20年

读人形机器人30未来20年1. 长期技术可能性 1.1. AI与认知计算的进步1.1.1. 人形机器人进化的核心在于AI和认知计算的进步1.1.2. 未来的机器人将拥有比现今复杂得多的AI系统,能够进行细致入微的理解、基于情境的推理和…

Flutter + Ollama:开启本地AI的全平台新纪元 —— 从零剖析一款现代化AI客户端的技能奥秘

Flutter + Ollama:开启本地AI的全平台新纪元 —— 从零剖析一款现代化AI客户端的技能奥秘pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

wordpress站点改名推广方案框架

from: https://blog.csdn.net/dcrmg/article/details/52851913工业相机基础知识(一) CCD与CMOS 工业相机按照图像的传感器元件的不同分为CCD(Charge Coupled Device,电荷耦合元件)和CMOS(金属氧化物半导体元件&#xf…

免费网站建设 百度一下手机功能网站案例

如何使用Python获取计算机用户名 一、Python自带的getpass模块可以用于获取用户输入的密码,但是它同样可以用来获取计算机用户名。 import getpassuser getpass.getuser() print("计算机用户名为:", user)二、使用os模块获取用户名 Python的…

产业园区招商团队快躺平了 - 智慧园区

招商人,你是否也曾被这些招商广告刷屏? “0租金”、“0物业费”; “水电暖全免”、“装免期10个月”; “交押金进即可办理入住”; 2025园区招商已经进入白热化阶段,园区之间的竞争早已不在是价值的比拼,已然演变…

DaYe-PhotoStudio-2 v2.0.0 安装教程(64位/AMD64)详细步骤

DaYe-PhotoStudio-2 v2.0.0 安装教程(64位/AMD64)详细步骤​DaYe-PhotoStudio-2​ 是一款 ​专业的照片编辑与处理软件,适用于 ​Windows 64位系统​(amd64/x64)。最新版本为 ​v2.0.0,提供了丰富的图像编辑功能…