使反引号只产生反引号

使反引号只产生反引号

我的反引号键 (`) 第一次按下时没有任何反应 - 我必须按两次才能生成 `。如果我忘记了,然后输入 `e,我会得到一个重音符号 e 字符。

对于当前会话,我只能通过运行以下命令暂时修复此问题:

xmodmap -e 'keycode 49 = grave asciitilde'

问题是,我不知道如何使这个更改永久生效。我在 Ask Ubuntu 上找到了很多相关问题,但没有一个能解决这个特定问题。

我正在使用 KDE。

答案1

在系统偏好设置、键盘布局中,有三种英国“变体”:

Layout          Variants
------          --------
English (UK)    Default
English (UK)    English (UK, extended WinKeys)
English (UK)    English (UK, international with dead keys)

我的键盘有 Windows 键,所以我在安装过程中选择了第二种变体,这似乎是合理的。

事实上,“默认”和“扩展 WinKeys”变体之间的差异似乎与 Windows 键完全无关。“扩展 WinKeys”变体实际上对 AltGr 键的行为进行了许多更改,其中大部分都变得更好了,例如,AltGr 移位撇号和脱字符键会将尖音符和脱字符号添加到按下的下一个字母,而不是“默认”变体给出的随机结果。

但是,“扩展 Winkeys”变体还纠正了 AltGr 移位的反引号,并返回了打印在键上的断线,而不是“默认”提供的不正确的实线。这反过来意味着 AltGr 反引号不能用于将重音符添加到下一个字母,这与“扩展 Winkeys”变体一致,因此显然有人决定用该函数替换反引号。

由于任何英国 Linux 用户都会使用 Compose 键功能来输入重音字母,因此没有人知道这些键盘变体之间的区别,这让人们感到困惑。在提到反引号键产生这种意外行为的各种论坛中,每个人都对它发生的原因感到困惑。

这就是这个错误导致的问题。如果我想显示路径上某个位置的 shell 脚本的内容,我可能会输入:

$ cat `which zegrep`

但相反,我得到的是:

$ cat ẁhich zegrep

...反引号和“w”组合成 w-with-grave

这是反引号键与英国“扩展 WinKeys”布局的映射:

$ xmodmap -pke | grep "keycode  49"
keycode  49 = dead_grave notsign grave notsign brokenbar notsign bar bar

如果你将键盘布局更改为英国“默认”,dead_grave 键映射将移至第三个位置,即“mode_shifted”位置(如果你的键盘上定义了 Mode_shift 键,则由该键启用),这更有意义:

$ xmodmap -pke | grep "keycode  49"
keycode  49 = grave notsign dead_grave notsign bar bar brokenbar notsign

我认为我应该报告一个错误,因为显然其他人也遇到了这个问题,但我不确定该推荐什么。也许可以将“UK,扩展 WinKeys”重命名为“UK,通过 AltGr 的死键”,这样人们通常不会选择它,除非他们知道“死键”是什么并且特别想要这种行为。或者将 dead_grave 函数移到反引号键上的 AltGr 移位位置,这将使其与其他死键保持一致。

无论如何,只需转到键盘布局,添加新布局并选择英国默认键盘。

答案2

这称为“死键”。查找键盘布局的变体,其中写着“消除死键”之类的内容,或者不是“死键”的变体。对于 gb 键盘,English (UK)我认为变体称为。您也可以使用命令行进行设置:

setxkbmap -layout gb -variant basic

然而,这不会是永久的。找到基本

如果您找不到这样的布局,您可以(并且很容易)创建自己的布局。

答案3

感谢@dave-farrance 的回答https://askubuntu.com/a/183368/54123

如果您喜欢“扩展 WinKeys”布局(这是唯一允许我输入 AltGr + 元音来产生 áéíóú 的英国布局)

这里有一个稍微高级一点的修复方法。它应该只会改变坟墓键而不会改变其他东西。

xmodmap -pke |grep ' = dead_grave' | sed 's| = dead_grave| = grave|g' > ~/.fix-grave
echo 'xmodmap '$HOME'/.fix-grave' | sudo tee -a /etc/rc.local

/etc/rc.local 的更改应该会在您每次登录时应用。

要立即测试并应用它们,您需要执行xmodmap ~/.fix-grave

相关内容