Vim与Shell脚本高效开发指南
1. Vim编辑器基础入门Vim作为Linux系统中最强大的文本编辑器之一其学习曲线虽然陡峭但一旦掌握将极大提升工作效率。我第一次接触Vim时面对这个全键盘操作的编辑器完全不知所措但坚持使用两周后编辑速度已经远超其他图形化编辑器。1.1 Vim的三种模式解析Vim最核心的特点是它的模式化设计主要分为命令模式(Normal Mode)启动Vim后的默认模式所有按键都对应编辑命令而非输入字符。这个模式下可以快速移动光标、复制粘贴文本、搜索替换等。新手最常见的困惑就是在这个模式下拼命打字却发现没有文字出现。插入模式(Insert Mode)通过i、a、o等命令进入此时可以像常规编辑器一样输入文本。我建议新手记住几个关键命令i在光标前插入a在光标后插入o在当前行下方新建一行并插入底线命令模式(Command-line Mode)在命令模式下按:进入用于执行保存、退出等操作。最常用的几个命令:w 保存:q 退出:wq 保存并退出:q! 强制退出不保存提示在插入模式下按ESC键返回命令模式这个操作需要形成肌肉记忆。我见过很多新手卡在插入模式不知如何退出。1.2 基础移动与编辑命令掌握光标移动是高效使用Vim的基础。不同于图形编辑器依赖鼠标Vim完全通过键盘操作光标移动h/j/k/l左/下/上/右移动替代方向键0/$移动到行首/行尾gg/G跳到文件开头/结尾Ctrlf/Ctrlb向下/向上翻页文本编辑x删除当前字符dd删除(剪切)当前行yy复制当前行p/P粘贴到光标后/前u/Ctrlr撤销/重做我个人的习惯是将左手放在键盘的ASDF位置右手控制HJKL移动光标这样手不需要离开主键盘区就能完成大部分编辑操作。2. Vim高效编辑技巧2.1 批量操作与宏录制当需要重复编辑多行文本时Vim提供了强大的批量处理能力可视块模式Ctrlv进入块选择模式用hjkl移动选择多行按I(大写i)在选中行首插入相同内容按ESC应用更改替换命令:%s/old/new/g全局替换:10,20s/old/new/g替换10-20行内容宏录制qa开始录制到寄存器a执行一系列操作q停止录制a回放宏100a重复执行100次我曾经用宏录制在几分钟内完成了需要手动操作数小时的重复文本处理工作效率提升惊人。2.2 分屏与多文件编辑Vim支持同时编辑多个文件:sp [filename]水平分割窗口:vsp [filename]垂直分割窗口Ctrlw hjkl在分屏间切换:e filename打开新文件:bn/:bp切换缓冲区我的典型工作流程是左侧放代码文件右侧打开终端或日志文件通过快捷键快速切换完全不需要鼠标。3. Shell脚本编程基础3.1 Shell脚本基本结构一个典型的Shell脚本包含以下部分#!/bin/bash # 注释说明脚本功能 # 变量定义 VARvalue # 主程序 command1 command2 # 函数定义 function_name() { commands }重要元素Shebang(#!)指定解释器路径注释用#开头说明脚本用途变量存储数据供后续使用命令实际执行的Shell命令函数封装可重用代码块3.2 变量与参数处理变量定义与使用nameJohn # 定义变量 echo $name # 使用变量 echo ${name} # 推荐使用大括号形式特殊变量$0脚本名称$1-$9位置参数$#参数个数$*所有参数$?上条命令退出状态参数扩展${var:-default} # 如果var未设置使用default ${var:default} # 如果var未设置设置并使用default ${var:?message} # 如果var未设置显示错误信息3.3 流程控制结构条件判断if [ condition ]; then commands elif [ condition ]; then commands else commands fi循环结构# for循环 for var in list; do commands done # while循环 while [ condition ]; do commands done # until循环 until [ condition ]; do commands donecase语句case $var in pattern1) commands ;; pattern2) commands ;; *) default commands ;; esac4. 高级Shell脚本技巧4.1 输入输出重定向Shell提供了强大的I/O重定向能力command file标准输出重定向到文件command file追加到文件command file从文件读取输入command 2 file标准错误重定向到文件command | command2管道将第一个命令的输出作为第二个命令的输入典型应用# 将命令输出和错误分别保存到不同文件 command output.log 2 error.log # 丢弃所有输出 command /dev/null 21 # 同时查看和保存输出 command | tee output.log4.2 函数与模块化良好的Shell脚本应该遵循模块化原则#!/bin/bash # 函数定义 log() { echo [$(date)] $ script.log } check_disk() { local threshold90 # 局部变量 local usage$(df -h / | awk NR2 {print $5} | tr -d %) [ $usage -gt $threshold ] log 磁盘使用率超过阈值: $usage% return $usage } # 主程序 main() { check_disk [ $? -gt 90 ] send_alert } main $最佳实践使用函数封装逻辑为函数添加注释说明使用局部变量(local)返回有意义的退出码主程序逻辑放在main函数中4.3 错误处理与调试错误处理# 设置错误时退出 set -e # 设置未定义变量时报错 set -u # 显示执行的命令 set -x # 捕获信号 trap cleanup EXIT TERM INT调试技巧使用-x选项运行脚本bash -x script.sh在脚本中插入调试语句echo Debug: var$var使用shellcheck工具检查语法逐步执行复杂脚本5. Vim与Shell的协同工作5.1 在Vim中执行Shell命令Vim提供了多种与Shell交互的方式直接执行命令:!command执行单个命令:r !command将命令输出插入到当前光标位置交互式Shell:shell启动子shellCtrld返回Vim过滤文本选中文本后按!command用命令处理选中文本:%!sort对整个文件内容排序5.2 Vim作为Shell脚本IDE通过配置.vimrc可以将Vim打造成强大的Shell开发环境 语法高亮 syntax on 自动缩进 filetype plugin indent on 显示行号 set number Shell脚本特定设置 autocmd FileType sh setlocal expandtab tabstop4 shiftwidth4 autocmd FileType sh nnoremap buffer F5 :wCR:!bash %CR 插件推荐 vim-shellcheck: 语法检查 vim-bash-support: Bash代码片段5.3 实用插件推荐NERDTree文件浏览器vim-airline状态栏增强fzf.vim模糊文件查找vim-commentary快速注释/取消注释vim-surround快速处理包围符号ale异步语法检查安装这些插件后Vim的Shell脚本开发体验可以媲美专业IDE。

