像在 vim 中一样将 Caps Lock 配置为 AltGr 和箭头

像在 vim 中一样将 Caps Lock 配置为 AltGr 和箭头

1. 如何全局映射Caps LockAltGr

我不需要 CapsLock,而是希望有一个方便使用的 AltGr 键

2. 我想将所有移动键映射到vim类似位置

  • AltGr+ F=Backspace
  • AltGr+ H=LeftArr
  • AltGr+ J=DownArr
  • AltGr+ L=RightArr
  • AltGr+ K=UpArr
  • AltGr+ U=PgUp
  • AltGr+ D=PgDown
  • AltGr+ S=Enter
  • AltGr+ 3=Pos1
  • AltGr+ $=End
  • AltGr+ X=Del

因此我可以轻松浏览我的代码,而无需将手从 10 指位置移开(就像在vim编辑器中一样)

我找到了这个答案:如何将大写锁定键重新映射到退格键?
建议使用

xmodmap -e "keycode [code] = [new key]"

看:http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap

但我不知道如何将其添加到例如 AltGr+J 的组合中

另一个开始是将unity-control-center“键盘”->“快捷方式”->“键入”中的“替代字符键”设置为Caps Lock

更新:
我找到了一些解决方案(见下文),但它们并不适用于所有应用程序,我猜测这是某些应用程序使用的名为“XFree 4”的全局设置。

1. 我该如何设置 XFree 4 的键绑定?

2. 如何使更改升级并保存?

答案1

1. 添加新的XKB部分文件

sudo vi /usr/share/X11/xkb/symbols/altgr_vim

内容如下:

partial keypad_keys
xkb_symbols "altgr-vim" {
  # replace Caps with AltGr
  key <CAPS> { [ ISO_Level3_Shift                ] };
  # Add vim cursor keys to be accessed with AltGr (and some useful keys to AltGr+Shift)
  key <AB02> { [ x, X, Delete, U203A             ] };
  key <AC01> { [ a, A, Escape, apostrophe        ] };
  key <AC02> { [ s, S, KP_Enter, braceleft       ] };
  key <AC03> { [ d, D, Next, braceright          ] };
  key <AC04> { [ f, F, BackSpace, dollar         ] };
  key <AC06> { [ h, H, Left, grave               ] };
  key <AC07> { [ j, J, Down, ampersand           ] };
  key <AC08> { [ k, K, Up, backslash             ] };
  key <AC09> { [ l, L, Right, multiply           ] };
  key <AD07> { [ u, U, Prior, infinity           ] };
  key <AE03> { [ 3, section, Home, threesuperior ] };
  key <AE04> { [ 4, dollar, End, foursuperior    ] };
};

2. 将部分内容包含在你的语言文件中

例如对于德语/usr/share/X11/xkb/symbols/de/de你的语言是哪里)在第一个块内添加以下内容(xkb_symbols "basic"):

include "altgr_vim(altgr-vim)"

笔记:每次发行版更新后都必须重复此部分

3.重新加载窗口会话

按 ALT+F2,输入“r”重新加载 gnome 会话或直接注销并重新登录。现在新的按键组合将可用

4.解决一些问题

  1. 有些应用程序不接受这些设置,例如:sublime可以用 替换atom

  2. 某些应用程序需要额外的设置,例如在yakuake键绑定设置为“XFree 4”时,如果将它们设置为“Linux”或“Solaris”,那么 XKB 设置也会在那里起作用:

尚存问题:

  1. 有些应用仍然不接受这些设置
  2. 升级后,符号文件已更新,您必须重复步骤 2

答案2

好的,我决定将@rubo77的答案改编为易于使用的,可切换选项

installer脚本:

#! /bin/bash
# Automatic sudo-ing followed by setting the option right away,
# so you can just run it as the normal user for convenience.
[[ "$UID" == 0 ]] || {
  sudo "$0"
  setxkbmap -option MyOptions:altgr_vim
  exit
}

# Install actual symbols file (see below).
install -o root -g root -m 644 MyOptions /usr/share/X11/xkb/symbols/

# Patch xkb config to add the symbols file as a config option.
echo -e "MyOptions:altgr_vim\t=\t+MyOptions(altgr_vim)" >> /usr/share/X11/xkb/rules/evdev
echo "MyOptions            My own options" >> /usr/share/X11/xkb/rules/evdev.lst
echo "MyOptions:altgr_vim  Caps Lock as AltGr and Arrows like in vim" >> /usr/share/X11/xkb/rules/evdev.lst
patch /usr/share/X11/xkb/rules/evdev.xml <<EOF
@@ -7687,5 +7687,23 @@
         </configItem>
       </option>
     </group>
+    <group allowMultipleSelection="true">
+      <configItem>
+        <name>MyOptions</name>
+        <description></description>
+      </configItem>
+      <option>
+        <configItem>
+          <name>MyOptions:altgr_vim</name>
+          <description>Caps Lock as AltGr and Arrows like in vim</description>
+        </configItem>
+      </option>
+    </group>
   </optionList>
 </xkbConfigRegistry>
EOF

理想情况下,这应该作为dpkg触发器执行,因此每次更新时都会添加xkb,但我还没有研究过这一点。如果您的发行版支持它,那么在安装之前或安装过程中修补软件包(使用准备好的补丁)也是一个好主意。

MyOptions符号文件:

这与@rubo77 的回答相同,因此向他表示感谢!

