Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南

文章目录

  • Vim 外部命令集成完全指南
    • 核心概念理解
      • 命令语法解析
      • 语法对比
    • 常用外部命令详解
      • 文本排序与去重
      • 文本筛选与搜索
      • 高级 grep 搜索技巧
      • 文本替换与编辑
      • 字符处理
      • 高级文本处理
      • 编程语言处理
      • 其他实用命令
    • 范围操作示例
      • 指定行范围处理
      • 复合命令示例
    • 实用技巧与最佳实践
      • 1. 备份重要文件
      • 2. 预览命令结果
      • 3. 撤销操作
      • 4. 常用组合技巧
        • 数据清理流水线
        • 日志分析
        • CSV 数据处理
    • 常见应用场景
      • 1. 代码整理
      • 2. 数据分析
      • 3. 文档处理
    • 注意事项

在 Vim 中, :%! 命令是一个强大的功能,它允许你将文件内容通过管道传递给外部命令处理,并用命令输出替换原文件内容。这个功能极大地扩展了 Vim 的文本处理能力,让你可以利用 Unix/Linux 系统中丰富的命令行工具。

核心概念理解

命令语法解析

  • :%! :对整个文件应用外部命令并用命令输出替换文件内容
  • :! :执行外部命令,但不改变文件内容
  • % :代表整个文件范围(从第一行到最后一行)
  • ! :调用外部命令的执行符号

语法对比

命令格式作用说明是否修改文件
:%!command对整个文件应用外部命令,用输出替换文件内容
:!command执行外部命令,显示结果但不修改文件
:range!command对指定范围应用外部命令

常用外部命令详解

文本排序与去重

命令功能描述示例
:%! sort对文件内容进行排序按字母顺序排列所有行
:%! sort -u排序并删除重复行去重并排序
:%! sort -n按数字大小排序数值排序而非字典序
:%! sort -r逆序排序倒序排列
:%! sort -k2按第二列排序指定列排序
:%! uniq删除相邻的重复行需要先排序

文本筛选与搜索

命令功能描述示例
:%! grep pattern筛选包含特定模式的行过滤匹配行
:%! grep -v pattern筛选不包含特定模式的行反向过滤
:%! grep word -B1显示匹配行及其前1行上下文显示
:%! grep word -A1显示匹配行及其后1行上下文显示
:%! grep -i pattern不区分大小写搜索忽略大小写

高级 grep 搜索技巧

命令功能描述
:%! grep 'A\|B'搜索包含 A 或 B 的行(使用单引号)
:%! grep 'A' \| grep 'B'搜索同时包含 A 和 B 的行
:%! grep 'A.*B'搜索包含 A 和 B 的行(A 在 B 前面)
:%! grep -E '(A.*B\|B.*A)'搜索同时包含 A 和 B,顺序不限

文本替换与编辑

命令功能描述示例
:%! sed 's/old/new/g'全局替换文本将所有 old 替换为 new
:%! sed '/pattern/d'删除匹配模式的行删除包含 pattern 的行
:%! sed '/pattern/,+2d'删除匹配行及后续N行删除匹配行及后2行

字符处理

命令功能描述示例
:%! tr 'a-z' 'A-Z'小写转大写字符转换
:%! tr -d ' '删除空格字符删除
:%! tr -s ' '压缩重复空格多个空格变一个

高级文本处理

命令功能描述示例
:%! awk '{print $1,$2}'输出第1列和第3列列提取
:%! awk 'NF==10 && $4>0.8}'条件筛选并输出指定列复合条件处理
:%! awk -F'[()]' '{print $2}'自定义分隔符提取以括号为分隔符
:%! column -t格式化为表格列对齐显示

编程语言处理

命令功能描述示例
:%! perl -ne 'print scalar reverse $_'Perl 逐行反转复杂文本处理
:%! python -c "import sys; [print(int(line)*2) for line in sys.stdin]"Python 数值处理每行乘以2

其他实用命令

命令功能描述应用场景
:%! xargs echo将多行合并为一行格式转换
:%! gzip/:%! gunzip压缩/解压内容文件压缩
:%! base64/:%! base64 -dBase64编码/解码编码转换

范围操作示例

指定行范围处理

命令功能描述
:9,23! sort -u只对第9-23行进行排序去重
:1,10! grep pattern只在前10行中搜索
:.,1}'从当前行到文件末尾提取第一列

