
用了几十年命令行我最后留在身边最顺手的编辑器居然是最不起眼的nano。这倒不是说vim不好只是当你深夜SSH到一台设备上面前只有黑底白字的终端后台还跑着一个快出结果的训练脚本这时候你需要的不是花哨的补全列表而是一个打开就能上手、按两下就知道下一步该干嘛的编辑器。nano就是干这个的。说实话我第一次看到nano界面底部那两行快捷键说明时第一反应是“这也太简陋了”。但真正用熟练之后会发现它的设计逻辑极其朴素所有操作都是单键直达不搞模式切换不靠插件堆功能把“快速修改文件”这件事做到了极致。这篇文章会把nano编辑器的常用操作、实用配置、嵌入式设备上的实战经验以及踩坑记录全部拆开讲一遍无论你是刚接触Linux的新手还是长期在Jetson这类板子上改配置的老手都能找到能直接抄走的东西。1. 为什么是nano而不是vim编辑器的选择逻辑1.1 nano是什么能干什么nano是一款基于终端界面的文本编辑器最早是作为pine邮件客户端里那个pico编辑器的自由替代品出现的。它的名字本身有点谐音梗的意思但丝毫不影响它在Linux世界里被广泛使用。几乎所有主流的Linux发行版都会默认安装或者至少提供nano的软件包这意味着在绝大多数服务器、开发板、云主机上你不需要额外安装什么东西就能直接用它。它能干的事其实不少修改配置文件、写shell脚本、快速编辑Python代码、临时记点笔记、打开日志文件翻一翻甚至当个极简的Markdown编辑器用也完全没问题。相比那些动辄几百MB的图形化编辑器nano本体只有几MB没有图形依赖不占内存尤其适合资源有限的嵌入式设备和纯命令行环境。很多人觉得nano太弱但回过头想想日常在服务器上做的事情百分之八十不也就是“打开文件、改几行、保存退出”吗。nano最厉害的地方就是把这件小事做到让人毫无心理负担。1.2 先把“编辑器”和“编译器”分清楚每次我教别人用nano总有人把编辑器和编译器混在一起。这在刚接触Linux的人里特别常见。简单来说编辑器负责写代码和改文件编译器负责把写好的代码变成机器能跑的东西。用nano写完一段C代码保存退出之后要再执行gcc去编译它编译器可不会因为你用了某个编辑器就自动帮你干活。这个概念搞清楚了很多困惑就解决了。比如有人问“用nano写完Python代码之后要不要编译”答案是不需要。Python是解释型语言写完保存直接用python3命令跑就完事。还有人问“nano能编译C吗”同样是不能nano只管编辑文本编译是g、gcc、clang的事。理解了这个边界你就不会在编辑器里翻来覆去找“运行按钮”了。1.3 我为什么在Jetson设备上首选nano这几年我经常折腾Jetson Nano和Orin Nano这类嵌入式AI开发板它们跑的是Ubuntu系统但算力和内存都很有限。在这种板子上装一个图形化的VS Code也不是不行但每次打开都要等好几秒风扇呼呼转实在心疼那点内存。再说很多场景下你根本不需要图形界面SSH连上去改个参数、改个启动脚本nano就绰绰有余。Jetson设备默认的Ubuntu镜像里就带nano开机即用。这一点帮了大忙——你刷完系统第一件事往往是修改用户环境变量、检查Python路径、调整开机启动脚本这些全都要跟文本编辑器打交道。nano的按键逻辑是所见即所得的没有“普通模式”和“插入模式”之分对于偶尔进一次终端改配置的人来说比vim友好太多。另外nano的启动速度快到几乎无感。在Orin Nano这种性能不算强的板子上打开一个几百行的Python测试脚本nano基本是秒开而某些图形编辑器可能要等一两秒。做嵌入式开发很多时候差的就是这点流畅感。2. 环境准备安装、启动和看懂界面2.1 不同系统的安装方法虽然大多数Linux系统自带nano但总有些环境需要手动装一下。我整理了常见的安装命令直接照着敲就行。Debian和Ubuntu系包含Jetson设备的Ubuntu系统sudo apt update sudo apt install nano -yCentOS和RHEL系sudo yum install nano -y如果是较新的Rocky Linux或AlmaLinux也可以用dnf。macOS系统brew install nano没装Homebrew就先去装Homebrew装好后nano会自动加入PATH。Windows上没有原生nano但如果你用WSLWindows Subsystem for Linux在WSL的Ubuntu环境里同样可以用apt安装。如果是纯粹的Windows终端可以选择使用Git Bash里带的nano或者直接装个Windows Terminal配合WSL效果最好。装完之后验证一下版本nano --version能看到版本号就说明装好了。nano的更新迭代挺快的老版本和新版本在功能上会有差异比如行号和语法高亮这种功能老版本可能不支持后面讲配置的时候我会专门提这一点。2.2 启动nano之后怎么读懂界面启动nano的方式很简单在终端里输入nano后面跟文件名就行nano test.txt如果文件不存在nano会按“新文件”处理等你保存的时候再创建它。如果不带文件名直接敲nano也能进编辑器保存的时候再指定文件名。进入之后你会看到nano的界面分三块。最上面一行是标题栏显示当前编辑的文件名如果在文件后面看到了一个星号*说明当前文件有未保存的修改。中间大片区域是编辑区你敲的每一个字符都会实时出现在这里。最下面是两行快捷键提示栏这可以说是nano的灵魂它把当前状态下最常用的操作直接摆在屏幕上不用记也能猜个八九不离十。这两行提示长这样^G 帮助 ^O 保存 ^W 搜索 ^K 剪切 ^U 粘贴 ^X 退出这里的^代表Ctrl键^G就是先按住Ctrl再按G^O就是CtrlO。如果你在操作时看到M-开头的东西比如M-U那代表Alt键或者有些终端也支持按一下Esc键再按后面的字符来模拟Alt组合键。我第一次看到这个界面第一反应是“我怎么知道光标在哪”。其实nano按一下CtrlC就能看到当前光标的位置显示格式类似“line 3/100 (3%), col 5”也就是当前在第3行、共100行、第5列。这个功能在定位超大文件时特别有用。3. 核心操作全覆盖从移动光标到保存退出3.1 光标移动键盘不只是方向键在nano里方向键当然可以移动光标但更高效的方式是用组合键。比如CtrlA跳到当前行开头CtrlE跳到当前行结尾。这两个键特别好记A是Actually开头E是Everything结尾时间长了完全是肌肉记忆。翻页也有对应操作CtrlY往前翻一页CtrlV往后翻一页。注意这里不要跟vim混淆vim里CtrlF是向后翻页nano里翻页是CtrlV我第一次切换的时候老按错。跳转到指定行用AltG。按下之后底部会提示“Enter line number”输入行号回车光标就直接飞过去。这个功能在处理编译报错时救命编译日志告诉你“第152行有语法错误”你直接AltG跳到152行就行。还有一组很好用的移动方式Alt\跳到文件开头Alt/跳到文件末尾。注意这里反斜杠和斜杠的差别非常微妙但用习惯了就顺手。修改一个长配置文件的最后几行时Alt/简直是传送门。3.2 删除、剪切、复制和粘贴nano的删除操作很直观Backspace删除光标前一个字符Delete删除光标所在字符。如果你要删除的是一个单词可以按AltBackspace有些终端显示为AltDel它会一次删掉光标前面的整个英文单词。剪切和粘贴是很多人觉得难搞的地方。先说结论CtrlK剪切CtrlU粘贴。nano里的CtrlK默认剪切整行不管光标在这一行的哪个位置按一下就把整行搬到剪贴板里了。如果你只是想删掉一行而不是复制到别处用CtrlK之后不粘贴效果就等于删整行。如果想剪切一个自定义区域需要先用AltA设置标记。按下AltA后你会发现光标位置开始有反白选区这时候用方向键或鼠标前提是启用了鼠标支持选中你要的内容再按CtrlK剪切的就不是整行而是你选中的那一段了。复制操作稍微绕一点先AltA标记要复制的区域然后按Alt^也就是AltShift6具体看终端就把选中内容复制到剪贴板再CtrlU粘贴。如果要复制当前整行直接Alt^就行不需要先标记。这个Alt^很容易被误按成别的键多试几次找到手上的感觉就好。3.3 搜索与替换CtrlW和Ctrl\的组合技搜索功能在长文件里几乎天天要用。在nano里按CtrlW底部会出现搜索提示输入关键词回车光标会跳到第一个匹配位置。如果要继续查找下一个匹配再按AltW。这跟很多编辑器里按F3重复查找是一个思路。替换功能是Ctrl\反斜杠一般在回车键附近。按下去之后nano会先问你“Search (to replace)”输入要被替换的旧词回车再提示“Replace with”输入新词回车。这时候nano不会立刻全部替换而是停在后盖词上问你确认。在一堆选项里Y是替换当前这一处A是全部替换N是跳过Q是退出替换。我实际操作中选A的情况最多但改代码的时候如果替换词可能有歧义我会老老实实一个个按Y确认防止误伤。搜索和替换里还藏着两个进阶开关在搜索界面按AltC可以切换大小写敏感按AltR可以切换正则表达式模式。正则模式特别适合做批量修改比如把所有的test1、test2、test3统一改成test_xxx这种模式用正则几秒钟就搞定手动改能改到崩溃。3.4 保存和退出先把CtrlS这个习惯改掉在Windows和很多图形编辑器里CtrlS是保存但在Linux终端里nano保存的快捷键是CtrlO全称是WriteOut。按下CtrlO之后底部会显示文件名让你确认直接回车就是保存。如果想另存为其他文件名在这里输入新路径就行。退出是CtrlX。如果文件有未保存的修改nano会问“Save modified buffer?”输入Y表示保存后退出输入N表示放弃修改直接退出。如果选了Y它还会再确认一次文件名回车即可。这里必须重点提一下CtrlS的坑。在很多终端环境下你按CtrlS并不会保存而是会直接把整个终端“冻住”屏幕上不管输入什么都无效看着像是nano卡死了。这时候不要慌按一下CtrlQ就能解冻。这个问题的根源在终端流控后面第6章我会详细说解决办法这里你先记住应急的CtrlQ。3.5 常用快捷键速查表我把最常用的nano快捷键整理成一个表格建议截图保存用一两次就会形成肌肉记忆。类别快捷键功能说明光标CtrlA / CtrlE跳到行首 / 跳到行尾光标CtrlY / CtrlV向前翻页 / 向后翻页光标Alt\ / Alt/跳到文件开头 / 文件末尾光标AltG跳到指定行号编辑Backspace / Delete删除前一个 / 光标处字符编辑AltBackspace删除前面的一个单词编辑CtrlK剪切整行有选区则剪切选区编辑CtrlU粘贴剪贴板内容编辑Alt^复制当前行或选区编辑AltA开始/取消标记选区编辑AltU / AltE撤销 / 重做搜索CtrlW搜索搜索AltW继续搜索下一个搜索AltC切换大小写敏感搜索AltR切换正则表达式模式替换Ctrl\查找并替换文件CtrlO保存文件文件CtrlX退出nano文件CtrlR把另一个文件内容插入当前光标处辅助CtrlG打开帮助文档辅助CtrlC显示当前光标位置、行号、列号4. 把nano调教成趁手的编辑器配置文件与语法高亮4.1 快捷键提示里的^和M-是什么每次看到nano底部的提示新手最容易卡住的就是看不懂^和M-。这个真不难。^是Ctrl键所以^F就是CtrlF。M-在nano里代表Meta键在大多数PC键盘上就是Alt键在macOS上需要稍微设置一下后面第6章会讲。举个例子底下一行显示M-U撤销那实际操作就是AltU。如果你所在的终端对Alt支持不太好也可以按一下Esc键再按U效果一样。别小看这种小知识很多人卡在“M-U到底按什么”上半天不敢往下走。4.2 编辑.nanorc的核心配置项nano的配置文件和vim类似用户级配置文件在~/.nanorc系统级配置文件在/etc/nanorc。默认情况下~/.nanorc可能不存在你直接创建就行。我自己用的配置文件可以当模板抄set linenumbers set autoindent set tabsize 4 set tabstospaces set mouse set softwrap set smooth set historylog set backup逐行解释一下。set linenumbers开启行号这个对写代码和查日志非常重要。set autoindent自动缩进新行会沿用上一行的缩进写Python这类对缩进敏感的语言时能省不少事。set tabsize 4一个Tab显示为4个空格宽度。set tabstospaces按Tab键时自动转成空格。如果项目要求代码不能用Tab混用空格这一行必须开。set mouse开启鼠标支持。在图形终端下可以用鼠标点击定位光标操作起来更直观。set softwrap软换行。文件里有超长行时不改变文件内容只是显示上折行读日志尤其好用。set smooth平滑滚动翻页时不会显得太突兀。set historylog记住搜索历史下次搜索时可以上下翻找以前的词。set backup保存时自动生成备份文件文件名后面会加个波浪号~。虽然有点占空间但关键时刻能救命。把上面这些内容写进~/.nanorc保存退出重新打开nano就会生效。注意如果你用sudo nano编辑系统文件加载的配置是root用户的配置而不是当前用户的。想要让root也吃这套配置可以把文件复制到/root/.nanorc或者执行sudo -E nano试试保留环境变量。4.3 让代码和脚本自动高亮nano的语法高亮比很多人以为的强得多。现代版本的nano在安装时通常会附带一批语法高亮文件放在/usr/share/nano/目录下。你可以先看看这个目录里有什么ls /usr/share/nano/如果看到了python.nanorc、sh.nanorc、c.nanorc这类文件说明已经具备语法高亮能力了。在较新的Ubuntu版本上这些文件会被默认加载你打开.py文件就能看到彩色的关键词。如果你的系统里没有自动加载可以在~/.nanorc里手动include。比如include /usr/share/nano/python.nanorc include /usr/share/nano/sh.nanorc include /usr/share/nano/makefile.nanorcinclude之后重新打开对应类型的文件高亮就出来了。需要注意不同发行版的自带语法文件路径可能略有不同先确认下文件确实存在再include不然nano启动时会报路径错误。如果你用的语言比较冷门系统自带语法文件里没有可以去搜索一下nano-syntax-highlighting这个开源项目它维护了大量语言的.nanorc文件下载后放到某个目录再在~/.nanorc里include就能用。虽然nano的高亮精度比不上专业IDE但在终端里写个脚本、调个配置完全够用了。5. 实战在Jetson设备上用nano高效改配置和脚本5.1 用nano修改用户环境变量用Jetson设备的人应该都很熟悉一个场景刚从SD卡烧完系统要配置CUDA环境、设置模型路径、修改Python默认版本这些都离不开~/.bashrc文件。执行nano ~/.bashrc进入文件后用方向键滚到文件末尾最好用Alt\直接跳到文件开头再配合CtrlV翻页往下翻找到合适的位置。添加环境变量的典型操作是在文件末尾加上一行export PATH$PATH:/usr/local/cuda/bin输入的时候如果没开自动缩进内容会贴在行首没关系保存退出后执行source ~/.bashrc让修改立刻生效。检查一下nvcc --version能正常输出CUDA版本说明路径已经生效了。整个流程在nano里操作非常丝滑因为缺少模式切换你永远不会出现“按了i为什么没反应”这种vim新手困惑。5.2 用搜索替换批量调整模型检测参数在Jetson上跑YOLOv5这类目标检测任务是家常便饭。有时候你想把检测脚本里的置信度阈值从默认的0.25调高到0.4减少一些误检。这时候直接打开detect.pynano detect.py按CtrlW输入conf_thres回车光标会定位到参数定义的地方。如果你想全局替换数值按Ctrl\先输入0.25再输入0.4回车之后按A选择全部替换。几秒钟就把一个参数调完了比在图形界面里翻设置快得多。这里有个小提醒全局替换前先想清楚被替换的字符串有没有可能出现在注释里或者别的无关地方。比如字符串0.25可能同时出现在别处的学习率参数里所以重要的参数替换我一般不用A全换而是一个个按Y确认。稳妥总比省事重要改坏了模型跑不起来更浪费时间。如果你需要在Orin Nano上部署Qwen这类大模型同样会经常修改推理脚本里的模型路径、批处理大小、最大序列长度等参数。这些参数分布在脚本不同地方手工找容易漏尤其是参数名字长得像的时候。nano的搜索功能配合跳行能让你在几百行代码里快速定位到每一个关键位置效率非常高。5.3 多文件编辑和临时挂起Shell在Jetson上调试程序时经常要同时改好几个文件。你完全不需要开多个终端窗口来回切换nano支持一次打开多个文件nano detect.py start_ai_service.sh启动之后nano会把文件放在不同的缓冲区里。按Alt逗号切换到上一个文件按Alt句点切换到下一个文件。底部提示栏会显示当前在哪个文件里非常清楚。有时候你改着改着突然想起来得查一下某个命令的用法又不想退出nano丢掉当前编辑进度。这时候可以按CtrlZ把nano挂起到后台回到shell执行你想执行的命令完事后敲fg回车nano就原样切回来了光标位置、暂存内容全都在。这个技巧我用了无数次真的香。5.4 针对嵌入式小屏的显示优化Jetson设备有时候接的是小型HDMI触摸屏分辨率不高nano打开长文件时左右滑动很烦。这时候set softwrap就派上用场了。开启后超长行会在屏幕边缘自动折行不用左右滚动就能看到完整内容。还有一个更容易被忽略的点Jetson设备在跑训练时CPU占用高打开编辑器可能会觉得卡。nano的轻量在这里就是巨大优势哪怕CPU占用90%以上它照样秒开秒响应不像某些图形编辑器还要等界面渲染。我试过在设备上同时跑推理和用nano改脚本体感几乎没有影响。如果你用的是老版本nano可能没有行号显示那就检查一下发行版源里有没有新版可升级sudo apt upgrade nano升级完再看设置体验完全不一样。6. 常见问题与排查技巧实录6.1 按了CtrlS后终端卡死怎么办这个坑我亲眼见很多人踩过。在Linux终端里CtrlS默认是锁定输出流不是保存。按下去之后终端会停止刷新你敲的字母也不会显示看起来就像系统死了。解决办法是先按CtrlQ解锁一切恢复原样。想彻底解决这个问题有几个思路。一是修改终端的流控设置执行stty -ixon这样CtrlS就不再是流控键了。但这个设置只对当前终端会话有效重启终端又会变回去。想要永久生效可以把它写进~/.bashrc。另一个思路是直接在nano里给CtrlS绑定保存功能。在~/.nanorc里加一行bind ^S savefile main之后在nano里按CtrlS就是真正的保存了。这个方法只影响nano不影响终端全局我觉得是最优雅的解法。6.2 中文显示成乱码在终端里打开一个中文文件结果满屏乱码这大概率是字符编码不匹配。nano本身支持UTF-8但终端会话的locale设置如果不对显示就会出问题。可以先检查当前localeecho $LANG如果输出不是带UTF-8的值可以临时用LANGzh_CN.UTF-8 nano 文件名来启动nano。或者把Locale环境变量设置到~/.bashrc里让它在每次登录时自动生效。还有一种情况是文件本身不是UTF-8编码比如Windows传过来的文件可能是GBK那属于文件编码问题可以用iconv先转换编码再打开。总之先确认是终端编码还是文件编码再对症下药。6.3 粘贴代码时缩进全乱了在终端里往nano粘贴一大段代码粘完之后发现每行前面都多出了乱七八糟的空格甚至整个缩进结构完全错乱。这是因为nano开了自动缩进而终端模拟器会把粘贴的文本按逐行处理每一行都触发了自动缩进。解决方式是粘贴前临时关闭自动缩进。在nano里按AltI底部会提示Auto Indent状态变了然后粘贴粘完再按一次AltI恢复。如果还是不干净看看终端软件有没有“括括号粘贴模式”相关的设置比如MobaXterm里开启括号粘贴模式也会改善这个问题。6.4 保存时提示权限不够编辑/etc/下的系统文件或者当前用户没有写权限的文件时CtrlO保存会报错文件没法写入。这个问题的根本原因是权限不足解决方案很简单用sudo启动nano别用sudo挂到保存阶段。正确的做法是先退出编辑再执行sudo nano /etc/系统文件这样整个进程以root身份运行自然就有权限了。也有人喜欢用sudo -E nano保留自己的环境变量这样可以继续加载你配置的语法高亮和快捷键但实际用下来我更喜欢直接sudo因为系统文件默认高亮其实已经够用图个干净。6.5 内容意外丢失后如何补救nano不像vim那样有个swap文件机制崩溃或会话意外断开时未保存的修改有可能丢。我自己在跑长任务的时候也遇到过失联导致修改丢失非常心疼。经过多次踩坑之后现在的习惯是一个文件改到一定阶段就随手按一下CtrlO不追求一次性改完再保存。ctrlO就是几秒钟的事但能把损失降到最低。如果你改了配置文件后没有保存就退出nano在退出时会有明确提示这时候按N等于放弃所有修改一定要想清楚再按。另外如果你开了set backup配置保存时会在同目录生成一个带波浪号~结尾的备份文件必要时还能从这个备份里找回上一版内容。6.6 Alt键在终端里失效很多从macOS或Windows远程连Linux的人会遇到一个问题nano底部提示M-U撤销但按AltU没反应。这通常是终端软件没有把Alt键当成Meta键来用。比如macOS自带的Terminal.app默认Option键被设置成了输入特殊字符需要到“偏好设置 - 描述文件 - 键盘”里把Option键设为“Meta键”或“发送ESC键”。如果你用的MobaXterm可以在终端设置里查找Meta相关选项。如果不想改配置还有一种万能办法按一下Esc键然后紧接着按后面的字母效果和按Alt字母一样。比如AltU就改成按Esc再按U。这个方法在任何终端里都有效属于兼容性最强的招。6.7 问题速查表问题现象根本原因解决办法按CtrlS卡死终端流控把输出锁住了按CtrlQ恢复或用stty -ixon关闭流控中文乱码locale编码或文件编码不匹配设置LANG为UTF-8或先转换文件编码粘贴缩进混乱自动缩进与终端粘贴冲突粘贴前按AltI关闭自动缩进保存提示权限不足当前用户对文件无写权限用sudo nano重新打开文件Alt组合键无反应终端没有把Alt识别为Meta键改终端设置或用Esc代替Alt修改意外丢失会话断开且未保存养成随手按CtrlO保存的习惯可配置备份用nano这件事说到底就是一个熟能生巧的过程。刚开始你可能觉得几个快捷键记不住但用了一周之后CtrlO、CtrlX、CtrlW这几个键几乎不动脑子就能按出去。我个人在实际操作中最深的体会是工具的价值不在于功能多丰富而在于它能不能在最关键的时候让你不做任何多余动作。nano就是这样打开快、操作直、退出干脆不给你添乱在Jetson这种资源紧张又充满变数的设备上这种“可靠”比什么都重要。最后再分享一个小技巧也是我这两年用得最频繁的如果你需要临时改一个文件又不想污染nano的历史记录和配置可以执行nano -w 文件名-w参数禁用自动换行在改超长配置时不会莫名给你折行。改完之后CtrlX退出干干净净不带走一片云彩。希望这篇教程能帮你把nano用顺也希望大家在下一台设备、下一个服务器上都能在终端里游刃有余。