【发布时间】:2020-02-22 08:20:32
【问题描述】:
所以似乎 ctrl-space 被 Windows 终端错误地转换为 ctrl-@ ,我想知道是否有任何解决方法?我已经为其他终端看到了类似问题的答案,但它们似乎不起作用。
【问题讨论】:
标签: vim windows-terminal
所以似乎 ctrl-space 被 Windows 终端错误地转换为 ctrl-@ ,我想知道是否有任何解决方法?我已经为其他终端看到了类似问题的答案,但它们似乎不起作用。
【问题讨论】:
标签: vim windows-terminal
Autohotkey 是 Windows 中 vim 的好公司。它可以将 ctrl-space 映射到任何其他键,并通过运行脚本将它们发送到 vim。
https://www.autohotkey.com/docs/Hotkeys.htm#Intro
AHKscript 类似(未测试)
^Space::
send {Ctrl}g
return
然后在vimrc中
nnoremap <c-g> ...
【讨论】:
这基本上是大多数 Unix 终端工作方式的限制。控制键映射到有限的字符集,因此 Ctrl-@、Ctrl-Space 和 Ctrl-` 都映射到相同的东西并以相同的方式工作。这发生在终端仿真器和在真实 Linux 系统上运行的 VT 中。
其他终端模拟器可能对此有一个选项,但 Windows 终端尝试模拟 xterm-256color 终端类型,它实现了您注意到的行为。即使其他终端仿真器确实支持它,但这并不意味着在其中运行的程序支持它;他们可能会收到这样的序列并且不知道如何处理它,特别是如果 TERM 设置为不支持区分的终端类型。
根据Windows Terminal issue tracker,他们意识到了这一点,并且他们有可能在将来使用某些特定于 xterm 的序列传递这些密钥,但目前这不起作用。我不确定即使他们确实实现了它,它是否会在 Vim 中按预期工作,尽管它有可能。
如果您不使用现有功能,您可以重新映射 Ctrl-@,或者只使用另一个键。
【讨论】: