对于用惯了macOS的开发者来说,Windows还是有诸多不便,下面以Win11为例,进行一些舒适化的优化配置

快捷键映射

怎么让Windows 11的键盘快捷键输入尽可能符合macOS的使用习惯?我举个例,比如macOS上复制快捷键是Command + C,Windows上是Ctrl + C,但实际上Ctr l+ C的相对位置或者手势手感和macOS并不一致,反倒是Alt + C才和macOS的Command+ C一致。
有没有某种开源或闭源工具,让Windows的这些组合键转换或模拟成macOS的?

Kinto (最推荐:开箱即用的“复刻级”开源方案)

如果你希望零配置直接获得最完美的 macOS 键盘体验,Kinto 是首选。这是一个专门为了让 Windows 和 Linux 键盘映射完全符合 Mac 习惯而诞生的开源项目。

  • 核心原理: 它的底层使用了 AutoHotkey (AHK),但在其之上做了一套非常完善的逻辑封装。

  • 优势: * 它不仅把物理上的 Alt 键映射成了功能上的 Ctrl(让你按 Alt+C 就能复制)。

    • 完美解决了快捷键冲突。如果你只是简单交换按键,Windows 经典的 Alt+Tab(切换应用)就会失效。Kinto 内部写好了规则,让你依然可以用大拇指+食指(物理上的 Alt+Tab,相当于 Mac 的 Command+Tab)来完美切换多任务。
    • 支持终端(Terminal)环境的特殊判定,行为逻辑与 macOS 高度一致。

Kinto 的 GitHub 仓库地址是:rbreaves/kinto,其官方主页是:kinto.sh

安装过程

管理员身份打开PowerShell,然后执行:

1
2
Set-ExecutionPolicy Bypass -Scope Process -Force
iwr https://raw.githubusercontent.com/rbreaves/kinto/master/install/windows.ps1 -UseBasicParsing | iex

第一行执行后会有红色的警告,这个不是错误,所以不影响,继续执行第二行安装命令即可:

1
2
3
4
5
6
7
Set-ExecutionPolicy : Windows PowerShell 已成功更新你的执行策略,但在更具体的作业域中定义的策略覆盖了该设置。由于发生覆盖,你的外壳程序将保留其当前的有效执行策略 RemoteSigned。请键入“Get-ExecutionPolicy -Lis
t”以查看你的执行策略设置。有关详细信息,请参阅“Get-Help Set-ExecutionPolicy”。
所在位置 行:1 字符: 1
+ Set-ExecutionPolicy Bypass -Scope Process -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
+ FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

安装命令过程中要下载各种组件,所以最好是先保证好Shell的代理是正常科学的。

然后过程中需要让确认的地方,都是直接按Y回车,但是一旦出现选择键盘这一步,要注意了!

1
2
3
4
5
6
7
8
You are detected as running Windows.
1. Apple keyboard standard
2. Windows keyboard standard
3. Chromebook
4. IBM - No Super/Win
5. Uninstall

Please enter your desired keymap (1 - 5) : 2

这里有点误导,第一眼以为是我想要变成什么键盘,当时我就选了1,最后发现Win键映射成Apple的Command键了,这并不是我们想要的,实际上应该选2,是指的当前实际是Windows键盘,然后Alt键才会被映射成Apple的Command键,这才是我们想要的!

窗口快速居中

Windows11上有没有什么方案让窗口快速居中?有强迫症

AutoHotkey (最极客、零后台负担)

AutoHotkey (AHK) 绝对是你的首选。它是一个只有几兆大小的开源脚本引擎,完全不会在后台消耗资源。

你可以编写一个极简脚本,将其绑定为 Win + C(或你喜欢的任何快捷键),瞬间将当前激活的窗口居中。

  1. 下载并安装 AutoHotkey
  2. 在任意位置右键新建一个 .ahk 脚本文件(例如 CenterWindow.ahk),用文本编辑器打开。
  3. 填入以下代码(这段代码会自动计算去除了任务栏后的实际工作区,确保视觉绝对居中):
1
2
3
4
5
6
7
8
9
10
11
#c:: ; 将 Win + C 绑定为触发快捷键,你可以改成 ^!c (Ctrl+Alt+C) 等
WinGet, activeWindow, ID, A
WinGetPos,,, Width, Height, ahk_id %activeWindow%
; 获取当前显示器的工作区域(排除任务栏)
SysGet, WorkArea, MonitorWorkArea
; 计算居中坐标
TargetX := (WorkAreaRight - WorkAreaLeft - Width) / 2
TargetY := (WorkAreaBottom - WorkAreaTop - Height) / 2
; 移动窗口
WinMove, ahk_id %activeWindow%, , TargetX, TargetY
return

双击运行这个脚本。以后只需按下 Win + C,当前窗口就会优雅地飞到屏幕正中央。你可以将这个脚本的快捷方式放入系统的启动文件夹 (shell:startup) 实现开机自启。

注意事项

如果你同时还使用了Kinto,因为它也是基于AHK的,所以键盘映射转换后会有和上述的脚本会受影响,所以需要重新调整,在保证物理按键组合不变的情况下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Requires AutoHotkey v2.0

; 针对 Kinto 环境优化:
; 物理 Win 键被 Kinto 映射为了逻辑 Alt (Option) 键
; 所以这里将触发器改为 !c (Alt + C),以匹配你手指按下的物理 Win + C
!c:: {
; 获取当前活动窗口("A")的坐标和宽高
WinGetPos(&X, &Y, &Width, &Height, "A")

; 获取主显示器的工作区边界(排除了任务栏的实际可用区域)
MonitorGetWorkArea(1, &WorkLeft, &WorkTop, &WorkRight, &WorkBottom)

; 计算绝对居中的 X 和 Y 坐标
TargetX := WorkLeft + (WorkRight - WorkLeft - Width) / 2
TargetY := WorkTop + (WorkBottom - WorkTop - Height) / 2

; 移动当前活动窗口到目标位置,保持原始大小
WinMove(TargetX, TargetY, , , "A")
}

如果还外接了显示器,那么需要判断当前窗口在哪个显示器,否则每次居中都会弹回第一个显示器,优化后的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#Requires AutoHotkey v2.0

; 触发快捷键为逻辑 Alt + C (对应你按下的物理 Win + C,Kinto环境)
!c:: {
; 1. 获取当前活动窗口的句柄(唯一ID),比单纯用 "A" 更稳定
hwnd := WinExist("A")
if !hwnd
return

; 2. 获取当前窗口的坐标和宽高
WinGetPos(&winX, &winY, &winW, &winH, hwnd)

; 3. 计算窗口的中心点坐标
winCenterX := winX + (winW / 2)
winCenterY := winY + (winH / 2)

; 4. 获取当前连接的显示器总数
monitorCount := MonitorGetCount()
targetMonitor := 1 ; 默认回退到主显示器

; 5. 遍历所有显示器,判断窗口中心点落在哪个屏幕上
Loop monitorCount {
; 获取该显示器的物理全局边界
MonitorGet(A_Index, &monLeft, &monTop, &monRight, &monBottom)

; 如果窗口中心点的 X 和 Y 都在这个屏幕的坐标范围内
if (winCenterX >= monLeft && winCenterX <= monRight && winCenterY >= monTop && winCenterY <= monBottom) {
targetMonitor := A_Index ; 锁定目标屏幕编号
break
}
}

; 6. 获取目标屏幕的工作区(排除了该屏幕上的任务栏或Dock栏)
MonitorGetWorkArea(targetMonitor, &workLeft, &workTop, &workRight, &workBottom)

; 7. 计算在该屏幕工作区内的居中坐标
TargetX := workLeft + (workRight - workLeft - winW) / 2
TargetY := workTop + (workBottom - workTop - winH) / 2

; 8. 执行移动操作
WinMove(TargetX, TargetY, , , hwnd)
}

缩小任务栏高度

如何修改Windows 11任务栏的高度,我现在觉得它默认的太厚了,有没有任务优雅的方案可以修改大小?

Windhawk(最推荐:模块化、非破坏性)

Windhawk 被称为“Windows 定制领域的 Xposed 框架”。它是一个开源且高度模块化的工具,通过向系统进程注入代码来实现修改,而不是替换系统文件,因此非常轻量且安全。

  • 如何操作:

    1. 前往 Windhawk 官网(windhawk.net)下载并安装。
    2. 在软件的“探索”模块中,搜索并安装名为 “Taskbar height and icon size” 的模块。
    3. 安装后,进入该模块的“高级选项”或“设置”,你可以精确定义任务栏的高度像素值(例如缩小到 30px 或 40px)以及图标的缩放比例。
  • 优点: 极度优雅,不影响系统其他任何 UI 逻辑,模块随用随开,更新系统不易崩溃。

参数优化

安装后,默认参数如下:

1
2
3
4
5
TaskbarHeight: 52
IconSize: 32
TaskbarButtonWidth: 44
IconSizeSmall: 16
TaskbarButtonWidthSmall: 32

如果要改成Win10那种风格的大小,建议如何修改参数?

方案一:标准 Win10 风格(推荐)

这是最经典的 Windows 10 默认布局,紧凑且清晰。

  • TaskbarHeight (任务栏高度): 40
  • IconSize (主图标大小): 24
  • TaskbarButtonWidth (主图标按钮宽度): 40
  • IconSizeSmall (右下角托盘图标大小): 16 (保持默认即可)
  • TaskbarButtonWidthSmall (托盘按钮宽度): 24 (适当缩小,去除 Win11 过度设计的留白)

方案二:Win10 “小任务栏按钮” 风格

如果你以前在 Win10 中习惯勾选“使用小任务栏按钮”,追求极致的屏幕空间利用率,可以使用这组极限参数:

  • TaskbarHeight: 30
  • IconSize: 16
  • TaskbarButtonWidth: 32
  • IconSizeSmall: 16
  • TaskbarButtonWidthSmall: 2024

额外的注意事项:

  1. DPI 缩放: Windhawk 的这个模块会自动兼容系统的 DPI 缩放设置。因此你只需要输入上述 100% 缩放下的基准像素值 即可,无论你是 1080P 屏幕还是 4K 设置了 150% 缩放,系统都会自动计算出正确的比例。
  2. 生效方式: 修改参数并点击“保存”后,通常资源管理器会自动刷新。如果没有立刻生效,你可以按下 Ctrl + Shift + Esc 打开任务管理器,找到“Windows 资源管理器 (explorer.exe)”并右键点击重启

触控板手感优化

让Windows电脑的触控板尽可能地模仿MacBook的手感,有没有更通用的工具(开源闭源都可以)?

重塑加速度曲线 (开源工具:RawAccel)

Windows 鼠标设置里的“提高指针精确度”是一个非常古老且粗暴的加速算法。而 Mac 的指针加速是动态非线性的(慢速移动时极稳,快速甩动时瞬间跨越屏幕)。

  • 解决方案: 使用 GitHub 开源项目 RawAccel

  • 如何操作:

    1. 首先,在 Windows 原生的“鼠标属性”中,彻底取消勾选“提高指针精确度”。
    2. 下载并安装 RawAccel。它会在驱动内核层拦截指针的原始输入信号(Raw Input)。
    3. 在可视化界面中,你可以使用不同的数学模型(如 Exponential 指数曲线或自定义多项式)来重新绘制触控板的加速度曲线。通过微调参数,你可以精准复刻出类似 macOS 的指哪打哪的阻尼感。

参数优化

要复刻 MacBook 的触控板手感,我们需要理解苹果在底层驱动中加入的“非线性调教”的核心逻辑:

  1. 绝对稳定的低速区(Precision Zone): 当手指极其微小地移动时(比如对齐代码或调整 UI 元素),指针完全不加速,就像吸附在屏幕上一样稳。
  2. 平滑起飞的中速区(Exponential Ramp): 当手指开始正常滑动时,速度呈指数或平滑曲线增长。
  3. 可控的极速上限(Speed Limit): 快速甩动手指跨越屏幕时,速度会有一个软上限,防止指针直接飞到屏幕外面找不到。

在 RawAccel 中,最能完美模拟这套逻辑的是 Natural (自然) 曲线。请按照以下参数进行初调:

核心参数推荐:Natural(自然曲线)

首先,将左侧中间的下拉菜单从 Off 改为 **Natural**。然后填入以下参数:

  • Sens Multiplier (基础灵敏度): 1 (保持不变,这是低速移动时的基础速度)

  • Limit (上限极值): 33.5

    • 含义: 这意味着当你以最快速度甩动手腕时,指针的移动速度最多会被放大到原来的 3 到 3.5 倍。这保证了你可以一划跨越整个屏幕。
  • Decay (衰减率/曲线斜率): 0.050.1

    • 含义: 控制曲线从 1.0 攀升到 3.0 的平滑程度。对于触控板来说,由于 DPI 和采样率不同于游戏鼠标,推荐从 0.08 开始尝试。
  • Offset (偏移量/起飞阈值): 11.5

    • 含义: 这是复刻 Mac 手感的灵魂! 它会在图表最左侧划定一个区域。在这个速度范围内,加速完全不生效(保持 1.0)。这就为你微调光标创造了绝对稳定的“死区”。

我的参数

除了上述Sens Multiplier以外,其他参数都改为了推荐范围的中间值:3.25,0.075,1.25

三指滑动优化

我使用的是最新的ThinkPad笔记本,带Windows11专业版,有触控板。如何让这个触控板尽可能还原MacBook上的体验?特别是可以在三指滑动时实现按住鼠标左键拖动的功能(比如选择文本时)

ThreeFingerDragOnWindows(开源工具)

第一步:释放 Windows 原生的三指手势占用为了防止手势冲突,我们需要先关掉系统自带的三指功能。

  1. 打开 Windows 设置 (Win + I) -> 蓝牙和其他设备 -> 触控板
  2. 展开 “三指手势” 选项。
  3. 将“滑动”操作下拉菜单改为 “无”

第二步:安装开源注入工具

  1. 访问 GitHub 项目主页:搜索 ThreeFingerDragOnWindows(作者:ClementSrd)。
  2. 在 Releases 页面下载最新的安装包(通常是 .exe.msi)。
  3. 安装并运行后,它会静默在系统托盘运行。

第三步:体验与微调现在的逻辑已经完全变成了 Mac 的逻辑:三根手指放上去,移动即为拖拽窗口或框选文本,手指离开即为释放左键。 你可以双击托盘图标打开设置,勾选 “Run at startup” (开机自启),它非常轻量,几乎不占用内存。

参数优化

ThreeFingerDragOnWindows我安装好了,但是感觉三指拖拽起来特别慢,意思就是我手指都划了很长距离了,但是实际上屏幕中的窗口或文本选择只拖动了一点点,要如何优化修改?

大幅提高鼠标基础移速(核心解决办法)

找到中间的 Mouse Speed 滑块。

  • 现状: 默认值是 30
  • 修改建议: 将其大幅拉高,建议先尝试拉到 55 70 之间。你可以一边拖动滑块,一边用三指在屏幕上随便拖拽一个窗口感受一下,直到它三指拖拽的速度与你单指移动指针的速度几乎一致为止。

适当增加加速度曲线

找到 Mouse acceleration 滑块。

  • 现状: 默认值是 10

  • 修改建议: 如果你觉得稍微快速划动时,窗口跟不上你的爆发速度,可以将其提高到 15 **20**。这会增加非线性的速度补偿,让手感更轻盈。

  • ⚠️ 核心冲突警告: 既然我们刚才已经上了 RawAccel 这个全局的底层物理引擎,如果你在这里还保留 Mouse acceleration 的值,就会导致双重加速计算(Double Acceleration) 。这是手感依然“发飘”或“不够线性”的罪魁祸首。

  • 优化建议: 立刻将这里的 Mouse acceleration 降为 **0**。把基础的速度放大(Mouse Speed)交给这款软件(继续保持在 60 左右),而把非线性的加速曲线完全交给更专业的 RawAccel 处理。

降低拖拽触发阈值(解决“启动慢”的错觉)

找到 Start drag mouse move threshold 滑块。

  • 现状: 目前设置为 100(像素)。意思是,当你的三指放上去后,必须先移动 100 个像素的距离,软件才会判定“哦,你是在拖拽”,然后才开始让窗口跟着动。这会让你产生强烈的“前段位移丢失/卡顿”感。
  • 修改建议: 将其降低到 40 60 左右。不要降到 0,否则容易和轻触点击误触,但在 40-60 的区间,拖拽的“跟手感”会立刻变得非常直接。
  • 优化建议: 50 可能依然偏高。ThinkPad 玻璃触控板的信噪比很好,不容易产生坐标漂移。你可以大胆尝试降到 20 **30**。只要你的手指放上去时不会因为轻微的颤抖而意外触发拖拽,这个值越低,响应越“瞬时”。

手指抬起与续接机制 (Drag Lock)

  • Allow releasing fingers and restarting drag… (开启状态)

  • Delay before click release (ms): 500

    • 原理解析: 这相当于在触发虚拟的 ACTION_UP 之前加了一个 postDelayed。当你在触控板上边缘划到底,需要抬起手指重新定位时,系统会为你保持 500 毫秒的“鼠标左键按下”状态。
    • 优化建议: 500ms 对大多数人来说偏长,有时拖拽完想立刻点击别的东西,会觉得“粘手”(左键还没释放)。建议调低到 200 300 毫秒,能让释放动作更干脆。

我的参数

Mouse Speed:70

Mouse acceleration:0(防止和RawAccel冲突)

Start drag mouse move threshold:30

Delay before click release:300

PowerShell命令补全

要在 Windows PowerShell 中实现类似 macOS 下 oh-my-zsh(配合 zsh-autosuggestions 等插件)的“历史命令自动预测”和“方向键搜索历史”功能,最通用且最强大的解决方案是配置 PowerShell 内置的 PSReadLine 模块。

它不需要像 Git 那样单独安装特定工具的补全包,而是基于你的输入历史来实现全局的预测补全,非常适合日常高频使用的命令(如 adbgradlewfastboot 等)。

配置过程

在 PowerShell 中运行以下命令使用记事本打开配置(如果文件不存在,它会提示你创建):

1
2
if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
notepad $PROFILE

添加 PSReadLine 增强配置(将以下配置代码复制并粘贴到打开的记事本文件中,保存并关闭):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 引入 PSReadLine 模块(通常 Win11 已经内置)
Import-Module PSReadLine

# ==========================================
# 1. 开启类似 Fish/Zsh 的灰字历史命令预测
# ==========================================
# 开启预测功能,数据源来自你的历史命令
Set-PSReadLineOption -PredictionSource History
# 设置预测显示风格为内联(InlineView),即在光标后显示灰色提示
Set-PSReadLineOption -PredictionViewStyle InlineView
# 也可以将其设置为 ListView,会在下方弹出一个列表供选择,按 F2 可以在两种视图间切换

# 设置按右方向键接受整条预测建议(类似于 Zsh 的行为)
Set-PSReadLineKeyHandler -Key RightArrow -Function ForwardChar

# ==========================================
# 2. 开启基于前缀的上下方向键历史搜索
# ==========================================
# 输入 "adb inst" 后按向上箭头,只会在历史记录中查找以 "adb inst" 开头的命令
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward

# ==========================================
# 3. 增强的 Tab 键菜单补全
# ==========================================
# 按 Tab 键时,不再是在当前行循环替换,而是在下方列出一个可用的补全菜单
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete

验证效果

关闭并重新打开 PowerShell,现在你可以体验以下操作:

  • 灰字预测(Autosuggestions): 只要你曾经成功执行过 adb install base.apk,下次你刚输入 adb i 时,后面就会自动出现灰色的 nstall base.apk 提示,此时按下 右方向键( 即可直接补全整条命令。
  • 按键搜索: 输入 adb,然后按 向上方向键( ,PowerShell 会在你所有的历史记录中,只循环展示以 adb 开头的命令。
  • 菜单补全: 输入 cd 然后按 TAB 键,会在下方展示当前目录下的所有文件夹供你用方向键选择,而不是强行替换你当前敲击的字符。

错误修复

重新打开PowerShell后,提示如下:

Set-PSReadLineOption : 找不到与参数名称“PredictionSource”匹配的参数。

……

Set-PSReadLineOption : 找不到与参数名称“PredictionViewStyle”匹配的参数。

……

出现这个报错是因为 PowerShell 内置的 PSReadLine 模块版本太低

灰字历史命令预测(-PredictionSource)这个功能是在 PSReadLine 2.2.0 及更高版本中才引入的。而绝大多数 Windows 11 和 Windows 10 默认自带的版本是 2.0 或 2.1,不支持这两个高级参数。

在你的 PowerShell 中,直接运行以下命令来强制安装最新版本(安装到当前用户目录下,不会影响系统默认文件):

1
Install-Module -Name PSReadLine -AllowClobber -Force -SkipPublisherCheck -Scope CurrentUser

(注意:如果系统提示你是否需要安装或更新 NuGet provider 或者信任 PSGallery 仓库,请输入 Y 并回车确认。)

也可以全局安装(影响所有用户):

1
Install-Module -Name PSReadLine -AllowClobber -Force -SkipPublisherCheck -Scope AllUsers

PowerShell设置代理

不搞什么临时变量,对于经常需要开关代理的开发者,直接将代理环境变量写死可能会导致部分内网请求失败。最优雅的做法是在上一节我们刚刚编辑过的 $PROFILE 配置文件中,添加两个快捷命令:一个用于开启代理,一个用于关闭代理。

配置过程

输入 notepad $PROFILE 打开配置文件,追加脚本代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# ==========================================
# Proxy Switch
# ==========================================
$GlobalProxyServer = "http://127.0.0.1:10809"

function proxy {
$env:HTTP_PROXY = $GlobalProxyServer
$env:HTTPS_PROXY = $GlobalProxyServer
$env:ALL_PROXY = $GlobalProxyServer
Write-Host "[ON] Terminal proxy enabled: $GlobalProxyServer" -ForegroundColor Green
}

function unproxy {
Remove-Item Env:\HTTP_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:\HTTPS_PROXY -ErrorAction SilentlyContinue
Remove-Item Env:\ALL_PROXY -ErrorAction SilentlyContinue
Write-Host "[OFF] Terminal proxy disabled" -ForegroundColor Yellow
}

保存后重新打开 PowerShell,输入 proxy 或 unproxy 就可以正常使用了!

注意,代理的端口按自己的科学进行修改,我这里是10809哦!

终端自动复制问题

PowerShell用鼠标选择文本会自动复制,能否取消这个功能?每次不小心划到了文本也给我复制到剪贴板了

原生终端

  1. 打开设置: 点击 PowerShell 窗口顶部标签栏右侧的下拉小箭头 ˅,选择 “设置” (或者直接在窗口中按下快捷键 Ctrl + ,)。
  2. 进入交互菜单: 在弹出的设置页面左侧菜单栏中,找到并点击 “交互” (Interaction)
  3. 关闭功能: 在右侧的设置列表中,找到 “将所选内容自动复制到剪贴板” (Automatically copy selection to clipboard) 选项,将它右侧的开关切换为 “关”
  4. 保存: 点击页面右下角的 “保存” 按钮。

Tabby终端

有时候跨平台的三方终端会覆盖原生终端的设置,所以需要单独修改。

依次进入设置、终端、剪贴板,找到“选中时复制”,关闭即可。

Claude Code CLI

没想到某些CLI也会自带这种鬼设置,优先级会高于终端本身的设置。

启动claude后,输入/config进入配置,找到“Copy on select”,改为false即可。