Linux的vim编辑器

news/2025/3/30 18:00:18/文章来源:https://www.cnblogs.com/xiaren/p/18795754

Linux的vi/vim编辑器

  • 基本概念

vim文本编辑器,是由vi编辑器发展演变过来的文本编辑器,因其具有使用简单、功能强大、是 Linux 众多发行版的默认文本编辑器。很多人习惯将 vim 称为 vi,其实 vim 是 vi 的增强版(在 vi 的基础上增加了正则表达式的查找、多窗口的编辑等功能),使用 vim 进行程序开发会更加方便。(注意:Linux系统中是默认安装vi编辑器的,但是需要手动安装vim编辑器,命令:sudo apt install vim)

  • 模式说明

vim有三种工作模式,分别是命令模式、插入模式和编辑模式,具体三种方式的关系图如下:

image

(1) 命令模式

当使用 vi/vim 打开文件时,则默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、l 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。

(2) 输入模式

在输入模式下,Vim 可以对文本执行写操作,类似于在 Windows 系统的文档中输入内容。使Vim 切换到输入模式的方法:在命令模式状态下输入 i、I、a、A、o、O 等插入命令,当编辑文件完成后按 Esc 键即可返回命令模式。

快捷键 功能描述
i 在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I 在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
o 在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O 在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a 在当前光标所在位置之后插入随后输入的文本
A 在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令

(3) 编辑模式

编辑模式用于对文件中的指定内容执行保存、查找或替换等操作。使 Vim 切换到编辑模式的方法:在命令模式状态下按shift+:键,此时 Vim 窗口的左下方出现一个“:”符号,就可以输入相关指令进行操作了。指令执行后 Vim 会自动返回命令模式。

如果想直接返回命令模式,按 Esc 即可。注意:如果无法确定此时为何种模式,只需按一次 Esc 键,即可返回命令模式。

  • 使用流程

(1) 打开文件

利用vi/vim进行文本编辑,涉及到文件的各种操作,前提都是需要提前“打开文件”操作:vi test.c

刚打开文件时默认处于命令模式,此时文件的下方会显示文件的一些信息:文件的总行数和字符数,以及当前光标所在的位置等。

(2) 编辑文件

Vim 提供了大量的编辑快捷键,所有操作大部分在命令模式下进行,主要可分为以下几类:

  1. 查找内容

如果在文件中并没有找到所要查找的字符串,则在文件底部会出现 "Pattern not found" 提示。

在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找 "shenchao" 和 "ShenChao" 会得到不同的结果。如果想忽略大小写,则输入命令 ":set ic";调整回来输入":set noic"。

如果在字符串中出现特殊符号,则需要加上转义字符 ""。常见的特殊符号有 \、*、?、$ 等。如果出现这些字符,例如,要查找字符串 "10$",则需要在命令模式中输入 "/10$"。

基本用法:切换到编辑模式后:?带查找的内容

*快捷键* *功能描述*
/abc 从光标所在位置向前查找字符串 abc
/^abc 查找以 abc 为行首的行
/abc$ 查找以 abc 为行尾的行
?abc 从光标所在为主向后查找字符串 abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指定
  1. 替换文本
*快捷键* *功能描述*
r 替换光标所在位置的字符
R 从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
😒/a1/a2/g 将当前光标所在行中的所有 a1 用 a2 替换
:n1,n2s/a1/a2/g 将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
😒/a1/a2/g 将文件中所有的 a1 都用 a2 替换
  1. 删除文本

需要注意的是被删除的内容并没有真正删除,都放在了剪贴板中。将光标移动到指定位置处,按下 "p" 键,就可以将刚才删除的内容又粘贴到此处。

*快捷键* *功能描述*
x 删除光标所在位置的字符
dd 删除光标所在行
ndd 删除当前行(包括此行)后 n 行文本
dG 删除光标所在行一直到文件末尾的所有内容
D 删除光标位置到行尾的内容
:a1,a2d 函数从 a1 行到 a2 行的文本内容
  1. 复制粘贴
*快捷键* *功能描述*
p 将剪贴板中的内容粘贴到光标后
P(大写) 将剪贴板中的内容粘贴到光标前
y 复制已选中的文本到剪贴板
yy 将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw 将光标位置的单词复制到剪贴板
  1. 保存退出

需要注意:vi/vim 的保存和退出是在编辑模式中进行的,"w!" 和 "wq!" 等类似的指令,通常用于对文件没有写权限的时候(显示 readonly),但如果你是文件的所有者或者 root 用户,就可以强制执行。

*命令* *功能描述*
:wq 保存并退出 Vim 编辑器
:wq! 保存并强制退出 Vim 编辑器
:q 不保存就退出 Vim 编辑器
:q! 不保存,且强制退出 Vim 编辑器
:w 保存但是不退出 Vim 编辑器
:w! 强制保存文本
:w filename 另存到 filename 文件
x! 保存文本,并退出 Vim 编辑器,更通用的一个 vim 命令
ZZ 直接退出 Vim 编辑器
  1. 其他常用

