niri 窗口管理器快捷键详解:从焦点移动到工作区管理
niri 是一个运行在 Wayland 上的滚动式平铺窗口管理器(scrollable-tiling window manager)。它和 i3、Sway 这类传统平铺窗口管理器最大的不同,是不会把整个桌面限制在固定的网格里:窗口会按列从左到右排列,当前视口只显示其中一部分,切换焦点时桌面会沿着水平方向滚动。
因此,niri 的快捷键也有自己的使用逻辑:
- 焦点决定“现在操作哪个窗口”;
- 移动决定“把窗口或列放到哪里”;
- 工作区决定“在哪一组窗口中工作”;
- 列决定“窗口怎样横向排列”;
- 显示器决定“把当前列送到哪块屏幕”。
本文以 niri 官方示例配置中的默认快捷键为基础,整理一套可以直接查阅的速查表。不同发行版、niri 版本或个人配置可能会有差异,真正生效的键位始终以 ~/.config/niri/config.kdl 为准。
本文中的
Mod默认指 Super 键,也就是键盘上的 Windows 键。在某些键盘上它可能标记为Win、Meta或Command。如果配置中把Mod改成了Alt,则需要按照自己的配置理解下面的组合键。
一、先理解 niri 的几个基本概念
1. 窗口、列与工作区
niri 的布局可以简单地想成下面这样:
工作区 1┌──────────┬──────────┬────────────────┐│ 终端 │ 编辑器 │ 浏览器 ││ │ │ │└──────────┴──────────┴────────────────┘ 列 1 列 2 列 3默认情况下,一个新窗口会进入当前列,或者按照配置加入相邻列。一个列可以只放一个窗口,也可以放多个窗口。多个窗口进入同一列后,可以使用标签页式显示在同一个位置。
工作区则是更高一级的容器。切换工作区时,通常是在切换整组窗口;把一个列移动到另一个工作区,则只会移动当前列,不会影响其他列。
2. “焦点”和“移动”不是一回事
这是最容易混淆的一组快捷键:
Mod+H/J/K/L:只移动焦点,窗口位置不变;Mod+Ctrl+H/J/K/L:移动当前列或窗口,焦点通常仍跟随它;Mod+Shift+H/J/K/L:在显示器之间切换焦点;Mod+Ctrl+Shift+H/J/K/L:把当前列移动到另一块显示器。
可以把修饰键理解成一个层级:
无 Ctrl → 看向哪里加 Ctrl → 把当前内容搬到哪里加 Shift → 针对显示器二、最常用的基础快捷键
| 快捷键 | 动作 | 用途 |
|---|---|---|
Mod+Enter | 启动终端 | 默认通常启动 foot,也可能被发行版或用户改成其他终端 |
Mod+D | 启动应用启动器 | 默认通常启动 fuzzel |
Mod+Shift+Q | 关闭当前窗口 | 比直接点击窗口关闭按钮更适合键盘操作 |
Mod+Shift+/ | 显示快捷键帮助 | 打开 niri 的热键提示层,忘记组合键时最有用 |
Mod+O | 切换 Overview | 查看当前工作区和窗口概览,适合窗口较多时快速定位 |
Mod+Shift+E | 退出 niri | 结束当前 niri 会话,使用前应先确认重要程序已保存 |
Mod+Shift+P | 关闭显示器 | 关闭显示器输出,不等于退出 niri |
最值得优先记住的是 Mod+Enter、Mod+D、Mod+Shift+Q 和 Mod+Shift+/。刚开始使用 niri 时,直接按 Mod+Shift+/ 查看帮助层,比死记所有组合键更有效。
三、窗口焦点移动
niri 默认同时提供方向键和 Vim 风格的 H/J/K/L。方向键适合所有人,H/J/K/L 则更适合双手长期放在主键区的用户。
1. 使用方向键
| 快捷键 | 动作 |
|---|---|
Mod+Left | 聚焦左侧列 |
Mod+Right | 聚焦右侧列 |
Mod+Up | 聚焦当前列上方的窗口 |
Mod+Down | 聚焦当前列下方的窗口 |
2. 使用 H/J/K/L
| 快捷键 | 动作 |
|---|---|
Mod+H | 聚焦左侧列 |
Mod+L | 聚焦右侧列 |
Mod+K | 聚焦当前列上方的窗口 |
Mod+J | 聚焦当前列下方的窗口 |
这里要特别注意:左右方向移动的是列,上下方向移动的是同一列中的窗口。如果当前列只有一个窗口,按 Mod+J 或 Mod+K 可能看不到明显变化,这是因为没有可切换的上下窗口。
3. 聚焦当前工作区的首列和末列
| 快捷键 | 动作 |
|---|---|
Mod+Home | 聚焦当前工作区的第一列 |
Mod+End | 聚焦当前工作区的最后一列 |
当工作区中已经有很多列时,这两个键比连续按几十次左右方向键方便得多。
四、移动窗口和列
1. 左右移动列
| 快捷键 | 动作 |
|---|---|
Mod+Ctrl+Left | 将当前列向左移动 |
Mod+Ctrl+Right | 将当前列向右移动 |
Mod+Ctrl+H | 将当前列向左移动 |
Mod+Ctrl+L | 将当前列向右移动 |
在 niri 中,左右移动通常以“列”为单位。假设当前列里有编辑器和终端两个窗口,使用上述快捷键时,两个窗口会作为一个整体一起移动。
2. 上下移动当前列中的窗口
| 快捷键 | 动作 |
|---|---|
Mod+Ctrl+Up | 将当前窗口向上移动 |
Mod+Ctrl+Down | 将当前窗口向下移动 |
Mod+Ctrl+K | 将当前窗口向上移动 |
Mod+Ctrl+J | 将当前窗口向下移动 |
这组操作只调整当前列内部的窗口顺序。如果希望把窗口从一列移到另一列,应使用“吸收/弹出”快捷键,或者先将整个列左右移动。
3. 移动到当前工作区的首列和末列
| 快捷键 | 动作 |
|---|---|
Mod+Ctrl+Home | 将当前列移动到工作区最左侧 |
Mod+Ctrl+End | 将当前列移动到工作区最右侧 |
五、工作区快捷键
1. 在相邻工作区之间切换
| 快捷键 | 动作 |
|---|---|
Mod+PageUp | 聚焦上一个工作区 |
Mod+PageDown | 聚焦下一个工作区 |
Mod+I | 聚焦上一个工作区 |
Mod+U | 聚焦下一个工作区 |
在默认配置中,I/U 是 PageUp/PageDown 的主键区替代方案。实际方向取决于工作区的排列方向;记忆时可以把 I 看作向上、U 看作向下。
2. 直接跳转到指定编号的工作区
| 快捷键 | 动作 |
|---|---|
Mod+1 至 Mod+9 | 聚焦第 1 至第 9 个工作区 |
例如:
Mod+1:回到第一个工作区;Mod+3:切换到第三个工作区;Mod+9:切换到第九个工作区。
这组快捷键非常适合把工作区固定成用途:1 号放终端,2 号放编辑器,3 号放浏览器,4 号放聊天软件。工作区是否已经创建、是否包含窗口,会受到配置和当前版本行为影响,但快捷键本身可以直接用于定位编号工作区。
3. 把当前列移动到其他工作区
| 快捷键 | 动作 |
|---|---|
Mod+Ctrl+PageUp | 将当前列移动到上一个工作区 |
Mod+Ctrl+PageDown | 将当前列移动到下一个工作区 |
Mod+Ctrl+I | 将当前列移动到上一个工作区 |
Mod+Ctrl+U | 将当前列移动到下一个工作区 |
Mod+Ctrl+1 至 Mod+Ctrl+9 | 将当前列移动到指定编号工作区 |
这是 niri 日常使用中非常高频的一组操作。比如正在第一个工作区编辑代码,突然发现浏览器应该放到第三个工作区,可以直接按 Mod+Ctrl+3,当前列就会被送到第 3 个工作区。
注意它移动的是当前列,不是整个工作区。如果同一列中有多个窗口,它们会一起移动;如果想移动整个工作区,应使用下面的工作区移动快捷键。
4. 移动整个工作区
| 快捷键 | 动作 |
|---|---|
Mod+Shift+PageUp | 将当前工作区向上移动 |
Mod+Shift+PageDown | 将当前工作区向下移动 |
Mod+Shift+I | 将当前工作区向上移动 |
Mod+Shift+U | 将当前工作区向下移动 |
这组键和 Mod+Ctrl+PageUp/PageDown 的区别很重要:前者搬动整个工作区,后者只搬动当前列。可以用下面的方式快速区分:
Mod+Ctrl+方向 → 搬当前列Mod+Shift+方向 → 搬整个工作区六、列管理:把窗口放进列或从列中取出
1. 将窗口吸收到当前列
| 快捷键 | 动作 |
|---|---|
Mod+Comma | 将窗口吸收到当前列 |
Mod+BracketLeft | 尝试将窗口吸收到左侧列 |
Mod+BracketRight | 尝试将窗口吸收到右侧列 |
“吸收”可以理解为把两个独立列合并。合并后,窗口会在同一列中上下排列,或者根据列的显示模式以标签页形式显示。
2. 将窗口从列中弹出
| 快捷键 | 动作 |
|---|---|
Mod+Period | 将当前窗口从列中弹出 |
Mod+BracketLeft | 根据上下文在当前列和左侧列之间吸收或弹出 |
Mod+BracketRight | 根据上下文在当前列和右侧列之间吸收或弹出 |
如果当前列只有一个窗口,使用 Mod+Period 后通常会得到一个独立列;如果当前列有多个窗口,则会把当前窗口拆出去。
3. 切换标签页式显示
| 快捷键 | 动作 |
|---|---|
Mod+W | 切换当前列的 tabbed 显示 |
当一个列中放了多个窗口时,tabbed 模式可以把它们收纳成类似浏览器标签页的界面。它适合临时把多个关联窗口放在同一个位置,例如把终端、日志和调试面板放在同一列中。
七、调整窗口大小和布局
1. 切换预设列宽
| 快捷键 | 动作 |
|---|---|
Mod+R | 在预设列宽之间切换 |
Mod+Minus | 将当前列宽缩小约 10% |
Mod+Equal | 将当前列宽增大约 10% |
列宽是 niri 体验的核心之一。与传统平铺窗口管理器直接把屏幕切成固定区域不同,niri 允许在滚动布局中保留一个较宽的编辑器列,同时让终端和浏览器保持较窄的宽度。
2. 调整当前窗口高度
| 快捷键 | 动作 |
|---|---|
Mod+Shift+R | 在预设窗口高度之间切换 |
Mod+Shift+Minus | 将当前窗口高度缩小约 10% |
Mod+Shift+Equal | 将当前窗口高度增大约 10% |
Mod+Ctrl+R | 重置当前窗口高度 |
这里的高度调整主要影响当前列中上下排列的窗口。如果上下布局看起来失衡,可以先按 Mod+Ctrl+R 恢复,再使用 Mod+Shift+Minus 或 Mod+Shift+Equal 做细调。
3. 最大化、全屏和居中
| 快捷键 | 动作 | 说明 |
|---|---|---|
Mod+F | 最大化当前列 | 当前列占据可用空间,但仍属于 niri 的布局 |
Mod+Shift+F | 全屏当前窗口 | 更适合视频、演示和游戏等场景 |
Mod+C | 居中当前列 | 把当前列放到视口中央 |
Mod+Ctrl+C | 居中可见列 | 尽量让当前视口中的列整体居中 |
“最大化列”和“全屏窗口”不要混为一谈:前者是布局操作,后者通常会让单个窗口进入全屏状态。退出时再次按对应快捷键即可。
4. 浮动窗口
| 快捷键 | 动作 |
|---|---|
Mod+V | 在平铺和浮动之间切换当前窗口 |
Mod+Shift+V | 在浮动窗口和普通平铺窗口之间切换焦点 |
浮动模式适合计算器、取色器、临时对话框和需要自由拖动的窗口。niri 的设计仍然鼓励主要工作窗口保持平铺,浮动更适合处理例外场景。
八、多显示器快捷键
1. 切换显示器焦点
| 快捷键 | 动作 |
|---|---|
Mod+Shift+Left | 聚焦左侧显示器 |
Mod+Shift+Right | 聚焦右侧显示器 |
Mod+Shift+Up | 聚焦上方显示器 |
Mod+Shift+Down | 聚焦下方显示器 |
Mod+Shift+H/J/K/L | 使用 Vim 风格方向切换显示器 |
2. 把当前列移动到其他显示器
| 快捷键 | 动作 |
|---|---|
Mod+Ctrl+Shift+Left | 将当前列移动到左侧显示器 |
Mod+Ctrl+Shift+Right | 将当前列移动到右侧显示器 |
Mod+Ctrl+Shift+Up | 将当前列移动到上方显示器 |
Mod+Ctrl+Shift+Down | 将当前列移动到下方显示器 |
Mod+Ctrl+Shift+H/J/K/L | 使用 Vim 风格方向移动当前列 |
多显示器场景中建议固定一个习惯:Shift 代表“显示器”,再加 Ctrl 代表“搬运内容”。这样不需要记住每个动作的完整名称,也不容易把“切换到另一块屏幕”和“把窗口送到另一块屏幕”混淆。
九、截图、输入锁定与实用功能
1. 截图
| 快捷键 | 动作 |
|---|---|
Print | 截取当前视图 |
Mod+Shift+S | 截图 |
Ctrl+Print | 截取当前显示器 |
Alt+Print | 截取当前窗口 |
截图文件的位置和命名方式由 niri 配置中的 screenshot-path 决定。例如:
screenshot-path "~/Pictures/Screenshots/Screenshot-%Y-%m-%d %H-%M-%S.png"如果按下截图快捷键没有生成文件,先检查目标目录是否存在,以及配置中的路径是否有写入权限。
2. 暂时禁止快捷键拦截
| 快捷键 | 动作 |
|---|---|
Mod+Escape | 切换键盘快捷键禁止状态 |
部分游戏、远程桌面、虚拟机和图形编辑软件需要自己处理 Mod、方向键或其他组合键。启用快捷键禁止后,niri 会暂时减少对键盘事件的处理,让前台程序获得更完整的输入。使用后再次按下 Mod+Escape 即可恢复。
这项功能和“窗口没有响应快捷键”不是一回事。如果只是某个快捷键配置错误,不要反复切换输入禁止状态,而应先检查 config.kdl。
十、鼠标滚轮快捷键
niri 默认配置还提供了带 Mod 的滚轮操作,用于在不离开鼠标的情况下切换列和工作区。具体键位可能受到鼠标或输入设备配置影响,常见逻辑如下:
| 操作 | 动作 |
|---|---|
Mod+WheelScrollUp/Down | 切换相邻工作区 |
Mod+Ctrl+WheelScrollUp/Down | 将当前列移动到相邻工作区 |
Mod+WheelScrollLeft/Right | 切换相邻列 |
Mod+Ctrl+WheelScrollLeft/Right | 移动当前列 |
如果滚轮方向和自己的直觉相反,可以直接交换配置中的 up/down 或 left/right 动作,不需要改变桌面整体布局。
十一、如何查看和修改自己的快捷键
1. 找到配置文件
niri 的用户配置通常位于:
~/.config/niri/config.kdl如果文件还不存在,可以先创建目录,再把系统提供的示例配置复制到用户目录:
mkdir -p ~/.config/niricp /etc/niri/config.kdl ~/.config/niri/config.kdl不同发行版存放示例配置的位置可能不同,也可能只提供 default-config.kdl。找不到系统文件时,可以从 niri 官方仓库的 resources/default-config.kdl 开始。
2. 一个快捷键配置例子
下面的配置把 Mod+Enter 改成启动 kitty,并增加一个使用 Mod+B 打开浏览器的快捷键:
binds { Mod+Return { spawn "kitty"; } Mod+B { spawn "firefox"; }}spawn 后面的内容不是 niri 的内置动作,而是要执行的程序名。程序不在 PATH 中时,应写绝对路径,或者改用 spawn-sh 执行 shell 命令。
3. 使用命令行触发动作
很多 niri 动作也可以通过 IPC 调用,不必先绑定快捷键。例如:
niri msg action focus-column-rightniri msg action close-windowniri msg action toggle-overview这对脚本、状态栏按钮和自动化工具很有用。可以把同一个动作同时绑定给键盘、鼠标、脚本和桌面环境组件。
4. 修改配置后如何生效
niri 通常会在配置文件发生变化后自动重新加载。修改后可以先观察终端或日志中是否出现配置解析错误,再按 Mod+Shift+/ 检查新的快捷键是否已经显示。
如果配置无法加载,优先检查:
- 大括号是否成对;
- 字符串是否使用英文双引号;
- 动作名称是否拼写正确;
- 快捷键是否被重复定义;
spawn使用的程序是否实际安装并存在于PATH。
十二、最值得优先记住的一组组合键
如果不想一次记住全部快捷键,可以按下面的顺序学习:
第一阶段:生存键
Mod+Enter 打开终端Mod+D 打开应用启动器Mod+Shift+Q 关闭窗口Mod+Shift+/ 查看快捷键帮助第二阶段:导航键
Mod+H/J/K/L 移动焦点Mod+Ctrl+H/J/K/L 移动列或窗口Mod+1 ... Mod+9 切换工作区Mod+Ctrl+1 ... Mod+Ctrl+9 发送当前列到工作区第三阶段:布局键
Mod+Comma 吸收窗口到当前列Mod+Period 从当前列弹出窗口Mod+R 切换预设列宽Mod+F 最大化当前列Mod+V 切换浮动状态Mod+C 居中当前列第四阶段:多显示器键
Mod+Shift+方向 切换显示器焦点Mod+Ctrl+Shift+方向 将当前列移动到另一块显示器十三、常见误区
误区一:把 Mod+Ctrl+数字 当成切换工作区
Mod+数字 是聚焦指定工作区;Mod+Ctrl+数字 是把当前列移动到指定工作区。两者都很常用,但结果完全不同。
误区二:以为左右移动只移动单个窗口
niri 的水平布局以列为核心。当前列中如果有多个窗口,Mod+Ctrl+Left/Right 往往会把整列一起搬动。需要拆出单个窗口时,应先使用 Mod+Period。
误区三:把最大化和全屏当成同一个动作
Mod+F 操作的是列布局,Mod+Shift+F 操作的是单个窗口的全屏状态。前者更适合临时扩大编辑器,后者更适合视频、演示或游戏。
误区四:认为文章中的默认键位一定适合自己的系统
终端、应用启动器、截图工具以及音量控制命令都可能因发行版不同而不同。尤其是 Mod+Enter 和 Mod+D,它们绑定的程序只是默认示例,不代表系统一定安装了 foot 或 fuzzel。
结语
niri 的快捷键看起来很多,但核心规律并不复杂:
- 没有额外修饰键时,主要用于移动焦点;
- 加上
Ctrl后,主要用于移动当前窗口或列; - 加上
Shift后,主要涉及工作区或显示器; 数字键用于快速定位工作区;Comma/Period用于管理列中的窗口;R/F/C/V分别覆盖尺寸、最大化、居中和浮动等布局操作。
掌握这套规律后,即使忘记某个具体动作,也能从快捷键的修饰键推测它大概会做什么。实际使用时建议先保留官方默认配置,连续使用几天后,再根据自己的终端、启动器、工作区和多显示器习惯进行修改。
参考资料
If this article helped you, please share it with others!
Some information may be outdated
