我正在尝试在英语键盘上使用我习惯的一些加拿大法语键盘笔划。我想改变一些键的行为。我能够在 Vim 中实现这些更改,但我希望它们能够应用于整个系统(适用于 Windows 和 Ubuntu)。
以下是我想要实现的功能:
如果我按下[a,打印的字符是
â
。当我按下 时[r,一些本应保持正常的事情,打印的字符是
[r
。如果我按住[3 秒,
[
则会打印。我希望此延迟适用于我修改的所有键。我想要映射<到
'
并将字符'e映射到è
。这复杂问题这里我只想要按键'旁边的按钮;来产生
è
字符,不是当我按下<(重新映射到'
)时e。
我将向您展示一个实现此功能的 .vimrc 文件,现在我希望整个系统都实现这种行为:
set timeout timeoutlen=3000 ttimeoutlen=100
inoremap [a â
inoremap [A Â
inoremap [e ê
inoremap [E Ê
inoremap [i î
inoremap [I Î
inoremap [o ô
inoremap [O Ô
inoremap [u û
inoremap [U Û
inoremap 'a à
inoremap 'A À
inoremap 'e è
inoremap 'E È
inoremap 'u ù
inoremap 'U Ù
inoremap }e ë
inoremap }E Ë
inoremap }i ï
inoremap }I Ï
inoremap }u ü
inoremap }U Ü
inoremap ]c ç
inoremap ]C Ç
inoremap / é
inoremap < '
答案1
自动热键(AHK) 可以做到所有这些,甚至更多,但只适用于 Windows,在 Windows 上我体验过这个出色的宏记录器,它已经发展成为一个完整的编程环境。
对于 Linux,有一个跨平台版本,可以在 .NET 或 MONO 下的 Linux 上运行 AHK:铁矿石,但我没有这方面的经验。
文章在 Linux 上安装 IronAHK可能会有用。
答案2
自动热键harrymc 提到的就是解决方案。
这是解决我特定问题的 AutoHotKey 代码的一部分。可以轻松添加缺失的字母。
StringCaseSense On
; circumflex accents
$[::
Send [
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = a
{
Send {backspace}â
return
}
Send %Char%
return
; grave accents
$'::
Send '
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = a
{
Send {backspace}à
return
}
Send %Char%
return
; trema
+]::
Send {}}
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = e
{
Send {backspace}ë
return
}
Send %Char%
return
; cedilla
$]::
Send ]
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char = c
{
Send {backspace}ç
return
}
Send %Char%
return
; other fixes
$<::
Send '
Input, Char, T2 L1, {delete}{esc}{home}{end}
if Char =
{
Send {backspace}<
return
}
Send %Char%
return
$/::
Send é
Input, Char, T2 L1, {delete}{esc}{home}{end}
if (Char = "")
{
Send {backspace}/
return
}
Send %Char%
return
$?::
Send É
Input, Char, T2 L1, {delete}{esc}{home}{end}
if (Char = "")
{
Send {backspace}?
return
}
Send %Char%
return