某些情况下,可能需要把两行进行连接。比如说,下面的文件中有两行文本,现在需要将其合并成一行(实际上就是将两行间的换行符去掉)。可以直接在命令模式中按下 "J" 键。

如果不小心误删除了文件内容,则可以通过 "u" 键来撤销刚才执行的命令。如果要撤销刚才的多次操作,可以多按几次 "u" 键。

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

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

相关文章

高度场流体模拟

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、原理参考这个论文:《Real-time Simulation of Large Bodies of Water with Small Scale Details》 核心是这两个公式: 我在这篇《…

Navicat将微软数据库MS-SQLServer表内容导入MySQL数据库

前言全局说明一、说明 1.1 环境: Windows 7 旗舰版 MSSQL 2012 Navicat for MySQL 10.1.7二、MySQL准备 用 Navicat 在 mysql 新建数据库,要和 MSSQL 数据库同名注意:编码也要一致2.1 mysql 新建数据 空白处新,建 test 数据库,2.2 数据库右键查看在mysql里新建数据库编码三…

深度解析:通过 AIBrix 多节点部署 DeepSeek-R1 671B 模型

本文详细介绍了如何通过 AIBrix 分布式推理平台实现 DeepSeek-R1 671B 的多节点部署。DeepSeek-R1 通过渐进式训练框架展现出优秀的逻辑推理能力 —— 在 6710 亿总参数量中,其动态激活的 370 亿参数与 128k 上下文窗口,使其在复杂任务处理中表现卓越。然而,如此庞大的模型规…

玄机靶场 第一章 应急响应-webshell查杀

玄机靶场 第一章 应急响应-webshell查杀 1.黑客webshell里面的flag flag2. 黑客使用的什么工具的shell github地址的md5 flag 哥斯拉webshell的特征3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx 发现隐藏4.黑客免杀马完整路径 md5 flag 查看这是一…

玄机靶场 第一章 应急响应-Linux日志分析

玄机靶场 第一章 应急响应-Linux日志分析 1.有多少IP在爆破主机ssh的root帐号,如果有多个使用","分割 /var/log/auth.log里面存放了相关的登录信息 直接下载看根据user=root发现三个ip 网上发现神奇妙妙脚本 cat auth.log.1 | grep -a "Failed password for ro…

【每日一题】20250327

改变不了的事,不值得烦恼。【每日一题】 1.(15分) \(\hspace{0.7cm}\)已知数列 \(\{a_n\}\),\(\{b_n\}\) 和 \(\{c_n\}\) 满足: \[a_{n+1}=\frac14b_n \]\[b_{n+1}=a_n+c_n+\frac12b_n \]\[c_{n+1}=\frac14b_n \]且 \(a_n+b_n+c_{n}=1\),\(a_1=0\),\(b_1=1\),\(\displa…

必看!SpringAI轻松构建MCP Client-Server架构

MCP 这个概念相信大家已经听了无数次了,但不同人会有不同的解释,你可能也是听得云里雾里的。 不过没关系,今天这篇内容会通过 Spring AI 给你实现一个 MCP 的 Client 和 Server 架构,让你彻底搞懂 MCP 的概念,以及学会 MCP 的开发技能。 什么是MCP? MCP 是 Model Context…

国产服务器操作系统CTyunOS,技能值拉满!

新一轮科技革命和产业变革深入发展,数字经济迎来新的发展机遇。其中,以操作系统为代表的关键基础软件是新一代信息技术的灵魂,它不仅构筑起信息技术领域的根基磐石,更在守护关键信息基础设施的安全防线、实现核心技术自主可控中,发挥着不可替代的作用。 作为云服务国家队…

CSS 实现自定义滚动条样式

CSS 实现自定义滚动条样式CSS 实现自定义滚动条样式 要兼容主流浏览器(Chrome、Safari、Edge、Firefox 等),需要综合使用 Webkit 的 ::-webkit-scrollbar 伪元素和 Firefox 支持的 scrollbar-width 以及 scrollbar-color 属性。由于目前主流浏览器中只有 Webkit 内核和 Fire…

重置OpenEuler操作系统的root管理员密码

(1)启动OpenEuler系统或在终端执行重启系统命令reboot,在系统引导界面按“e”键进入内核编辑界面。成功进入内核编辑模式界面,要求输入username,这里输入root,然后要求输入密码,默认密码为openEuler#12。(2)用户名和密码输入正确后进入引导编辑界面:(3)按向下光标,…

Spring 和 Spring Boot 之间的比较

概述 本位我们将讨论标准 Spring 框架和 Spring Boot 之间的区别。 将重点讨论 Spring 的模块,如 MVC 和 Security,在 Spring 中使用时与 在Spring Boot 中使用时有何不同。 什么是 Spring 简而言之,Spring 框架为开发 Java 应用程序提供了全面的基础设施支持。它包含了一些…

出现Invalid bound statement (not found)错误

出现Invalid bound statement (not found)错误时,通常是由于MyBatis无法正确匹配Mapper接口与XML文件的映射关系。以下是具体排查步骤和解决方案: