从经典 MacOS 时代开始我就一直是 Mac 用户,最近切换到 Debian / Gnome。我知道这将涉及到适应新用户界面的重大调整,这很好。尽管我有 20 多年的肌肉记忆,但我还是很难习惯一件事,那就是键盘快捷键。
Mac 上的键具有 Linux 上的和键Cmd的功能。此外,许多键盘快捷键是在系统级别实现的,并且适用于所有应用程序。一些例子:CtrlSuper
Linux | 苹果 | |
---|---|---|
循环应用程序 | 超级选项卡 | Cmd-Tab键 |
切换键盘语言布局 | 超级SPC | Cmd-Spc |
关闭窗口 | Ctrl-w | Cmd-w |
退出应用程序 | ??? | Cmd-q |
复制/剪切/粘贴 | Ctrl-c/x/v | Cmd-c/x/v |
新文档/胜利 | Ctrl-n | Cmd-n |
首选项/设置 | ??? | Cmd-, |
跳字 | Ctrl-le/ri | 选择勒/里 |
行开始/结束 | ??? | Cmd-le/ri |
带有 ??? 的行很有趣。要在 Linux 上退出应用程序,有时是Ctrl- q,有时是Alt- F4。应用程序首选项/设置无处不在。 Libre Office 使用Alt- F12.进化使用Shift- Ctrl- s。其他应用程序根本没有设置快捷方式。要跳转到行的开头或结尾,您可以在单行文本字段上使用Home/ ,但我还没有找到在多行文本编辑器中执行此操作的方法。End
所以我有两个问题:
从概念上讲,这些快捷方式在 Linux 上是如何工作的?是否每个应用程序都单独实现它们,并且复制/粘贴之类的事情恰好在每个应用程序中实现相同的(Ctrl- c/ v)?首选项的不同键似乎是这么说的。但 Gnome 在“设置”中确实有一个键盘快捷键部分。那么是否还有一种系统级方法来定义快捷方式并将其“强制”到应用程序上?
有没有办法重新映射按键以创建统一的系统范围行为,就像在 Mac 上一样,并且也匹配 AppleCmd按键位置?
它必须涉及将Super和Ctrl键映射Alt为某些组合的修饰符,请参见上表,即按物理Alt键加号的Tab作用类似于Super-Tab循环浏览应用程序,而Alt加号键的w作用类似于Ctrl-w关闭窗口。
再次,我使用的是 Gnome,我了解到它可以与 Wayland 一起使用(还不确定它到底是什么,但它使几个解决方案不起作用)。我见过类似的解决方案输入重映射器,但它只允许重新映射一个源键和目标键。我可以切换Alt和Super或Alt和Ctrl但不能将两者结合起来。我还读过有关 xmodmap 的内容,但它显然不适用于 Wayland 之一。近东看起来很有前途,但也不适用于 Wayland。我还看到提到过 xset 和 xev,但我不确定它们在这种情况下是否有效以及如何使用它们。
答案1
您询问的是两种不同类型的快捷方式,它们在不同的地方实现。
像在应用程序或窗口之间切换之类的事情是由一个中央组件处理的 -窗口管理器– 几乎在所有操作系统中。由于窗口管理器最终决定所有窗口的位置和堆叠顺序,因此也实现了 Alt-Tab(在窗口之间切换)或 Alt-F4(关闭窗口)等快捷键,从而允许它们进行全局配置。
(至少这两个特定的快捷方式与 Windows 和旧的 IBM CUA 标准共享。)
另一方面,复制/粘贴或文本光标移动之类的事情必须由应用程序实现,因为只有应用程序知道它正在处理什么类型的数据以及当前选择的数据。然而,最常见的是,应用程序是使用现有的用户界面工具包例如 GTK 或 Qt,它们负责为其标准小部件实现复制/粘贴。这类似于 macOS 中的 AppKit 或 UIKit。
在这些工具包中,Qt 有商榷与全局 KDE 设置集成,能够从全局配置加载各种工具包级别的键绑定(理论上允许您更改例如复制/粘贴键),但其他工具包通常不会这样做。例如,GTK 应用程序不会使用全局 GNOME 设置,它也不会关心 KDE 的设置。
(除了传统的问题之外,值得一提的问题是跨平台尝试适应多种操作系统并取得不同程度成功的工具包 - 例如 Electron,“Web 浏览器假装它是一个应用程序”工具包,例如 VSCode 在 Linux 上使用和苹果系统。同样,LibreOffice 在多个操作系统上运行,并使用其“VCL”工具包,该工具包可以伪装成 GTK 或 Qt 或 Windows UI。 Firefox 和 Chrome 等 Web 浏览器也使用自己的 UI 工具包,它们只是在适应每个操作系统方面付出了更多努力。)
“首选项”或“设置”的概念也是特定于应用程序的 - 每个应用程序都有自己的方式来存储设置和自己的对话框;它不是操作系统提供的东西。区别在于,macOS 对标准 HIG 指南(例如 Ctrl- 和“首选项”术语)有更强的推动力,因此开发人员更有可能就同一组快捷键达成一致。 (GNOME 在这方面一直在慢慢改进,采用了某种受 macOS 启发的风格;我现在不太熟悉 KDE 是什么样的。)
...当然 macOS 有一桌面环境具有一套指导方针,而在 Linux 中,您至少有两个主要环境(GNOME 和 KDE),有时它们的理念是相互冲突的。在 GNOME 环境中运行像 Kate(KDE 主要编辑器)这样的东西,反之亦然,总会感觉有点格格不入。更不用说 VSCode 等各种基于 Electron 的应用程序了。
要在 Linux 上退出应用程序,有时是 Ctrl-q,有时是 Alt-F4
Alt-F4 被实现为窗口管理器快捷方式(大多数 WM 按照惯例使用它),因此它可以全局配置,并且可以在任何窗口上操作,无论应用程序是什么。然而,它不是“退出应用程序”快捷方式,它实际上只是关闭单个窗口。
另一方面,Ctrl-Q 是特定于应用程序的快捷方式。
要跳转到行的开头或结尾,您可以在单行文本字段上使用 Home / End ,但我还没有找到在多行文本编辑器中执行此操作的方法。
虽然每个工具包(尤其是应用程序中的自定义小部件)可能有不同的快捷方式,但我还没有见过不支持 Home/End 的工具包 - 它几乎是通用的。跳转到开头第一的行,或到最后一行的末尾,快捷键是 Ctrl-Home/End(就像在 Windows 中一样)。