news 2026/8/12 9:54:48

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell脚本编辑与保存:vi/vim与nano编辑器完整操作指南

1. 项目概述:从“编辑”到“保存”的完整闭环

如果你在Linux或Unix环境下工作,无论是管理服务器、处理数据还是自动化日常任务,Shell脚本都是你绕不开的得力工具。但很多朋友,尤其是刚入门的朋友,常常会卡在一个看似简单却至关重要的环节:如何编辑一个已有的脚本,以及如何保存并退出编辑器。这听起来像是“怎么用筷子吃饭”一样基础,但恰恰是这个基础,决定了你后续所有工作的效率。你可能遇到过这样的场景:在终端里用vim打开一个配置文件,修改了半天,却不知道怎么保存,最后只能强制退出,导致所有改动丢失;或者用nano编辑时,面对底部密密麻麻的快捷键提示一头雾水。这不仅仅是记住几个命令的问题,更是理解不同编辑器的“交互模式”和工作逻辑的问题。今天,我们就来彻底拆解这个“Shell脚本进入编辑模式和保存退出”的完整流程,我会结合十多年的运维和开发经验,把vi/vimnano这两个最常用的终端编辑器讲透,让你不仅能“用”,更能“懂”,从此告别在编辑器里手足无措的尴尬。

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发行版都预装了vivim

2.2 nano:简单直观的现代选择

vim的模态哲学相反,nano是一个“无模式”编辑器。它更接近Windows下的记事本或Notepad++。

  • 所见即所得:打开nano后,你直接就可以开始输入文字,底部会常驻显示常用的快捷键提示,例如^O(表示Ctrl+O)是保存,^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,结果这些字符都被当作文本输入到了文件里。

回到普通模式后,输入冒号:进入命令行模式,此时光标会跳转到屏幕底部,等待你输入命令。

最核心的几个命令如下:

  1. 保存但不退出:w

    • w代表 write(写入)。执行后,文件被保存,编辑器状态不变,你仍处在普通模式。
    • 应用场景:编辑长文件时的阶段性保存,防止意外丢失工作。
  2. 退出但不保存:q

    • q代表 quit(退出)。如果文件自打开后没有被修改过,这个命令会直接退出vim
    • 如果文件已被修改,vim会拒绝退出,并提示“No write since last change”。这时,你有两个选择:
      • 强制退出,放弃所有修改:q!
      • 先保存,再退出:执行:w后,再执行:q,或者直接用下一条命令。
  3. 保存并退出:wq

    • 这是最常用的组合命令,先执行写操作(w),再执行退出操作(q)。
    • 等价于依次输入:w:q
  4. 强制保存并退出(针对只读文件):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行。你可以:

  1. 输入:10跳转到第10行。
  2. 输入11dd(意思是:执行11次dd操作,即删除从当前行开始的11行)。或者更优雅地,在命令行模式输入:10,20d

4. nano编辑器全流程实操详解

nano的流程就直观多了。我们同样编辑backup.sh

4.1 启动与直接编辑

在终端输入:

nano backup.sh

编辑器界面打开,你直接就处于可编辑状态,可以开始输入或修改文本。底部两行会显示可用的快捷键,其中^符号代表Ctrl键。

4.2 保存与退出:依赖快捷键

nano中,所有功能都通过Ctrl键组合来触发。

  1. 保存文件Ctrl + O(字母O,不是数字零)。

    • 按下后,底部会提示“File Name to Write: [backup.sh]”。如果沿用当前文件名,直接按Enter回车即可。如果你想另存为新文件,可以在这里输入新名字再回车。
    • 保存成功后,底部会显示“[ Wrote X lines ]”的提示。
  2. 退出nanoCtrl + X

    • 如果你在退出前没有保存修改,nano会非常贴心地提示你:“Save modified buffer? (Answering ‘No’ will DISCARD changes.)” 它问你是否要保存已修改的缓冲区。
    • 你可以输入:
      • Y: 是的,保存。随后会进入上述保存文件的流程。
      • N: 不,放弃所有修改并退出。
      • Ctrl + C: 取消退出操作,回到编辑界面。

实操心得nano的交互非常“傻瓜式”,它总是试图防止你犯错。对于新手,我强烈建议从nano开始,它能让你把注意力集中在脚本内容本身,而不是编辑器操作上。记住Ctrl+O(保存)和Ctrl+X(退出)这两个最核心的快捷键就足够了。

5. 核心场景与避坑指南实录

了解了基本操作,我们来看几个实际工作中高频出现的场景和容易踩的“坑”。

5.1 场景一:编辑只读的系统配置文件

这是运维中最常见的场景之一,比如修改/etc/ssh/sshd_config

  • 错误做法:直接用vim /etc/ssh/sshd_config编辑,修改完后:wq,会得到“E45: ‘readonly’ option is set”的错误。
  • 正确做法
    1. 使用sudo提权打开文件:sudo vim /etc/ssh/sshd_config。这是最推荐的方式,从开始就获得权限。
    2. 如果你已经用普通用户打开了只读文件并做了修改,可以在vim的命令行模式使用一个“魔法”命令::w !sudo tee %
      • 这个命令的意思是:将当前缓冲区的内容写入(:w)到一个 shell 命令中,这个命令是sudo tee %%代表当前文件名。tee命令会从标准输入读取并写入文件。
      • 输入这个命令后,可能会提示你输入用户密码。执行成功后,再用:q!强制退出即可(因为缓冲区可能提示未保存,但实际文件已通过sudo保存)。

5.2 场景二:脚本编写中的快速操作

编写Shell脚本时,经常需要重复性操作。

  • 批量注释/取消注释:在vim普通模式下,这非常高效。

    • 注释多行:将光标移动到要注释的第一行,按Ctrl+V进入可视块模式,用j/k选择多行,然后按Shift+I(大写I),输入注释符(如#),再按两次Esc。你会发现选中的所有行首都被加上了#
    • 取消注释:同样用Ctrl+V选择多行前的#号,然后按d删除。
  • 搜索与替换

    • vim命令行模式,:/关键词可以向下搜索,:?关键词向上搜索。按n跳转到下一个匹配项。
    • 替换命令:s功能强大。:s/old/new/g替换当前行的所有old为new。:10,20s/old/new/g替换第10到20行。:%s/old/new/g替换整个文件。

5.3 常见问题排查速查表

问题现象可能原因解决方案
打开vim后按键变成乱码处于普通模式,却以为在插入模式ia进入插入模式再输入。
vim中输入:wq后字符被输入到文件里当前处于插入模式先按Esc回到普通模式,再输入:
vim中无法用方向键移动光标,而是输入了ABCD终端兼容性或vim配置问题尝试按Esc后,再按:进入命令模式,输入:set nocompatible并回车。更根本的方法是配置~/.vimrc文件。
nano中按Ctrl+S后编辑器卡死Ctrl+S是终端流控制键,会暂停输出Ctrl+Q即可恢复。在nano中应避免使用Ctrl+S
执行脚本时提示“权限不够”脚本文件没有可执行权限chmod +x script.sh为脚本添加执行权限。
vim中做了修改,但:q退不出文件已被修改,vim防止你丢失更改根据需求选择:wq(保存退出)或:q!(放弃修改退出)。
想复制vim里的文本到系统剪贴板默认的yyp只在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这个“程序”,自然就出错了。
  • 解决方案
    1. 在Linux上修复:使用dos2unix工具转换:dos2unix backup.sh。如果没有这个命令,可以用sed流编辑器:sed -i 's/\r$//' backup.sh
    2. 预防措施:在跨平台编辑脚本时,务必使用能识别并设置行结束符的编辑器(如VS Code、Notepad++、Sublime Text),并将其设置为“Unix(LF)”格式。在vim中,可以在命令行模式输入:set ff=unix来强制转换当前文件格式,然后:wq保存。

掌握编辑器的进入、编辑、保存、退出,只是Shell脚本工作的第一步,但却是最坚实的一步。它让你能自由地创造和修改自动化工具。从nano的简单直接开始,逐步过渡到vim的高效强大,你会发现命令行下的文本编辑不仅不是障碍,反而成为一种享受。下次当你再需要修改脚本时,希望你能自信地敲下vim script.shnano script.sh,行云流水般地完成工作。记住,所有的熟练都源于第一次成功的尝试和后续不断的实践。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/12 9:54:24

Sunshine游戏串流主机:开源跨平台游戏串流解决方案

Sunshine游戏串流主机:开源跨平台游戏串流解决方案 【免费下载链接】sunshine Host for Moonlight Streaming Client 项目地址: https://gitcode.com/gh_mirrors/sun/sunshine 还在为无法在不同设备间流畅游玩PC游戏而烦恼吗?Sunshine作为Moonlig…

作者头像 李华
网站建设 2026/8/12 9:54:24

NCM格式转换秘籍:3种方法解锁网易云音乐自由播放

NCM格式转换秘籍:3种方法解锁网易云音乐自由播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾在网易云音乐下载了心爱的歌曲,却发现只能在官方客户端播放,无法分享到其他设备&#xff…

作者头像 李华
网站建设 2026/8/12 9:54:01

PUBG罗技鼠标压枪宏深度解析:从原理到实战的完整技术指南

PUBG罗技鼠标压枪宏深度解析:从原理到实战的完整技术指南 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在《绝地求生》这款强调枪法…

作者头像 李华
网站建设 2026/8/12 9:53:54

终极音乐解锁指南:轻松解密各大平台加密音乐文件

终极音乐解锁指南:轻松解密各大平台加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gi…

作者头像 李华
网站建设 2026/8/12 9:53:37

2026年哈尔滨做智慧燃气安全监管平台的公司有哪些?

一年中有近半年时间处于供暖期,是这座城市燃气系统最鲜明的运行特征。入冬以后居民采暖和公共建筑用气量大幅攀升,管网长期高负荷运转,冻融循环、冻胀位移又持续考验埋地管线的密封与稳定;老城区部分管道服役年限较长,…

作者头像 李华