简介:Notepad++ 是一款面向 Windows 平台的免费开源文本编辑器,这份压缩包提供解压即用的免安装版本,双击即可启动,适合程序员编写代码、运维人员查看日志与配置、办公用户处理纯文本等多种场景。软件内置中文界面,支持多语言切换与 UTF-8 编码,相比系统自带记事本功能明显更强:语法高亮、代码折叠、宏录制以及可扩展的插件模块一应俱全,无论撰写程序源码还是整理配置文件都更顺手。
压缩包共 303 个文件,总量约 6.67MB。其中 exe 主程序与 dll 运行库构成核心可执行部分,html、css、xml 承载界面与配置资源,png、gif 为图标素材,txt、log、sql 等说明与示例文件便于快速上手,dic、aff 拼写词典则支撑多语言校对。目录结构完整,解压后可直接使用,也能放入 U 盘随身携带。
已有 4624 人学习下载,适合需要轻量级编辑工具的开发者与日常办公用户选用。
1. 绿色版 Notepad++ 值不值得放进 U 盘:一个 3 秒启动的编辑器能顶哪些活
上周被拉去一台不能装软件的生产机改配置,随身只有一个 U 盘。要在那种环境里立刻打开一个 40MB 的日志、按列对齐几十行参数、顺手把 GBK 转成 UTF-8,我第一个想到的就是绿色版 Notepad++——解压、双击、三秒出界面,不写注册表、不问管理员密码。这类工具型编辑器解决的从来不是“功能多”,而是“环境不属于你”:临时机器、跳板机、客户现场、教学机房,装不了也不想装。适合谁?天天改配置、看日志、临时写脚本的运维和后端;不适合谁?指望它当 IDE 写大型工程的人,索引、重构、调试器它一样都不给。免安装包的价值就在开箱即用和可携带,把它当“随身瑞士军刀”,别当“随身 workstation”。
2. 解压先看目录:doLocalConf.xml 决定配置写到哪
绿色版最容易被误解的一点,是以为“免安装”等于“无状态”。实际上它状态很重:字体、缩进宽度、最近打开的文件、备份路径、插件开关,全部躺在 config.xml 里。这份配置一旦跑到用户目录去,你换一台机器就等于从零开始,插件要重装、快捷键要重设、连语法高亮配色都得重新挑一遍。所以解压之后第一件事不是急着双击 exe,而是先看目录里那个只有几个字节的小文件在不在。
2.1 解压后的目录职责:哪些能动,哪些别碰
一份完整的便携包解开后,长这样:主程序旁边散着一堆 xml,plugins 下面每个插件一个子目录。第一次看会觉得乱,其实按“谁读谁写”归类就清楚了。
| 路径 | 作用 | 处理建议 |
|---|---|---|
| notepad++.exe | 主程序,32 位与 64 位是两份,别混用 | 只保留一个架构 |
| doLocalConf.xml | 存在即表示“配置写程序目录” | 必须保留,空文件即可 |
| config.xml | 全局设置,首次正常退出后生成 | 备份,别手改 |
| shortcuts.xml | 自定义快捷键、“运行”命令、宏 | 随包迁移 |
| stylers.xml | 语法高亮配色方案 | 可替换 |
| langs.xml | 语言关键字定义 | 别动 |
| plugins\ | 每个插件一个子目录,里面放 dll | 按需增删 |
| themes\ | 主题 xml | 可删 |
| userDefineLangs\ | 自定义语言定义 | 可加 |
| functionList\ | 函数列表解析规则 | 可加 |
| localization\ | 界面翻译文件 | 可删,能省几 MB |
| updater\ | 在线更新组件 | 离线环境建议挪走 |
| backup\ | 自动备份与未保存快照 | 定期清 |
最容易出问题的是架构混用:64 位主程序配了 32 位插件 dll,表现是插件在菜单里能看见,点了毫无反应,也没有任何报错。这种“静默失效”比崩溃更难查。我的做法是解压完先看 exe 属性里的位数,然后只保留同架构的那一份,另一份直接删掉,免得以后自己手滑。
:: 在解压目录里执行,确认关键文件是否到位(/a 显示隐藏文件) dir /a /b doLocalConf.xml config.xml notepad++.exe这条命令只做一件事:把三个关键文件名列出来。如果 doLocalConf.xml 不在输出里,说明这个包其实是安装版的解压产物,配置会往用户目录跑,后面所有的“便携”承诺都不成立。参数/a是为了防止有人把开关文件设成了隐藏属性,/b只输出文件名,方便肉眼核对。
2.2 doLocalConf.xml:几字节的文件决定配置去哪儿
安装版把配置写在用户目录下的应用数据文件夹里,便携版靠的就是程序目录里那个 doLocalConf.xml。文件内容不重要,甚至可以是 0 字节,程序只判断它“存在不存在”。所以哪天你发现设置改完重开就还原,第一反应应该是去确认这个文件还在不在,而不是怀疑程序坏了。
:: 缺失时补一个空文件,注意文件名一字不差 type nul > doLocalConf.xmltype nul >是 Windows 下生成 0 字节文件最省事的写法,比新建文本文档再改名靠谱——后者经常被系统自动加上 .txt 后缀,变成 doLocalConf.xml.txt,肉眼几乎看不出来。补完之后重新启动一次,改个设置,正常退出,再看 config.xml 的修改时间是否更新:
:: /tw 按修改时间排序显示,用来验证配置是否真的落在本地 dir /tw config.xml如果时间没变,说明配置根本没写到程序目录。常见原因是解压到了受保护路径(比如系统盘的某个只读目录),普通权限写不进去,程序悄悄退回到用户目录。把整个文件夹挪到 U 盘根目录或者用户自己的文档目录下就好,别放在需要提权才能写的路径里。
提示:部分安全软件会把“程序往自身目录写文件”当成可疑行为拦下来,表现同样是设置不保存。遇到这种,先看拦截日志,别急着怀疑包有问题。
2.3 首次启动要固定的四件事
便携包拿到手,花五分钟做完这四件事,后面能省掉大量重复劳动。
第一件,关掉自动更新。离线机器上它只会每隔一段时间弹一次窗,而且更新组件在写保护介质上会直接失败。在首选项里取消自动检查更新,顺手把 updater 目录移出程序目录,眼不见为净。
第二件,把备份路径固定到包内。首选项的备份页里打开简单备份,确认备份目录指向程序目录下的 backup,而不是系统临时目录。临时目录会被清理,你在 U 盘上编辑到一半断电,恢复的希望全在那个文件夹里。
第三件,定死新建文档的默认编码和换行符。这一条后面第 3 章还会展开,但必须在这里设好,否则你每建一个文件就要手动改一次编码,早晚会漏。
第四件,关掉会话记忆。多人共用同一份绿色包时,会话记忆会把上一个人的一堆标签页带给下一个人,有时候还带着未保存的临时快照,容易误判“这文件是不是被人改过”。关掉之后,每次启动都是干净的空窗口。
多机同步还有一个隐藏坑:config.xml 里会记录最近打开文件的绝对路径,带着盘符。从 U 盘换到本地磁盘,这些路径全部失效,程序启动时会尝试加载然后失败。定期清一次最近文件列表,比事后排查“为什么一开机就报错”省事得多。
3. 编码与换行钉死:UTF-8 BOM、GBK、CRLF 的三方对账
编辑器最常见的翻车现场不是崩溃,是“我这边好好的,别人打开全是问号”。这类问题九成出在编码和换行符上,而这两件事恰恰是绿色版最容易忽略的——它默认跟随系统,你从一台中文 Windows 拷到另一台,行为就可能变。把编码策略一次性钉死,比每次出事再救火划算得多。
3.1 乱码有两个方向,成因完全不同
第一种方向:你打开别人的文件是乱码。原因是文件本身是 GBK 编码,程序按 UTF-8 去解,一个汉字三个字节的边界全错位,于是满屏方块。这种不要在乱码状态下直接保存,一保存就真的把内容写坏了。正确做法是用菜单里的编码转换功能,按 GBK 重新载入,看到中文正常之后再决定要不要转成 UTF-8。
第二种方向:你保存的文件别人打开是乱码。原因通常有两个——保存成了带 BOM 的 UTF-8,某些脚本解释器会把 BOM 当成正文内容,导致第一行报语法错误;或者保存成了 ANSI,跨语言环境立刻失效。
判断当前文件是什么状态,看状态栏就够了。状态栏会显示编码名、换行符类型、当前光标行列。养成“动手之前先扫一眼状态栏”的习惯,能挡掉八成的编码事故。
注意:不要在乱码状态下按保存。程序不会提示你“这样会损坏文件”,它只会老老实实把你看到的乱码写回去。
3.2 新建文档的默认值:先改设置,再动手
把默认值改掉,是唯一能根治“每次都忘”的办法。首选项里的新建文档页,把编码设成 UTF-8(不带 BOM),把默认语言按你日常最多的类型设好,换行符按团队约定选。Windows 环境下的批处理、配置文件一般要 CRLF;给 Linux 服务器准备的脚本、Docker 相关配置必须 LF,否则容器里跑起来会报“找不到解释器”这种让人一头雾水的错。
换行符的转换在编辑菜单的档案格式转换里,三个选项对应 CRLF、LF、CR。这里有个细节:转换是整文件级别的,不是选区级别的,改之前想清楚这个文件最终跑在哪个系统上。
跨行查找替换时,换行符用\R匹配比写死\n稳。\R能同时吃 CRLF、LF、CR 三种,不用管文件当前是什么格式;写死\n的话,CRLF 文件里每行末尾会残留一个\r,替换结果里就会多出一堆莫名其妙的空行。
3.3 批量体检脚本:一次扫完目录里的编码与 EOL
手工一个个开文件看状态栏,几十个文件还能忍,几百个就不现实了。我的习惯是先跑一遍只读扫描,把“带 BOM 的”“不是 UTF-8 的”“换行符混用的”挑出来,再决定动谁。下面这段脚本只依赖标准库,扔进便携包目录直接能跑。
# encoding_audit.py —— 只读扫描目录,输出编码、换行符、BOM 状态 import os import sys import shutil EXTS = {".py", ".js", ".json", ".md", ".txt", ".csv", ".xml", ".ini", ".conf", ".log"} BOM = b"\xef\xbb\xbf" def sniff(path): """只读前 8KB 做判断,避免把上百 MB 的日志整个读进内存""" with open(path, "rb") as f: raw = f.read(8192) has_bom = raw.startswith(BOM) try: raw.decode("utf-8") enc = "utf-8" except UnicodeDecodeError: enc = "non-utf8" # 大概率是 GBK/ANSI,需要人工确认后再转 if b"\r\n" in raw: eol = "crlf" elif b"\n" in raw: eol = "lf" else: eol = "none" return enc, eol, has_bom def convert(path, newline): """先备份再重写,只处理能确定是 UTF-8 的文件""" shutil.copy2(path, path + ".bak") with open(path, "r", encoding="utf-8-sig") as f: text = f.read() with open(path, "w", encoding="utf-8", newline=newline) as f: f.write(text) def main(root, apply=False): target = "\r\n" if sys.platform == "win32" else "\n" for base, dirs, files in os.walk(root): dirs[:] = [d for d in dirs if d not in {".git", "node_modules", "backup"}] for name in files: if os.path.splitext(name)[1].lower() not in EXTS: continue path = os.path.join(base, name) enc, eol, bom = sniff(path) flags = [] if bom: flags.append("BOM") if enc != "utf-8": flags.append("NON-UTF8") print(f"{path}\t{enc}\t{eol}\t{'/'.join(flags) or 'ok'}") if apply and enc == "utf-8" and bom: convert(path, target) if __name__ == "__main__": main(sys.argv[1] if len(sys.argv) > 1 else ".", "--apply" in sys.argv)这段脚本有三处刻意保守的设计,值得说清楚。EXTS是白名单,只碰你明确知道格式的文本文件,二进制文件一律跳过,免得把图片写坏。sniff只读前 8KB,判断编码和换行符够用了,目录里躺着一个 300MB 的日志也不会拖死机器。convert前面先复制一份 .bak,这个“后悔药”在处理别人交过来的目录时非常重要。
参数上,第一个位置参数是扫描根目录,不传就是当前目录;--apply是开关,不加只打印不改写。即便加了--apply,也只处理“确认是 UTF-8 但带 BOM”这一种最安全的子集,因为 BOM 的处理结果是确定的,去掉不会改变任何字符。至于non-utf8那一类,脚本只报告不动手——它可能是 GBK,也可能是别的本地代码页,盲转就是赌。这类文件我一般在编辑器里逐个打开,用编码菜单重新载入,确认中文正常后再转成 UTF-8。
跑完一遍,输出里ok之外的行都是待处理项。通常一个老项目扫下来,混着 CRLF 和 LF 的文件会占两三成,带 BOM 的 json 配置文件也总有几个。json 文件带 BOM 是最阴的坑,解析器直接报“unexpected token”,而你在编辑器里看内容是完好的,不扫一遍根本发现不了。
4. 把运行菜单用起来:Python/Node/单文件编译的一键执行配置
改完配置顺手要验证,来回切终端窗口是最低效的动作。编辑器自带的运行菜单能覆盖大部分单文件场景,配合 NppExec 插件可以做到内嵌控制台、报错双击跳行。这一层配好之后,写个脚本验证想法的时间能从一分钟压到几秒,长期下来差别很大。
4.1 运行菜单够不够用,什么时候必须上插件
自带的运行菜单原理很简单:把命令字符串里的变量替换成当前文件的真实路径,然后交给系统去执行。优点是零依赖、配置写在快捷键里、跟着 shortcuts.xml 一起迁移;缺点是它开的是一个独立窗口,程序跑完窗口就关,出错信息一闪而过,你根本来不及看。
所以判断标准很直接:只看结果、不需要看过程的一次性命令,用自带运行菜单;需要看输出、需要反复调试、需要保存多套脚本的,上 NppExec。后者在控制台面板里跑,输出留在编辑器下半区,可以滚动、可以搜索、可以配置过滤器把报错变成可点击的链接。
插件安装本身有个坑要提前说:离线环境用不了插件管理器,只能手动放。规则是 plugins 目录下建一个与插件同名的子目录,dll 放进去,重启程序。直接扔在 plugins 根目录下是不生效的,这个细节坑过不少人。
4.2 三条可直接抄的运行命令
自带运行菜单里的变量是通用的,常用的几个:$(FULL_CURRENT_PATH)是完整路径,$(CURRENT_DIRECTORY)是文件所在目录,$(FILE_NAME)是带扩展名的文件名,$(NAME_PART)是不带扩展名的主名,$(EXT_PART)是扩展名。
:: 1) Python 单文件:先切到脚本目录再执行,末尾 pause 留住窗口 cmd /c cd /d "$(CURRENT_DIRECTORY)" && python "$(FILE_NAME)" & pause :: 2) Node 单文件:同上,适合临时验证一段逻辑 cmd /c cd /d "$(CURRENT_DIRECTORY)" && node "$(FILE_NAME)" & pause :: 3) C 单文件:编译成功才执行,失败就停在编译错误上 cmd /c cd /d "$(CURRENT_DIRECTORY)" && gcc "$(FILE_NAME)" -o "$(NAME_PART).exe" && "$(NAME_PART).exe" & pause三条命令骨架一致,差别只在解释器。cd /d里的/d不能省,它允许跨盘符切换目录——你的编辑器在 D 盘,脚本在 U 盘,不加/d切不过去,脚本里的相对路径读取就全错。路径变量外面必须加双引号,中文路径和带空格的目录太常见了,不加引号立刻翻车。&&表示前一条成功才执行后一条,&表示无论如何都执行下一条,pause用&连接是为了编译失败时也能停住,让你看清错误。
第二条命令里的&&是有意为之:编译不过就别执行旧的 exe,否则你看到的是上一次的运行结果,会误以为改动生效了。这种“假成功”比报错更浪费时间。
命令配好之后点“保存”,给它起个名字并绑定快捷键,配置会落到 shortcuts.xml 里。手动备份一份这个文件,换机器时直接覆盖过去,快捷键和命令一起迁移:
<!-- shortcuts.xml 片段:注意 & 必须转义成 &,否则 xml 解析失败 --> <UserDefinedCommands> <Command name="Run Python (cwd)" Ctrl="yes" Alt="no" Shift="no" Key="116"> cmd /c cd /d "$(CURRENT_DIRECTORY)" && python "$(FILE_NAME)" & pause </Command> </UserDefinedCommands>Key="116"是虚拟键码,对应 F5。Ctrl="yes"表示需要按住 Ctrl。改这个片段时最容易忽略的就是&的转义:命令里用了&&却没写成&&,整个 xml 就解析不了,程序启动时会把自定义命令整段丢掉,而且不报错,你只会觉得“快捷键怎么没了”。
4.3 NppExec 脚本与输出过滤器
把 NppExec 装好之后,按 F6 打开执行脚本框,下面是日常用得最多的一套:
// 保存 -> 切目录 -> 执行 -> 打印退出码 NPP_SAVE cd "$(CURRENT_DIRECTORY)" python "$(FILE_NAME)" echo ===== exit code: $(EXITCODE) =====NPP_SAVE先落盘,避免跑的是上一次保存的版本,这个动作建议无脑放在第一行。cd切工作目录,让脚本里的相对路径能正确解析。最后一行打印退出码,非 0 就说明脚本异常退出,比靠肉眼看输出判断靠谱。
真正提升效率的是控制台输出过滤器。在插件的控制台过滤器设置里,可以配置高亮规则和跳转规则,把形如“文件路径:行号”的输出识别成可点击链接。Python 的报错栈格式是File "x.py", line 12,默认不会被识别,需要你自己加一条匹配规则。配好之后,报错行双击直接跳到出错位置,改完再按一次 F6,整个循环不用碰鼠标。这个设置不写进 config.xml 的显眼位置,换机器容易丢,配完记得连配置文件一起备份。
5. 踩坑排查:绿色版最容易翻车的五个现场
下面五条都是我在不同机器上真实撞过的,按“现象—原因—解决”写,遇到时可以直接对号入座。
5.1 启动与配置类现场
现象一:改完设置,重开就还原。原因:doLocalConf.xml 缺失或被安全软件隔离,程序退回用户目录写配置,而你以为它写在本地。也可能是整个包放在需要提权的路径下,写入被静默拒绝。 解决:先dir /a确认开关文件在不在,不在就补一个空文件;再看 config.xml 的修改时间有没有更新;最后把整个目录挪到普通用户可写的位置。三步走完基本能定位。
现象二:U 盘拔了再插,程序提示文件被外部修改。原因:编辑期间文件被同步工具或另一个编辑器实例改动过,程序检测到磁盘上的时间戳变了。也可能是上一次非正常退出,backup 目录里留了未保存的快照。 解决:先别急着点“是”,先看 backup 目录里有没有同名快照,确认哪份更新再决定。养成把备份目录固定在包内的习惯,这种情况还有得救;备份在系统临时目录的,基本只能重写。
5.2 文件与编码类现场
现象三:中文注释全变问号。原因:文件本来是 GBK,被按 UTF-8 打开成乱码后直接保存,非法字节被替换成了问号,原始内容不可逆。或者反过来,UTF-8 文件被“转为 ANSI”保存,超出本地代码页的字符全部丢失。 解决:内容已经写坏的只能从版本库或备份恢复,没有后悔药。预防手段是第 3 章那套:状态栏确认编码、乱码状态下禁止保存、批量脚本先扫描后动手。
现象四:json 配置改完,程序启动报解析错误。原因:文件带 UTF-8 BOM,很多解析器不认这个前缀,把 BOM 当成正文的第一个字符,于是第一行就非法。编辑器里看内容完好,肉眼完全看不出差别。 解决:用编码菜单转成“UTF-8 无 BOM”再保存。批量处理就直接跑第 3 章那个脚本,带 BOM 的那批会被标出来。
5.3 插件与性能类现场
现象五:插件装了没反应,菜单里也看不到。原因:三种可能——dll 架构与主程序不匹配;dll 直接扔在 plugins 根目录而不是同名子目录;插件依赖的运行库缺失。 解决:先确认主程序位数,再确认目录层级,最后看插件目录里有没有附带依赖库。前两个占九成以上,第三个在离线机器上才会遇到。判断顺序按这个来,别一上来就怀疑包坏了。
顺带说一个性能坑:打开几百 MB 的日志会卡到假死。原因不是程序有问题,是语法高亮和自动完成在逐行解析。临时处置是关掉语法高亮、关掉自动完成、关掉文档结构图,观感会差一些但能用。真要处理超大文件,别硬扛,用流式命令先筛出需要的行,再用编辑器精修。
6. 正则替换与列编辑的进阶手艺:从 10 万行日志里抠数据
绿色版用熟了之后,真正拉开效率差距的是两件事:正则替换和列编辑。它们不需要装任何插件,但参数细节多,用错一次就得重来。
正则这块,查找框里勾上正则表达式之后,用的是 Perl 兼容语法。几个高频要点:.默认不匹配换行,要跨行必须勾“匹配新行”;跨行换行符统一写\R,比\n稳;替换串里用\1或$1都行,但同一个表达式里别混用;非贪婪是.*?,不加问号会一口气吃到行尾。
| 场景 | 查找 | 替换 | 说明 |
|---|---|---|---|
| key=value 转 CSV | ^(\w+)=(.*)$ | \1,\2 | 需勾正则,^$按行锚定 |
| 清理行尾空白 | [ \t]+$ | 留空 | 制表符要写\t不能直接敲 |
| 抠出 IPv4 | \b(?:\d{1,3}\.){3}\d{1,3}\b | 留空(先标记) | 用“查找全部”先看命中数 |
| 合并断行日志 | \R(?=[a-z]) | 留空 | 只合并下一行以小写开头的 |
| 去 BOM 残留 | ^\xEF\xBB\xBF | 留空 | 单个文件应急用 |
列编辑的入口比想象中多:按住 Alt 拖鼠标是块选择,Alt+Shift+方向键是键盘块选择,Alt+C 弹出列编辑对话框可以插入递增数字。三者在给几十行配置批量加前缀、对齐注释、生成序列号时特别顺手。我用得最多的是 Alt 拖选之后直接输入——一次输入,所有行同步生效,比写脚本快。
验证习惯上,我有一条雷打不动的规矩:任何一次“全部替换”之前,先点“查找全部”,看命中条数是不是符合预期。数字对不上就说明正则写宽了或者写窄了,这时候按 Esc 退出还来得及。有一次我漏了这一步,一条本该只匹配配置项的正则把日志里的同类字符串一起改了,好在备份目录里有快照,才没在客户现场丢人。从那以后我每次批量替换都强制走一遍“先数命中、再替换、替换后立刻 diff 一遍备份”的流程,多花十几秒,换的是不用通宵找回滚。这套绿色包加上第 3 章的体检脚本、第 4 章的命令配置,解压就能用,拿去照着改改参数就能跑起来。希望帮到你。
本文还有配套的精品资源,点击获取