复合命令示例

" 复杂的数据处理流水线
:8,$! awk -F '[()]' '{print $1,$2}' | grep /I | sed 's/\/I/ /g'

这个命令的处理流程:

  1. 从第8行开始到文件末尾
  2. 以括号为分隔符,提取第1、2列
  3. 筛选包含 /I 的行
  4. /I 替换为空格

实用技巧与最佳实践

1. 备份重要文件

在使用 :%! 命令前,建议先保存或备份文件:

:w backup.txt    " 备份当前文件
:%! command      " 执行外部命令

2. 预览命令结果

使用 :! 先预览命令效果:

:! sort filename | head -10    " 预览排序结果的前10行
:%! sort                       " 确认无误后执行

3. 撤销操作

如果命令结果不满意,可以使用撤销:

u    " 撤销上一次操作

4. 常用组合技巧

数据清理流水线
:%! sort | uniq | grep -v '^$'    " 排序 → 去重 → 删除空行
日志分析
:%! grep ERROR | sort | uniq -c | sort -nr    " 错误统计并按频率排序
CSV 数据处理
:%! awk -F',' '{print $1","$3}' | sort    " 提取第1、3列并排序

常见应用场景

1. 代码整理

  • 去除重复的 import 语句
  • 按字母顺序排列函数名
  • 提取特定类型的代码行

2. 数据分析

  • CSV 文件的列提取和筛选
  • 日志文件的错误统计
  • 配置文件的格式化

3. 文档处理

  • 目录结构的整理
  • 文本内容的格式转换
  • 多语言文本的编码处理

注意事项

  1. 数据安全:%! 会直接替换文件内容,使用前请确保有备份
  2. 命令验证:复杂命令建议先在小范围测试
  3. 字符编码:注意文件的字符编码兼容性
  4. 性能考虑:大文件处理时命令可能较慢
  5. 错误处理:如果外部命令失败,文件内容可能被清空

掌握 Vim 的外部命令集成功能,可以将 Vim 打造成一个强大的文本处理工作台,充分利用 Unix/Linux 系统的丰富工具链,大大提升文本处理效率。

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

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

相关文章

bash挖矿木马事件全景复盘与企业级防御实战20250612

🐧 CentOS “-bash 挖矿木马” 事件全景复盘与企业级防御实战 ✍️ 作者:Narutolxy | 📅 日期:2025-06-12 | 🏷️ 标签:Linux 安全、应急响应、运维加固、实战复盘 📘 内容简介 本文是一场真实…

「Linux中Shell命令」Shell命令基础

知识点详细解析 Shell简介 Shell是Linux操作系统系统中用户与操作系统内核交互的接口。它既是命令解释器,负责接收用户输入的命令并将其转换为内核能够理解的指令,也是一种脚本编程语言。作为Linux操作系统的重要组成部分,Shell扮演着用户与系统内核之间的"中间人"…

202557读书笔记|《梦里花落知多少(轻经典)》——有你在的地方才最美

《梦里花落知多少(轻经典)》作者三毛,物极必反,阴晴圆缺,小满即万全么?因为幸福过于满溢。所以幸福被收走了。 没有看过太多三毛的作品,给我的感觉她是很敏感,多愁善感及没有安全感…

对象映射 C# 中 Mapster 和 AutoMapper 的比较

Mapster和AutoMapper是C#领域两大主流对象映射库,各具特色。Mapster以高性能著称,使用表达式树实现零反射映射,首次编译后执行效率极高,适合对性能敏感的场景;AutoMapper则提供更丰富的功能集,如条件映射和…

QEMU源码全解析 —— 块设备虚拟化(26)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(25) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 Virt

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…

RED DA认证-EN18031网络安全常见问题以及解答

Q:RED DA是否对所有无线模块和设备强制要求? A:是的,RED DA适用于欧盟境内销售的所有无线设备,包括WWAN、蓝牙或Wi-Fi模块。唯一例外是GNSS模块(仅支持接收功能,无需认证)。 Q&…

腾讯开源 ovCompose 跨平台框架:实现一次跨三端(Android/iOS/鸿蒙)

在移动应用开发领域,跨平台技术一直是开发者们追求的目标,它能够帮助企业降低开发成本、提高开发效率,同时保证应用在不同平台上的一致性体验。2025 年 6 月 3 日,腾讯视频团队迎来了一个重要的里程碑 —— 正式发布 ovCompose 跨…