# Caps Lock as AltGr and Arrows like in vim
xkb_symbols "altgr_vim" {

  # replace Caps with AltGr
  key <CAPS> { [ ISO_Level3_Shift            ] };

  # Add vim cursor keys to be accessed with AltGr
  key <AB02> { [ x, X, Delete, Delete        ] };
  key <AC02> { [ s, S, KP_Enter, KP_Enter    ] };
  key <AC03> { [ d, D, Next, Next            ] };
  key <AC04> { [ f, F, BackSpace, BackSpace  ] };
  key <AC06> { [ h, H , Left, Left           ] };
  key <AC07> { [ j, J, Down, Down            ] };
  key <AC08> { [ k, K, Up, Up                ] };
  key <AC09> { [ l, L, Right, Right          ] };
  key <AD07> { [ u, U, Prior, Prior          ] };
  key <AE03> { [ 3, section, Home, Home      ] };
  key <AE04> { [ 4, dollar, End, End         ] };

};

将两个文件放入一个目录中,确保安装程序可以使用chmod +x installer执行,运行installer,然后输入您的密码。

现在,您可以启动您最喜欢的键盘设置工具,并欣赏它在键盘布局选项中的列出!

答案3

为了获得AltGr+ hj,或任何其他键kl而无需任何应用程序自动键要执行此操作,您可以自定义键盘布局/usr/share/X11/xkb/符号/。目前我使用德语布局“de”。因此,我首先要:

1- 复制标准布局

cp /usr/share/X11/xkb/symbols/de /usr/share/X11/xkb/symbols/de.bak

2- 使用您喜欢的文本编辑器打开布局(这里是:gedit)

sudo gedit /usr/share/X11/xkb/symbols/de 

你会看到类似这样的内容:

key <AD03>  { [         e,          E,     EuroSign,     EuroSign ] };
key <AD06>  { [         z,          Z,    leftarrow,          yen ] };
key <AD11>  { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
....
....
key <AD12>  { [      plus,   asterisk,   dead_tilde,  macron ]  };
key <AC02>  { [               s,               S,          ssharp,          U017F ] }; 
key <AC06>  { [               h,               H,            Left,             Left ]   }; 
key <AC07>  { [               j,               J,            Down,             Down ]   }; 
key <AC08>  { [               k,               K,              Up,               Up ]   }; 
key <AC09>  { [               l,               L,           Right,            Right ]   }; 
....
....
key <AB10>  { [     minus, underscore,               endash,     emdash ] };
key <LSGT>  { [     less,     greater,                  bar,     NoSymbol   ] };

如您所见,AB、AC、AD、AE 代表行,数字代表其在键盘上的位置(有一些特殊键,例如小/大键,也可以重新映射到其他键..

您不会找到所有键盘,只会找到与键盘布局不同的键盘。德语键盘基于“latin(type4)”,如您在文件开头所见:

include "latin(type4)"

然后你只需要根据你的需求进行更改。它的工作原理如下:

键 { [ key, key+ shift, key+ AltGr, key++ Shift] AltGr };

(也可能添加 5 级或更多的修饰符)

如果您想在不重新启动的情况下检查更改;(将“de”更改为您的布局……这里有一个列出可能的布局

 setxkbmap -layout de

正如预期的那样,箭头的标签就像“左、右、下、上”。这是一个很好的清单可能的值。

这里是我的自定义布局的一个示例。(但目前未使用)

然后,您需要重新映射 Capslock 和 AltGr,或者它是否已经按照您发布的问题起作用了??

如果您还想保留“正常”的德语布局,您可以将其更改为您通常不使用的另一种布局,(或者更改“德语无死键”,您可以在同一个“de”文件中找到它……)

来源:关联对 xbk 和自定义布局的非常全面的解释。
关联对一个有很好答案的类似问题。

答案4

要将 CapsLock 重新映射到 AltGr,请使用

xmodmap -e "keycode 66 = ISO_Level3_Shift"

(来源:https://superuser.com/a/138757/160420

要将箭头键映射到 AltGr + h、j、k 和 l,请使用xmodmap -pke找到正确的设置:

xmodmap -pke|egrep "f F|j J|k K|h H|l L|o O|u U|d D|dollar|BackSpace"

并改变第五为新键添加值,并将其全部添加到 bash 脚本中:

# xrandr needs the desktop to be fully loaded. add a delay, to be able to add it to Startup Applications:
sleep 15
# change BackSpace into AltGr
xmodmap -e "keycode 66 = ISO_Level3_Shift"
# set BackSpace on AltGr + F
xmodmap -e "keycode 41 = f F f F BackSpace BackSpace dstroke ordfeminine f F dstroke ordfeminine"
# create arrow keys at h,j,k,l
xmodmap -e "keycode  43 = h H h H Left Left"
xmodmap -e "keycode  44 = j J j J Down Down"
xmodmap -e "keycode  45 = k K k K Up Up"
xmodmap -e "keycode  46 = l L l L Right Right"
xmodmap -e "keycode  30 = u U u U Prior Prior"
xmodmap -e "keycode  40 = d D d D Next Next"
xmodmap -e "keycode  12 = 3 section 3 numbersign Home Home"
xmodmap -e "keycode  13 = 4 dollar 4 dollar End End"
xmodmap -e "keycode  53 = x X x X Delete Delete"

(来源:https://askubuntu.com/a/466315/34298

把这个脚本放到你的启动应用程序(选择Dash > 启动应用程序 > 添加,并添加命令。)

注意:奇怪的是,在gnome-terminal这里可以正常工作,但在中yakuake对于 AltGr+F 上的 BackSpace 有效,但它会将 AltGr+h、j、k 和 l 设置为 D、B、A 和 C,除非您将键绑定设置为“Linux”而不是“(默认)XFree 4”,而在中sublime-text它根本不起作用

相关内容