notepad++ 7.9+ 默认不关联.ps1文件到powershell语法高亮,需手动绑定扩展名或导入powershell.xml;自动识别易误判为batch,应强制指定language→p→powershell;保存须用utf-8(无bom),执行需加-executionpolicy bypass。

PowerShell语法高亮在Notepad++里默认不生效?
不是插件问题,也不是版本太旧,而是Notepad++从7.9开始移除了内置的PowerShell语言定义——它不再把 .ps1 文件自动关联到PowerShell语法高亮。你双击打开一个 test.ps1,看到的只是纯文本或“其他语言”灰色高亮,这就是典型表现。
解决方法很简单:手动绑定文件扩展名到PowerShell语言定义。但注意,这个定义必须存在——老版本(≤7.8)自带,新版本(≥7.9)需要你确认是否已启用或重新导入。
- 打开
Language → Define your language...,检查左侧列表是否有PowerShell;没有就说明被移除了 - 如果有,点击它,再点右下角
Ext.按钮,在弹出框里填入ps1 psd1 psm1(用空格分隔),点确定 - 如果列表里压根没
PowerShell,得手动导入:去 Notepad++ 安装目录下的plugins\NppEditorConfig\langs\(如有)找PowerShell.xml,或从官方 GitHub 仓库下载标准定义文件,再通过Define your language... → Import加载
写PowerShell脚本时总被当成批处理高亮?
这是常见误配:Notepad++有时会把以 @ 开头(比如 Here-String)、含 % 或 & 的行,错误识别为批处理(Batch)语法。结果 Get-Process 变成白色,$env:PATH 没颜色,注释 # 也不绿。
根本原因是语言自动检测逻辑冲突。别依赖“自动识别”,强制指定语言:
- 打开脚本后,点顶部菜单
Language → P → PowerShell(不是Batch,也不是Other) - 或者快捷键
Alt+L弹出语言列表,用方向键选中PowerShell回车 - 更一劳永逸:对已保存的
.ps1文件,右键标签页 →Change Language For This Document → PowerShell
这样即使文件开头有 @' 或 param() 前带空行,也不会再漂移。
中文注释乱码、执行时报错“无法加载文件,因为在此系统中禁止运行脚本”?
这不是Notepad++的问题,但新手常以为是编辑器导致的。实际分两层:
第一层是编码:PowerShell默认按UTF-8无BOM读取脚本。如果你用Notepad++保存为 UTF-8-BOM 或 ANSI(尤其是中文Windows默认ANSI是GBK),就可能触发解析错误或中文注释显示为方块。
- 保存时务必选
Encoding → UTF-8(注意不是UTF-8-BOM) - 检查右下角状态栏是否显示
UTF-8;若显示ANSI,先转码:Encoding → Convert to UTF-8,再保存
第二层是执行策略:Notepad++本身不执行脚本,但你习惯按 F5 配了PowerShell命令后,会调用 powershell.exe -ExecutionPolicy Bypass -File "xxx.ps1"。如果漏了 -ExecutionPolicy Bypass,就会报那个经典错误。
- 配置F5快捷执行:进入
Run → Run... →输入powershell.exe -ExecutionPolicy Bypass -File "$(FULL_CURRENT_PATH)" - 点
Save...命名为Run PS1,以后就能用F5 → Run PS1直接跑
怎么让PowerShell的变量、Cmdlet、参数都分色?
Notepad++的PowerShell语言定义本身支持基础着色(关键字、字符串、注释),但默认不区分 $var、Get-ChildItem 和 -Recurse。想细化,得改语言定义XML——但这容易出错,且升级Notepad++后可能丢失。
更稳妥的做法是接受它的“够用”级别:变量前缀 $ 是蓝色,Cmdlet 名是黑色加粗(靠字体样式区分),参数如 -Path 是深绿色。只要没关掉 Style Configurator 里的对应项,就是正常状态。
- 检查路径:
Settings → Style Configurator → Language: PowerShell - 确保
DEFAULT、COMMENT、KEYWORD、STRING、VARIABLE这几项的前景色/字体勾选没被关掉 -
KEYWORD对应 Cmdlet(如Where-Object),VARIABLE对应$true、$PSVersionTable等内置变量,但普通$myVar不会单独着色——这是设计如此,不是bug
真要深度着色(比如所有 $xxx 都蓝),就得换VS Code或启用第三方Lexer,Notepad++原生不支持动态变量模式匹配。