对3D对象进行形变分析

1,目的 分析3D实例对象相对标准参照物的形变。 一般用于质地较软的材质(例如橡胶,布料)查找,检查等。 标准参考模型 需匹配的实例: 形变后的模型:* 形变后的模型: 实例形变后的…

宝塔面板WordPress中使用Contact Form 7插件收不到邮件的解决方法

如果是宝塔面板的环境下,在WordPress中使用Contact Form 7插件提交表单时显示成功,但邮箱未收到邮件,可能是由于服务器邮件功能配置问题。以下是几种常见解决方法: 1. 检查邮件发送方式 默认情况下,Contact Form 7 使…

Android中的DX、D8、R8

Kotlin 版本所需的 AGP、D8 和 R8 版本 :https://developer.android.google.cn/build/kotlin-support?hlzh_cn R8:https://developer.android.google.cn/tools/retrace?hlzh_cn D8:https://developer.android.google.cn/tools/d8?hlzh_cn 如上图&…

通义灵码 AI IDE 上线!智能体+MCP 从手动调用工具过渡到“AI 主动调度资源”

告诉大家一个好消息,通义灵码发布了 AI 编程 IDE :Lingma IDE ,你没看错,通义灵码也推出了自己的 AI IDE 客户端,不是 AI 编程插件,是 IDE 。 Lingma IDE 是基于 VS Code 开源版本构建的智能代码编辑器&am…

快速解决软件测试的逻辑方法运用

在软件测试过程中,遇到复杂问题时,如何快速定位和解决?关键在于运用逻辑方法,系统化地分析问题、设计测试用例、优化测试流程。本文将介绍几种高效的逻辑方法,帮助测试工程师提升效率,减少盲测和重复劳动。…

枫清科技携手中化信息挖掘实现AI高价值场景应用,打通智能化“最后一公里”

近日,中国中化控股有限责任公司(以下简称“中国中化”)发布“人工智能”专项行动推进方案,标志着其全面深化人工智能战略布局、全力支撑“数智中化”建设进入加速落地阶段。作为集团智能化转型的核心支撑单位,中国中化…

Yolov5.6增加注意力机制+ByterTrack:目标检测与跟踪

简介:本项目使用ESP32-CAM采集图像上传至上位机进行手部目标检测与追踪,使用了YOLOv5.6(注意力机制ECA,CBAM)ByteTrack 博主同款迅雷链接: 链接:https://pan.xunlei.com/s/VOSO1EIzmXhBb_BIKM58cM5cA1# 提…

C++进阶—C++中的继承

第一章:继承的概念及定义 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向…

力扣Hot100每日N题(11~14)

200. 岛屿数量 BFS或DFS class Solution {private int[] dx {0, 0, 1, -1};private int[] dy {1, -1, 0, 0};int ans 0, n, m;void dfs(char[][] grid, int x, int y){if(x < 0 || y < 0 || x > n || y > m || grid[x][y] 0) return;grid[x][y] 0;for(int i…

人工智能 倒底是 智能 还是 智障?

假设有如下哈希运算的过程和结果&#xff0c;然后让人工智能根据初始条件和最终结果的最后几个字符推理出中间过程。 yw "123456" salt "a1b2c3d4e5f6" sda256(saltsha1(md5(yw.encode)salt)) 1c5852fa5d3c450621c17b9ba87ffdab8d336b16f015b4a10cffc945…

传智健康---十天项目总结

第一天&#xff1a; 基本内容如下&#xff1a; 从gitee拉取对应的基础代码。做好配置相关工作。测试页面是否可以正常打开。 无问题 需要学习的内容&#xff1a;spring security 了解到这个框架的基础作用大概是&#xff1a;管理请求路径&#xff0c;管理用户权限&#xf…

AbMole| Angiotensin II human(M6240;血管紧张素Ⅱ)

Angiotensin II&#xff08;血管紧张素II&#xff09;是一种生物活性肽和血管收缩剂。Angiotensin II作为肾素-血管紧张素-醛固酮系统&#xff08;RAAS&#xff09;的关键活性成分&#xff0c;在动物模型中&#xff0c;它通过调节于血管平滑肌细胞上的血管紧张素II受体&#xf…