相关新闻

piece must not include null character.

piece must not include null character.

报错代码:import torch from PIL import Image from transformers import AutoTokenizer, AutoModel import torchvision.transforms as transforms model_name "/data/feature/lbg/models/SJY-1995_GeoTikzBridge-Base-8B" tokenizer AutoTokenizer.fr…

2026/10/17 17:37:31 阅读更多 →
零基础极速上手:用AI建站工具10分钟生成一个可备案的企业官网

零基础极速上手:用AI建站工具10分钟生成一个可备案的企业官网

如果你完全不懂技术,也没接触过网站建设,但又急需一个专业、合规的企业官网,这篇教程就是为你准备的。我们将抛开所有复杂的术语,模拟一个真实的操作流程,带你体验如何用AI建站工具,在10分钟内生成一个具备…

2026/10/16 7:34:10 阅读更多 →
HDMI寄存器配置实战:从时钟音频到HDCP的嵌入式驱动开发指南

HDMI寄存器配置实战:从时钟音频到HDCP的嵌入式驱动开发指南

1. HDMI寄存器系统概览与核心价值 如果你正在开发一个需要输出高清音视频的嵌入式设备,比如智能电视的主板、数字机顶盒或者专业的视频会议系统,那么你大概率绕不开HDMI接口。而要让HDMI接口稳定、可靠地工作,仅仅连接物理线路是远远不够的&a…

2026/10/16 20:22:34 阅读更多 →

最新新闻

从字节序到内存对齐:数据在内存中的真实布局深度拆解

从字节序到内存对齐:数据在内存中的真实布局深度拆解

每个写过几年代码的人,一定都遇到过一个诡异的问题:某个变量在断点里看着是对的,可一传入函数就变了;浮点数比较怎么都对不上;结构体明明只声明了几个字段,内存占用却比想象中多一截。这些问题绝大多数都能…

2026/10/18 2:14:57 阅读更多 →
桌面应用集成大模型:本地离线推理选型与工程落地全攻略

桌面应用集成大模型:本地离线推理选型与工程落地全攻略

这个项目我记了挺久:把一个大模型真正装进桌面程序里跑起来,不联网、不上云、不开后台服务,用户双击图标就能用。今天把这轮本地离线推理的选型和工程落地过程完整复盘一遍,重点说清楚三件事——为什么坚持本地推理、模型与推理引…

2026/10/18 2:14:57 阅读更多 →
SAP固定资产处置实操:ABAVN+F-02替代ABAON的完整走账与避坑指南

SAP固定资产处置实操:ABAVN+F-02替代ABAON的完整走账与避坑指南

简介:本资源为SAP FI模块固定资产全流程操作手册,围绕固定资产报废、出售、盘点三大高频业务展开,重点讲解ABAVN、F-02、AW01N/AB03等标准事务码的运用,并配有完整的会计分录示例与科目结转规则,适合SAP FI顾问、财务关…

2026/10/18 2:14:57 阅读更多 →
engarde816:专为击剑赛事设计的离线编排工具

engarde816:专为击剑赛事设计的离线编排工具

简介:Engarde816是一款面向击剑赛事组织者、裁判团队及体育管理从业者的专业编排软件,专为解决中小型至大型击剑比赛中的赛程规划、对阵生成、实时成绩追踪等核心痛点而设计。资源包共38个文件,含1个可执行程序(Engarde.exe&#…

2026/10/18 2:14:57 阅读更多 →
OpenClaw 对接微信:保姆级教程及部署推荐(TaoToken 统一 Key 接入版)

OpenClaw 对接微信:保姆级教程及部署推荐(TaoToken 统一 Key 接入版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:14:57 阅读更多 →
NPU/TPU硬件加速本质:软硬协同的决策框架与落地实践

NPU/TPU硬件加速本质:软硬协同的决策框架与落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 2:13:56 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →