4485 words
12 minutes
niri 窗口管理器快捷键详解:从焦点移动到工作区管理
2026-10-10

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/niri
cp /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-right
niri msg action close-window
niri msg action toggle-overview

这对脚本、状态栏按钮和自动化工具很有用。可以把同一个动作同时绑定给键盘、鼠标、脚本和桌面环境组件。

4. 修改配置后如何生效#

niri 通常会在配置文件发生变化后自动重新加载。修改后可以先观察终端或日志中是否出现配置解析错误,再按 Mod+Shift+/ 检查新的快捷键是否已经显示。

如果配置无法加载,优先检查:

  1. 大括号是否成对;
  2. 字符串是否使用英文双引号;
  3. 动作名称是否拼写正确;
  4. 快捷键是否被重复定义;
  5. 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 的快捷键看起来很多,但核心规律并不复杂:

  1. 没有额外修饰键时,主要用于移动焦点;
  2. 加上 Ctrl 后,主要用于移动当前窗口或列;
  3. 加上 Shift 后,主要涉及工作区或显示器;
  4. 数字键 用于快速定位工作区;
  5. Comma/Period 用于管理列中的窗口;
  6. R/F/C/V 分别覆盖尺寸、最大化、居中和浮动等布局操作。

掌握这套规律后,即使忘记某个具体动作,也能从快捷键的修饰键推测它大概会做什么。实际使用时建议先保留官方默认配置,连续使用几天后,再根据自己的终端、启动器、工作区和多显示器习惯进行修改。

参考资料#

Share

If this article helped you, please share it with others!

niri 窗口管理器快捷键详解:从焦点移动到工作区管理
https://blog.gonelove.de/posts/niri窗口管理器快捷键详解/
Author
Gone_Love
Published at
2026-10-10
License
CC BY-NC-SA 4.0

Some information may be outdated

Table of Contents