使用 VIM 编辑器对文件进行编辑

news2025/7/18 14:40:11

一、VIM 的两种状态

VIM(vimsual)是 Linux/UNIX 系列 OS 中通用的全屏编辑器。vim 分为两种状态,即命令状态编辑状态,在命令状态下,所键入的字符系统均作命令来处理;而编辑状态则是用来编辑文本资料(类似 word)。

当进入 vim 时,会首先进入命令状态。在命令状态下,输入 i(插入)或 a(添加)可以进入编辑状态(左下角有 - - INSERT - -,或者 - - 插入 - - 代表处于编辑状态);在编辑状态下,按 Esc 键进入命令状态。

在命令状态下,有如下一些常用命令:

  • 新增:
    a :从光标后面开始添加文本
    A :从光标所在行的末尾开始添加文本

  • 插入:
    i :从光标前面开始插入文本
    I :从光标所在行的开始处插入文本

注意

当需要编辑一个名为 file 的文件时,输入 vim file 命令并进入编辑状态时,出现 “- - 插入 - - W10:警告:正在修改一个只读文件” ,该如何处理?

① 查看 file 文件的权限:ls -l ,发现没有写权限

② 进入 root 用户,给 file 文件添加写权限:su and chmod a+w file ,此时再执行 ls -l 命令,可以发现 file 文件有了写权限

此时再 vim file 并编辑,就不会出现上述问题了。

二、VIM 的常用命令操作(类似快捷键)

以下操作均在 “命令状态” 下进行

1. 删除与修改

1)删除

  • x :删除光标处的字符

  • dd :删除光标所在的整行

  • [n]dd :删除光标所在行以及下面的 n-1 行(删除 n 行)

  • D :删除光标到行尾的文本,常用语删除注释语句(d$)

2)修改

  • yy :复制光标所在的整行

  • [n]yy :从光标开始往下复制 n 行,[n] 表示一个整数

  • p :将复制后的文本粘贴到光标所在的下一行

  • u :撤销上次操作

  • Ctrl r :恢复上次操作

  • 快捷修改单个字母: 先按 r 键,再输入要替换的内容

2. 光标移动

  • ^ :光标移动到行首

  • $ :光标移动到行尾

  • gg :光标定位到文档头

  • G :光标定位到文档尾

  • [n]G :光标定位到第 n 行行首,[n] 表示一个整数,比如 20G
    也可以通过冒号 + 数字来定位到第几行,比如 :20

较不常用:

  • H :光标定位到当前页首

  • L :光标定位到当前页的最后一行的行首

  • w :光标往后移一个字 / 单词

  • b :光标往前移一个字 / 单词

3. 查找与替换

1)查找

/[str] :用来查找字符串 str ,[str] 表示要查找的字符串。回车后会加亮显示所有找到的字符串,输入 n 移动到下一个找到的字符串,输入 Ctrl n(即 N)移动到上一个找到的字符串。

例如:vim ~/.bashrc ,然后输入 /alias ,输入 n 向下翻,输入 N 向上翻。

2)替换

部分替换

: s/[src]/[dst](只能替换光标所在的行)

例如:若要将光标所在行的 hello little dog 替换成 hello little cat ,则输入 : s/dog/cat

  • /i :忽略大小写

  • /g :全部匹配

例如:若要将 1-6 行的 hello 或 Hello 替换成 good ,则输入 :1,6 s/hello/good/ig

全部替换

:%s/[src]/[dst]/g :将文档中所有 src 的字符串替换为 dst 字符串

例如:若要将文档中所有的 hello 替换成 good ,则输入 :%s/hello/good/g

:%s/^ //g :将文档每一行的行首的空格去掉,想去掉几个空格,就在 ^ 与 // 之间打几个空格。

4. 块操作

v :可视化块选择状态,页面底部会出现 “- - 可视 - -” 的字样,选中块之后,可以对块进行删除(d),复制(y),剪切(x)

Ctrl + v :竖向选择模式,页面底部会出现 “- - 可视 块 - -” 的字样

1)批量删除

假设你想删除多行文本开头的字符,可以按以下步骤操作:

  • 将光标放在要删除的字符上,按下 Ctrl + v 进入块模式。

  • 移动光标选择要操作的行。

  • 按下 d 键删除选中的字符

2)批量插入

