Shell脚本编辑与保存:vi/vim与nano编辑器完整操作指南

📅 2026/8/12 9:54:53
Shell脚本编辑与保存:vi/vim与nano编辑器完整操作指南
1. 项目概述从“编辑”到“保存”的完整闭环如果你在Linux或Unix环境下工作无论是管理服务器、处理数据还是自动化日常任务Shell脚本都是你绕不开的得力工具。但很多朋友尤其是刚入门的朋友常常会卡在一个看似简单却至关重要的环节如何编辑一个已有的脚本以及如何保存并退出编辑器。这听起来像是“怎么用筷子吃饭”一样基础但恰恰是这个基础决定了你后续所有工作的效率。你可能遇到过这样的场景在终端里用vim打开一个配置文件修改了半天却不知道怎么保存最后只能强制退出导致所有改动丢失或者用nano编辑时面对底部密密麻麻的快捷键提示一头雾水。这不仅仅是记住几个命令的问题更是理解不同编辑器的“交互模式”和工作逻辑的问题。今天我们就来彻底拆解这个“Shell脚本进入编辑模式和保存退出”的完整流程我会结合十多年的运维和开发经验把vi/vim、nano这两个最常用的终端编辑器讲透让你不仅能“用”更能“懂”从此告别在编辑器里手足无措的尴尬。2. 编辑器选型与模式哲学为什么是vi和nano在深入具体操作之前我们必须先理解一个核心概念模式Mode。这是区分不同编辑器流派的关键也直接决定了你的操作逻辑。2.1 vi/vim模态编辑器的王者vi及其增强版vim是模态编辑器的代表。所谓“模态”就是指编辑器在不同的“模式”下相同的按键会有完全不同的功能。这初学起来有点反直觉但一旦掌握其效率是惊人的。普通模式Normal Mode这是vi/vim启动后的默认模式。在这个模式下你不能直接输入文本所有按键都变成了命令。例如j是向下移动光标k是向上移动dd是删除整行yy是复制整行。很多人打开vim后直接敲字发现打出来一堆乱码就是因为还处在普通模式。这个模式的设计初衷是让你可以高速地在文本中导航和进行编辑操作而无需频繁移动手指到方向键或鼠标。插入模式Insert Mode这才是你熟悉的“打字”模式。进入此模式后你可以像在记事本里一样自由输入、删除文本。从普通模式进入插入模式的命令有很多最常用的是按i在光标前插入或a在光标后插入。命令行模式Command-line Mode用于执行保存、退出、搜索替换等高级命令。在普通模式下按:冒号即可进入此时光标会移动到屏幕底部等待你输入命令例如:wq保存并退出。为什么选择vim在服务器环境、远程SSH连接或者没有图形界面的场景下vim几乎是唯一可靠且功能强大的选择。它轻量、高效并且其操作哲学通过组合键完成复杂操作在熟练后能极大提升文本处理速度。几乎所有Linux发行版都预装了vi或vim。2.2 nano简单直观的现代选择与vim的模态哲学相反nano是一个“无模式”编辑器。它更接近Windows下的记事本或Notepad。所见即所得打开nano后你直接就可以开始输入文字底部会常驻显示常用的快捷键提示例如^O表示CtrlO是保存^X是退出。这种设计对新手极其友好学习曲线平缓。快捷键依赖Ctrl键几乎所有功能都通过Ctrl键加一个字母来触发这需要记忆但底部的提示很大程度上缓解了这个问题。为什么选择nano如果你需要快速编辑一个小文件或者对vim的模式感到不适应nano是最佳选择。它的交互方式更符合大多数人的直觉。许多系统也默认安装了nano。选型心得我的建议是两者都要会但可以各有侧重。对于简单的、一次性的编辑任务用nano快速搞定。对于需要复杂编辑、长期维护的脚本或配置文件投入时间学习vim是绝对值得的投资它的高效会在日后成倍回报你。接下来我们就进入具体的实操环节。3. vi/vim编辑器全流程实操详解让我们跟随一个完整的编辑流程一步步拆解vim的使用。假设我们要编辑一个名为backup.sh的脚本。3.1 启动与模式切换从打开文件到开始编辑首先在终端中输入命令打开文件vim backup.sh如果backup.sh不存在vim会创建一个新文件的缓冲区如果存在则将其内容加载到缓冲区。此时你处于普通模式。屏幕底部可能会显示文件名、行数等信息。这是第一个关键点不要急着敲字母要开始编辑你必须从普通模式切换到插入模式。有多个命令可以做到它们之间的细微差别体现了vim的精确i在当前光标位置之前插入。这是最常用的命令。a在当前光标位置之后插入append。o在当前行的下方新建一行并进入插入模式。I将光标移动到当前行的行首并进入插入模式。A将光标移动到当前行的行尾并进入插入模式。按下以上任何一个键比如i你会发现屏幕左下角出现-- INSERT --的提示这表示你已经成功进入插入模式。现在你可以像使用任何其他文本编辑器一样自由地输入、删除使用Backspace或Delete键文本了。注意在插入模式下除了输入文本你还可以使用方向键移动光标。但纯vim高手会建议你尽量使用hjkl这四个键分别代表左、下、上、右来移动因为这样可以保持手指在键盘核心区提升效率。不过对于初学者先用方向键完全没问题。3.2 保存与退出命令的组合艺术编辑完成后你需要保存更改并退出。这时你必须先从插入模式返回到普通模式。关键操作按下Esc键。无论你的光标在何处按下Esc键底部的-- INSERT --提示会消失这意味着你回到了普通模式。这是第二个关键点执行任何保存退出命令前请先确认你不在插入模式即看不到INSERT提示。很多新手在插入模式下直接输入:wq结果这些字符都被当作文本输入到了文件里。回到普通模式后输入冒号:进入命令行模式此时光标会跳转到屏幕底部等待你输入命令。最核心的几个命令如下保存但不退出:ww代表 write写入。执行后文件被保存编辑器状态不变你仍处在普通模式。应用场景编辑长文件时的阶段性保存防止意外丢失工作。退出但不保存:qq代表 quit退出。如果文件自打开后没有被修改过这个命令会直接退出vim。如果文件已被修改vim会拒绝退出并提示“No write since last change”。这时你有两个选择强制退出放弃所有修改:q!先保存再退出执行:w后再执行:q或者直接用下一条命令。保存并退出:wq这是最常用的组合命令先执行写操作(w)再执行退出操作(q)。等价于依次输入:w和:q。强制保存并退出针对只读文件:wq!如果你编辑的是一个没有写权限的文件例如/etc下的系统配置文件使用:wq会报错。在命令后加!表示强制。但请注意这通常需要你拥有该文件的sudo权限。更常见的做法是先正常编辑然后用:w !sudo tee %这个高级命令来保存这里不展开但你需要知道:wq!的存在。实操记忆技巧你可以把:wq想象成“Write and Quit”写并退出把:q!想象成“Quit, and I mean it!”退出我是认真的强制放弃。这样更容易记忆。3.3 高级移动与编辑技巧普通模式在普通模式下你拥有强大的导航和编辑能力这能让你脱离鼠标高效工作。光标移动h/j/k/l 左/下/上/右。0数字零 跳到行首。$ 跳到行尾。gg 跳到文件第一行。G 跳到文件最后一行。:行号 在命令行模式下输入行号可直接跳转如:50跳到第50行。文本编辑x 删除光标下的字符。dd 删除剪切当前整行。这是最常用的命令之一。yy 复制yank当前整行。p 将剪贴板内容粘贴到光标下方。u 撤销undo上一次操作。Ctrl r 重做redo被撤销的操作。一个高效案例假设你要删除第10到第20行。你可以输入:10跳转到第10行。输入11dd意思是执行11次dd操作即删除从当前行开始的11行。或者更优雅地在命令行模式输入:10,20d。4. nano编辑器全流程实操详解nano的流程就直观多了。我们同样编辑backup.sh。4.1 启动与直接编辑在终端输入nano backup.sh编辑器界面打开你直接就处于可编辑状态可以开始输入或修改文本。底部两行会显示可用的快捷键其中^符号代表Ctrl键。4.2 保存与退出依赖快捷键在nano中所有功能都通过Ctrl键组合来触发。保存文件Ctrl O字母O不是数字零。按下后底部会提示“File Name to Write: [backup.sh]”。如果沿用当前文件名直接按Enter回车即可。如果你想另存为新文件可以在这里输入新名字再回车。保存成功后底部会显示“[ Wrote X lines ]”的提示。退出nanoCtrl X。如果你在退出前没有保存修改nano会非常贴心地提示你“Save modified buffer? (Answering ‘No’ will DISCARD changes.)” 它问你是否要保存已修改的缓冲区。你可以输入Y 是的保存。随后会进入上述保存文件的流程。N 不放弃所有修改并退出。Ctrl C 取消退出操作回到编辑界面。实操心得nano的交互非常“傻瓜式”它总是试图防止你犯错。对于新手我强烈建议从nano开始它能让你把注意力集中在脚本内容本身而不是编辑器操作上。记住CtrlO保存和CtrlX退出这两个最核心的快捷键就足够了。5. 核心场景与避坑指南实录了解了基本操作我们来看几个实际工作中高频出现的场景和容易踩的“坑”。5.1 场景一编辑只读的系统配置文件这是运维中最常见的场景之一比如修改/etc/ssh/sshd_config。错误做法直接用vim /etc/ssh/sshd_config编辑修改完后:wq会得到“E45: ‘readonly’ option is set”的错误。正确做法使用sudo提权打开文件sudo vim /etc/ssh/sshd_config。这是最推荐的方式从开始就获得权限。如果你已经用普通用户打开了只读文件并做了修改可以在vim的命令行模式使用一个“魔法”命令:w !sudo tee %。这个命令的意思是将当前缓冲区的内容写入:w到一个 shell 命令中这个命令是sudo tee %。%代表当前文件名。tee命令会从标准输入读取并写入文件。输入这个命令后可能会提示你输入用户密码。执行成功后再用:q!强制退出即可因为缓冲区可能提示未保存但实际文件已通过sudo保存。5.2 场景二脚本编写中的快速操作编写Shell脚本时经常需要重复性操作。批量注释/取消注释在vim普通模式下这非常高效。注释多行将光标移动到要注释的第一行按CtrlV进入可视块模式用j/k选择多行然后按ShiftI大写I输入注释符如#再按两次Esc。你会发现选中的所有行首都被加上了#。取消注释同样用CtrlV选择多行前的#号然后按d删除。搜索与替换在vim命令行模式:/关键词可以向下搜索:?关键词向上搜索。按n跳转到下一个匹配项。替换命令:s功能强大。:s/old/new/g替换当前行的所有old为new。:10,20s/old/new/g替换第10到20行。:%s/old/new/g替换整个文件。5.3 常见问题排查速查表问题现象可能原因解决方案打开vim后按键变成乱码处于普通模式却以为在插入模式按i或a进入插入模式再输入。在vim中输入:wq后字符被输入到文件里当前处于插入模式先按Esc回到普通模式再输入:。vim中无法用方向键移动光标而是输入了ABCD终端兼容性或vim配置问题尝试按Esc后再按:进入命令模式输入:set nocompatible并回车。更根本的方法是配置~/.vimrc文件。nano中按CtrlS后编辑器卡死CtrlS是终端流控制键会暂停输出按CtrlQ即可恢复。在nano中应避免使用CtrlS。执行脚本时提示“权限不够”脚本文件没有可执行权限用chmod x script.sh为脚本添加执行权限。在vim中做了修改但:q退不出文件已被修改vim防止你丢失更改根据需求选择:wq保存退出或:q!放弃修改退出。想复制vim里的文本到系统剪贴板默认的yy和p只在vim内部有效需要vim支持系统剪贴板。在命令行模式用yy复制到系统剪贴板p粘贴。或者使用鼠标选中后很多终端支持直接复制。5.4 一个真实的避坑案例脚本编码与执行问题有一次我写了一个备份脚本在Windows下用Notepad编辑好通过FTP上传到Linux服务器。执行时却报错“bash: ./backup.sh: /bin/bash^M: bad interpreter: No such file or directory”。问题根源这是经典的换行符问题。Windows使用CRLF(\r\n) 作为行结束符而Linux/Unix使用LF(\n)。那个^M就是CR(\r) 字符的显示。Shell解释器找不到/bin/bash^M这个“程序”自然就出错了。解决方案在Linux上修复使用dos2unix工具转换dos2unix backup.sh。如果没有这个命令可以用sed流编辑器sed -i s/\r$// backup.sh。预防措施在跨平台编辑脚本时务必使用能识别并设置行结束符的编辑器如VS Code、Notepad、Sublime Text并将其设置为“Unix(LF)”格式。在vim中可以在命令行模式输入:set ffunix来强制转换当前文件格式然后:wq保存。掌握编辑器的进入、编辑、保存、退出只是Shell脚本工作的第一步但却是最坚实的一步。它让你能自由地创造和修改自动化工具。从nano的简单直接开始逐步过渡到vim的高效强大你会发现命令行下的文本编辑不仅不是障碍反而成为一种享受。下次当你再需要修改脚本时希望你能自信地敲下vim script.sh或nano script.sh行云流水般地完成工作。记住所有的熟练都源于第一次成功的尝试和后续不断的实践。