我在带有 Ubuntu 的 WSL2 上使用 bash,我希望 Crtl-i 和 TAB 发送不同的键码,这样我就可以在 emacs 上重新映射 Ctrl-i,同时仍然使用 TAB 进行缩进。我尝试按照this question.Xresources
中的答案进行操作,该答案建议通过编辑文件然后运行来重新映射Ctrl-i xrdb ~/.Xresources
。我的.Xresources
文件中有这个
XTerm*metaSendsEscape: true
XTerm*eightBitInput: false
Xterm*Translations: #override\
Ctrl ~Meta ~Shift <Key>i :string("\033[105;5u")
除了打电话xrdb .Xresources
给我这个信息
xrdb: Connection refused
xrdb: Can't open display 'localhost:0.0'
这似乎是因为 WSL 是一个纯文本编辑器,而我对文件的更改没有产生效果。我echo $TERM
在 bash 上运行以确保它正在使用 xterm 并且它返回了xterm-256color
,所以这似乎是正确的。
有没有办法让 WSL 使用.Xresources
或任何其他方式来区分 WSL 中的 Ctrl-i 和 TAB?
你有一些很好的研究,加上对 WSL 中终端情况的一些误解。
您链接到的问题/答案专门
xrdb
为xterm
. 可能会使用许多终端,并且重新映射的方法因每个终端而异。该特定答案甚至为三个不同的终端提供了解决方案:虽然可以在 WSL 下使用那些(见这个答案的结尾),但这些都不是默认的 WSL 终端。WSL 有两种可能的默认终端:
因此,您需要有关您正在使用的终端的说明,而不是真正的 WSL。
据我所知,Windows 控制台主机不包含任何关键的重新映射功能。但是,您可以使用AutoHotkey或(可能)AutoIt之类的东西来拦截Ctrl+i并发送正确的转义序列。在我看来,至少 AutoHotkey 有这个能力,但我没有为此尝试过。
但是,我建议您继续安装 Windows 终端(如果您还没有安装的话)。它在适用于 Windows 10 的 Microsoft Store 中可用(并自动安装在最新的 Windows 11 版本中)。
它确实包括重新映射键的能力,但它有点“隐藏”在配置文件后面。虽然终端现在包含用于编辑某些设置的 GUI,但像这样的高级功能确实需要手动编辑
settings.json
.为此:
在 Windows 终端中,转到下拉菜单并打开设置
在设置的左下角,选择“打开 JSON 文件”选项。
旁注:建议您安装 VSCode,或者至少安装一些可以很好地处理 JSON 的编辑器。VSCode 具有理解 Windows 终端架构的额外优势,因此它会在您键入时自动完成选项。
在列表中添加以下内容
"actions"
:虽然我没有使用 Emacs 对此进行测试,但我确实在 Fish shell 中确认
fish_key_reader
+Ctrl正在i发送指定的控制代码而不是 Tab 字符。在 WSL 中使用 Linux/X 终端
如果您确实想使用其中一个 Linux 终端,则可以使用 WSL。您只需使用支持 WSLg 的 Windows 11(允许您在 WSL2 中运行 Linux GUI 应用程序)或使用我在此超级用户答案中详述的方法之一在 Windows 10 中配置 GUI 支持。有了它,如果您愿意,您可以运行 Xterm 并使用您链接的答案中的说明。