如果你想在多行文本的开头插入相同的内容,可以按以下步骤操作:

  • 按下 Ctrl + v 进入块模式,选择要操作的行。

  • 按下大写 I 键(即 Shift + i),进入插入模式。

  • 输入你想要插入的内容,例如批量注释代码就输入 “//” 。

  • 按下 Esc 键退出插入模式,插入的内容会应用到所有选中的行

3)块内替换

Vim 还支持在块内进行替换操作。例如,你可以使用 %V 进行块内替换:

  • 按下 Ctrl + v 选择要替换的块。

  • 按下 : 进入命令模式。

  • 输入 s/%V[旧文本]/[新文本]/g,然后按下回车键

4)块复制和粘贴

你可以使用块模式复制和粘贴文本:

  • 按下 Ctrl + v 选择要复制的块。

  • 按下 y 键复制选中的内容。

  • 移动光标到目标位置,按下 p 键粘贴内容

5)块删除和剪切

块删除和剪切操作类似:

  • 按下 Ctrl + v 选择要删除或剪切的块。

  • 按下 d 键删除选中的内容,或按下 x 键剪切选中的内容

6)块覆盖

块覆盖指的是在一个地方通过块复制或块剪切方式得到块的副本,然后在另一个地方再次块选择一个块的方位,按下 p 键,即可实现用块内容覆盖目标块。

5. 文档保存及退出

结束编辑,按 Esc 键进入命令状态。

  • :q :在未修改文档的情况下退出

  • :q! :放弃文档的修改,强行退出

  • :w :文档存盘

  • :wq or :x :文档存盘退出

需要注意:此时的键盘需要是英文的,冒号和感叹号必须是英文冒号和感叹号。

6. vim 的配置

放置 .vimrc 到 ~ 目录下:vim ~/.vimrc ,然后将下列指令放置在文件内:

set nu
set cursorline
set hlsearch
set tabstop=4
set fileencodings=utf-8,gbk,gb2312
  • set nu :显示行号

  • set cursorline :加一条横线

  • set hlsearch :搜索时高亮

  • set tabstop=4 :Tab 键是 4 个空格

  • set fileencodings=utf-8,gbk,gb2312 :设置编码

注意:用 vim 编辑文件时,使用的注释符号是一个双引号 " 。

7. 其他

1)Ctrl+s

如果在编辑过程中不小心按了 Ctrl+s ,vim 会处于僵死状态(被冻结),此时按 Ctrl+q 可以恢复。

2)Ctrl+z

在命令状态时,按了 Ctrl+z ,此时会出现如下所示的情况:

输入查看系统内所有进程的命令:ps -elf ,可以发现该进程虽然已经暂停,但仍占据内存空间

输入杀死进程的命令:kill -9 2823 ,然后再查看系统内所有进程:ps -elf ,可以发现进程已被杀死

若此时再输入命令:vim file1 ,会出现下图所示的情况:

可以选择恢复:按下 R 键,如果不想下次打开仍出现上述情况,则按下 D 键删除交换文件。

3)了解

  • 在命令模式中输入 :help :查看该命令的帮助提示(不常用,通过 :q 进行退出)

  • 在命令模式中输入 :%!xxd :进入十六进制模式

  • 在命令模式中输入 :%!xxd -r :返回文本模式

  • 在命令模式中输入 gg=G 可以自动对齐,可以通过输入 gg=10gg 只自动对齐第一行到第十行

  • 增加一个横向的 vim :在命令模式下执行 :sp or :new [文件名] ;增加一个纵向的 vim :在命令模式下执行 :vsp or :vnew [文件名](按 Ctrl+w 切换光标的区域,按 :q 退出)

  • 定位到 file 的第 3 行:执行 vim +3 file

  • 定位到第一个 hello 处:执行 vim +/hello file

三、VIM 外使用到的命令

1. 管道查找替换程序 sed

举例:

1)将家目录下所有的 py 文件中的 function 替换成 case :find . -name “*.py” | xargs sed -i ‘s/function/case/g’

利用 find . -name “*.py” | xargs grep case 可以看出已经修改成功。

2)将 hello.py 中的 function 替换成 case 并重定向输出到 hello_new.py 中:sed ‘s/function/case/g’ hello.py > hello_new.py

2. vimdiff 命令

vimdiff 命令是 Vim 编辑器 的 diff 模式,用于比较和合并文件。它等同于 vim -d 命令,可以同时打开多个文件,并高亮显示文件中内容的差异部分。

1)启动 vimdiff

vimdiff hello.py hello_new.py or vim -d hello.py hello_new.py

