Windows Terminal 自定义友好用于claude code

适用版本:Windows Terminal 1.24+ | Windows 10/11 | PowerShell 5.1|claude code使用 / 7+


目录

  1. 为什么定制 WT?
  2. 方案总览
  3. 第一步:默认 Profile 改为 PowerShell
  4. 第二步:给 PowerShell 加管理员提权
  5. 第三步:右键菜单全局注入(4 处)
  6. 第四步:拖拽选中文本自动复制(类 WezTerm)
  7. 第五步:经典复制粘贴快捷键
  8. 完整 settings.json 参考
  9. 一键卸载脚本
  10. 常见问题与排错

定制的cmd

1. 为什么定制 WT?

Windows Terminal(以下简称 WT)是 Windows 上最强大的终端模拟器,但开箱即用的状态有几个痛点:

痛点 默认行为 定制后
默认 shell cmd.exe Windows PowerShell(5.1)
右键菜单 原生 cmd 风格 一键管理员权限打开
复制操作 必须 Ctrl+C 或右键菜单 拖动选中文本即复制(WezTerm 体验)
快捷键 只有 Ctrl+C/V 加 Ctrl+Insert / Shift+Insert

2. 方案总览

本次定制共涉及以下文件:

文件路径 作用
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json WT 主配置
HKCU:\Software\Classes\Directory\Background\shell\OpenInWindowsTerminal 空白处右键
HKCU:\Software\Classes\Directory\shell\OpenInWindowsTerminal 文件夹右键
HKCU:\Software\Classes*\shell\OpenInWindowsTerminal 文件右键
HKCU:\Software\Classes\Drive\shell\OpenInWindowsTerminal 驱动器右键

核心原理:WT 是 UWP 应用,Start-Process -Verb runas wt.exe 会因 AppContainer 沙箱拒绝(0x80070005)。正确做法是在 settings.json 的 profile 内部配置 "elevate": true,让 WT 通过 ShellExecuteExW(..., "runas", "powershell.exe", ...) 从内部启动 PowerShell,这样只弹一次 UAC 且进程关系正确。


3. 第一步:默认 Profile 改为 PowerShell

WT 默认打开的是 cmd(GUID {0caa0dad-35be-5f56-a8ff-afceeeaa6101}),改为 PowerShell 的 GUID:

"defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

PowerShell Profile 的 GUID 固定为 {61c54bbd-c2c6-5271-96e7-009a87ff44bf},对应:

{
    "commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "hidden": false,
    "name": "Windows PowerShell"
}

如果你装的是 PowerShell 7(pwsh.exe),把 commandline 改为对应路径,GUID 不变。


4. 第二步:给 PowerShell 加管理员提权

关键配置:在 PowerShell profile 节点内加入 "elevate": true

{
    "commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
    "elevate": true,
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "hidden": false,
    "name": "Windows PowerShell"
}

生效效果:

  • 直接运行 wt.exe → 弹一次 UAC → PowerShell Tab 以管理员身份启动
  • 右键菜单打开 WT → 弹一次 UAC → PowerShell Tab 以管理员身份启动

为什么不直接 runas wt.exe?
UWP 应用(WT 打包为 MSIX/AppX)存在 AppContainer 沙箱,直接对 wt.exe 做 Start-Process -Verb runas 会返回 ERROR_ACCESS_DENIED (0x80070005)。正确路径是让 WT 自身通过 ShellExecute 的 runas verb 提权其子进程(PowerShell),而非提权 wt.exe 本身。


5. 第三步:右键菜单全局注入(4 处)

注册表文件:wt_context_menu_admin.reg

Windows Registry Editor Version 5.00

; ---- 1) 右键空白区域 ----
[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\OpenInWindowsTerminal]
@="Open in Windows Terminal (Admin)"
"Icon"="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\",0"

[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\OpenInWindowsTerminal\command]
@="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\" -d \"%V\""

; ---- 2) 右键文件夹 ----
[HKEY_CURRENT_USER\Software\Classes\Directory\shell\OpenInWindowsTerminal]
@="Open in Windows Terminal (Admin)"
"Icon"="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\",0"

[HKEY_CURRENT_USER\Software\Classes\Directory\shell\OpenInWindowsTerminal\command]
@="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\" -d \"%1\""

; ---- 3) 右键文件(打开所在文件夹)----
[HKEY_CURRENT_USER\Software\Classes\*\shell\OpenInWindowsTerminal]
@="Open Containing Folder in Terminal (Admin)"
"Icon"="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\",0"

[HKEY_CURRENT_USER\Software\Classes\*\shell\OpenInWindowsTerminal\command]
@="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\" -d \"%1\\..\""

; ---- 4) 右键驱动器 ----
[HKEY_CURRENT_USER\Software\Classes\Drive\shell\OpenInWindowsTerminal]
@="Open in Windows Terminal (Admin)"
"Icon"="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\",0"

[HKEY_CURRENT_USER\Software\Classes\Drive\shell\OpenInWindowsTerminal\command]
@="\"C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe\" -d \"%V\""

参数说明

参数 含义
-d "%V" 在当前目录(虚拟路径)打开,Directory Background / Drive 用此
-d "%1" 完整绝对路径,Directory / Drive 也可
"%1\\.." 文件的父目录,即"打开所在文件夹"

应用方法

regedit.exe /s wt_context_menu_admin.reg
# 刷新资源管理器
Get-Process explorer | Stop-Process -Force; Start-Process explorer.exe

6. 第四步:拖拽选中文本自动复制(类 WezTerm)

WT 内置此功能,只需一行配置:

"copyOnSelect": true,
"copyFormatting": "none"

行为对比:

操作 默认 开启 copyOnSelect 后
鼠标拖动选中文本 文字反色,剪贴板不动 文字进剪贴板
Ctrl+C / Ctrl+Insert 复制选中 同上
右键 / Shift+Insert 粘贴 粘贴 直接得到选中内容

copyFormatting 取值:

效果
"none" 纯文本(推荐,不带 ANSI 色码)
"html" 带 ANSI 颜色转为 HTML
"rtf" 带 ANSI 颜色转为 RTF
"all" 同时复制纯文本 + HTML + RTF

7. 第五步:经典复制粘贴快捷键

在 keybindings 数组中添加:

"keybindings": [
    {
        "id": "Terminal.CopyToClipboard",
        "keys": "ctrl+insert"
    },
    {
        "id": "Terminal.PasteFromClipboard",
        "keys": "shift+insert"
    }
]

完整快捷键对照:

按键 功能
拖动选中 自动复制(copyOnSelect)
Ctrl+C 复制选中
Ctrl+Insert 复制选中(传统键)
Ctrl+V 粘贴
Shift+Insert 粘贴(传统键)
Ctrl+Shift+F 搜索
Alt+Shift+D 复制当前 Pane

8. 完整 settings.json 参考

以下是本次定制涉及的完整 settings.json 关键段落(不含 schemes / 完整 profiles list):

{
    "$help": "https://aka.ms/terminal-documentation",
    "$schema": "https://aka.ms/terminal-profiles-schema",
    "actions": [],
    "copyFormatting": "none",
    "copyOnSelect": true,
    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "keybindings": [
        {
            "id": "Terminal.CopyToClipboard",
            "keys": "ctrl+c"
        },
        {
            "id": "Terminal.FindText",
            "keys": "ctrl+shift+f"
        },
        {
            "id": "Terminal.PasteFromClipboard",
            "keys": "ctrl+v"
        },
        {
            "id": "Terminal.DuplicatePaneAuto",
            "keys": "alt+shift+d"
        },
        {
            "id": "Terminal.CopyToClipboard",
            "keys": "ctrl+insert"
        },
        {
            "id": "Terminal.PasteFromClipboard",
            "keys": "shift+insert"
        }
    ],
    "profiles": {
        "defaults": {
            "colorScheme": "Solarized Light (modified)",
            "font": {
                "face": "Consolas",
                "size": 10
            }
        },
        "list": [
            {
                "commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                "elevate": true,
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "hidden": false,
                "name": "Windows PowerShell"
            }
        ]
    }
}

9. 一键卸载脚本

如果想恢复原始状态,执行以下 wt_uninstall.reg:

Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\OpenInWindowsTerminal]
[-HKEY_CURRENT_USER\Software\Classes\Directory\shell\OpenInWindowsTerminal]
[-HKEY_CURRENT_USER\Software\Classes\*\shell\OpenInWindowsTerminal]
[-HKEY_CURRENT_USER\Software\Classes\Drive\shell\OpenInWindowsTerminal]

然后在 settings.json 中还原:

  • "copyOnSelect": false
  • 删除 "elevate": true
  • "defaultProfile" 改回 cmd 的 GUID
  • 删除 ctrl+insert / shift+insert 两条 keybinding

10. 常见问题与排错

Q1:右键菜单点了没反应

检查注册表是否写入成功:

Get-ItemProperty 'HKCU:\Software\Classes\Directory\Background\shell\OpenInWindowsTerminal\command'

确认 (默认) 值指向 wt.exe -d “%V”。

Q2:0x80070005 ERROR_ACCESS_DENIED

说明尝试用 Start-Process -Verb runas wt.exe 提权了 WT 本身(错误路径)。
正确做法是 settings.json 里加 "elevate": true,不要在外部包装 launcher。

Q3:WT 进程卡死(admin 进程无法 kill)

这是因为 WT 由管理员启动,普通 shell 无权终止。
解决方法(任选一):

  1. 重启电脑(最简单)
  2. 弹一次 UAC,用管理员 PowerShell 执行:
    taskkill /F /IM WindowsTerminal.exe
    
  3. 不想每次都 admin:去掉 "elevate": true,右键菜单改走 launcher

Q4:想保留普通(非管理员)右键菜单

可以额外创建一条 “Open in Windows Terminal”(不带 Admin):

[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\OpenInWindowsTerminalNormal]
@="Open in Windows Terminal"
"Icon"="\"C:\\...\\wt.exe\",0"
[HKEY_CURRENT_USER\Software\Classes\Directory\Background\shell\OpenInWindowsTerminalNormal\command]
@="\"C:\\...\\wt.exe\" -d \"%V\""

Q5:copyOnSelect 和鼠标拖动滚动冲突

在 profiles.defaults 里可以加:

"scrollbarState": "hidden",
"mouseScrollCycling": false

附:全部修改汇总表

序号 修改项 位置
1 默认 Profile settings.json "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"
2 管理员提权 settings.json profile "elevate": true
3 右键空白处 HKCR wt.exe -d "%V"
4 右键文件夹 HKCR wt.exe -d "%1"
5 右键文件 HKCR wt.exe -d "%1\\.."
6 右键驱动器 HKCR wt.exe -d "%V"
7 自动复制 settings.json "copyOnSelect": true
8 纯文本复制 settings.json "copyFormatting": "none"
9 Ctrl+Insert settings.json Terminal.CopyToClipboard
10 Shift+Insert settings.json Terminal.PasteFromClipboard

本文档对应 Windows Terminal 1.24.11321.0,Windows 10/11 通用。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