这会在 Vim 编辑器中垂直分割窗口,分别显示两个文件,并用不同的背景色高亮显示差异部分。

2)光标移动

在 vimdiff 模式下,可以使用以下快捷键在差异点之间移动光标:

  • ]c :跳转到下一个差异点

  • [c :跳转到上一个差异点

  • 要在两个窗口之间切换光标,可以使用以下按键:
    Ctrl-w l :切换到右侧窗口
    Ctrl-w h :切换到左侧窗口
    Ctrl-w w :在两个窗口间切换

3)内容合并

vimdiff 提供了方便的命令来合并文件内容:

  • dp(diff put):将当前差异点的内容覆盖到另一文件中的对应位置

  • do(diff obtain):将另一窗口中差异点的内容拉取到当前位置并进行替换

4)同时操作两个文件

在 vimdiff 模式下,可以使用 Vim 编辑器的命令和快捷键来操作文件:

  • :qa :退出所有文件

  • :wa :保存所有文件

  • :wqa :保存并退出所有文件

  • :qa! :强制退出(不保存)所有文件

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

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

相关文章

visual studio 2022的windows驱动开发

在visual studio2022中&#xff0c;若在单个组件中找不到Windows Driver Kit (WDK)选项&#xff0c;可通过提升vs版本解决&#xff0c;在首次选择时选择WDM 创建好项目在Source Files文件夹中创建一个test.c文件&#xff0c;并输入以下测试代码&#xff1a; #include <ntdd…

基于大数据的美团外卖数据可视化分析系统

【大数据】基于大数据的美团外卖数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统通过对海量外卖数据的深度挖掘与分析&#xff0c;能够为美团外卖平台提供运营决策支…

vue2打包部署到nginx,解决路由history模式下页面空白问题

项目使用的是vue2&#xff0c;脚手架vue-cli 4。 需求&#xff1a;之前项目路由使用的是hash&#xff0c;现在要求调整为history模式&#xff0c;但是整个过程非常坎坷&#xff0c;遇到了页面空白问题。现在就具体讲一下这个问题。 首先&#xff0c;直接讲路由模式由hash改为…

【数据结构】排序算法(中篇)·处理大数据的精妙

前引&#xff1a;在进入本篇文章之前&#xff0c;我们经常在使用某个应用时&#xff0c;会出现【商品名称、最受欢迎、购买量】等等这些榜单&#xff0c;这里面就运用了我们的排序算法&#xff0c;作为刚学习数据结构的初学者&#xff0c;小编为各位完善了以下几种排序算法&…

AI随身翻译设备:从翻译工具到智能生活伴侣

文章目录 AI随身翻译设备的核心功能1. 实时翻译2. 翻译策略3. 翻译流程4. 输出格式 二、AI随身翻译设备的扩展功能1. 语言学习助手2. 旅行助手3. 商务助手4. 教育助手5. 健康助手6. 社交助手7. 技术助手8. 生活助手9. 娱乐助手10. 应急助手 三、总结四、未来发展趋势&#xff0…

chromadb 安装和使用

简介 Chromadb 是一个开源的嵌入式向量数据库&#xff0c;专为现代人工智能和机器学习应用设计&#xff0c;旨在高效存储、检索和管理向量数据。以下是关于它的详细介绍&#xff1a; 核心特性 易于使用&#xff1a;提供了简洁直观的 API&#xff0c;即使是新手也能快速上手…

LabVIEW 在故障诊断中的算法

在故障诊断领域&#xff0c;LabVIEW 凭借其强大的图形化编程能力、丰富多样的工具包以及卓越的功能性能&#xff0c;成为工程师们进行故障诊断系统开发的得力助手。通过运用各种算法&#xff0c;能够对采集到的信号进行全面、深入的分析处理&#xff0c;从而准确地诊断出系统中…

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

目录 springboot介绍 核心特性 快速搭建 Spring Boot 项目 方式一&#xff1a;使用 Spring Initializr 方式二&#xff1a;使用 IDE 插件 示例代码 1. 创建项目并添加依赖 2. 创建主应用类 3. 创建控制器类 4. 运行应用程序 配置文件 部署和监控 部署 监控 与其…

Android学习之Material Components

以下是 Material Design 提供的核心控件列表&#xff08;基于最新 Material Components for Android 库&#xff09;&#xff0c;按功能分类整理&#xff1a; 1. 基础按钮类 控件名称类名说明MaterialButtoncom.google.android.material.button.MaterialButton遵循 Material 规…

sentinel新手入门安装和限流,热点的使用

1 sentinel入门 1.1下载sentinel控制台 &#x1f517;sentinel管理后台官方下载地址 下载完毕以后就会得到一个jar包 1.2启动sentinel 将jar包放到任意非中文目录&#xff0c;执行命令&#xff1a; java -jar 名字.jar如果要修改Sentinel的默认端口、账户、密码&#xff…

Ubuntu 22 Linux上部署DeepSeek R1保姆式操作详解(Xinference方式)

一、安装步骤 1.基础环境安装 安装显卡驱动、cuda&#xff0c;根据自己硬件情况查找相应编号&#xff0c;本篇不介绍这部分内容&#xff0c;只给出参考指令&#xff0c;详情请读者自行查阅互联网其它参考资料。 sudo apt install nvidia-utils-565-server sudo apt install…

CTF类题目复现总结-hashcat 1

一、题目地址 https://buuoj.cn/challenges#hashcat二、复现步骤 1、下载附件&#xff0c;解压得到What kind of document is this_文件&#xff1b; 2、用010 Editor打开What kind of document is this_文件&#xff0c;发现是office文件&#xff1b; 3、将后缀名改为ppt时…

4月5日作业

需求&#xff1a; 1.按照图示的VLAN及IP地址需求&#xff0c;完成相关配置 2.要求SW 1为VLAN 2/3的主根及主网关 SW2为VLAN 20/30的主根及主网关&#xff0c;SW1和 SW2互为备份 3.可以使用super vlan 4.上层通过静态路由协议完成数据通信过程 5.AR1为企业出口路由器…

Bert论文解析

文章目录 BERT&#xff1a;用于语言理解的深度双向转换器的预训练一、摘要三、BERT介绍BERT及其详细实现答疑&#xff1a;为什么没有标注的数据可以用来预训练模型&#xff1f;1. 掩码语言模型&#xff08;Masked Language Model, MLM&#xff09;2. 下一句预测&#xff08;Nex…

无招回归阿里

这两天&#xff0c;无招回归阿里的新闻被刷屏了。无招创业成立的两氢一氧公司无招的股份也被阿里收购&#xff0c;无招以这种姿态回归阿里&#xff0c;并且出任钉钉的 CEO。有人说&#xff0c;这是对 5 年前“云钉一体”战略的纠偏。现在确实从云优先到 AI 优先&#xff0c;但云…

初探:简道云平台架构及原理

一、系统架构概述 简道云作为一款低代码开发平台&#xff0c;其架构设计以模块化和云端协同为核心&#xff0c;主要分为以下层次&#xff1a; 1. 前端层 可视化界面&#xff1a;基于Web的拖拽式表单设计器&#xff0c;支持动态渲染&#xff08;React/Vue框架&#xff09;。多…

Redis(笔记)

简介&#xff1a; 常用数据类型: 常用操作命令&#xff1a; Redis的Java客户端&#xff1a; 操作字符串类型的数据&#xff1a; 操作Hash类型的数据&#xff1a; 操作列表类型的数据&#xff1a; 操作集合类型的数据&#xff1a; 操作有序集合类型数据&#xff1a; 通用命令…

bootloader+APP中,有些APP引脚无法正常使用?

问&#xff1a;bootloaderAPP程序中&#xff0c;为什么有些APP引脚无法正常使用&#xff1f;无法设置高低电平 主控芯片GD32F415&#xff0c;参考案例bootloader中的引脚使用&#xff1a; 参考案例APP程序的引脚使用&#xff1a; 以及个人使用的无线模组&#xff0c;高电平使能…

高并发内存池:原理、设计与多线程性能优化实践

高并发内存池是一种专门为多线程环境设计的内存管理机制&#xff0c;其核心目标是通过优化内存分配和释放过程&#xff0c;解决传统内存分配器&#xff08;如malloc/free&#xff09;在高并发场景下的性能瓶颈&#xff0c;显著提升多线程程序的内存访问效率。 目录 一、核心设计…

基于内容的课程推荐网站的设计与实现00(SSM+htmlL)

基于内容的课程推荐网站的设计与实现(SSMhtml) 该系统是一个基于内容的课程推荐网站&#xff0c;旨在为用户提供个性化的课程推荐。系统包含多个模块&#xff0c;如教学视频、教学案例、课程信息、系统公告、个人中心和后台管理。用户可以通过首页访问不同的课程分类&#xff…