keyboard - 修改后的Colemak用于编程

标签 keyboard keyboard-layout colemak

是否存在专门为编程设计的修改后的Colemak键盘布局?

几天前,我在Colemak键盘布局上变冷了,我真的很喜欢普通打字,但是对于频繁编程的字符(如;),我有一些问题。 (分号)键。具有大括号和括号的直接映射的修改后的布局会很好。

显然,我可以通过反复试验自己重新映射这些键,但是我希望有人进行了一些测试,以确定通用语言字符的最佳布局。

最佳答案

背景

这是我做一个半小时的键盘布局历史和理论介绍:https://www.youtube.com/watch?v=i1hK1qrdYtU

我对此非常重视,并一直在不断尝试。我痴迷于高效的工作,并且表现出令人信服的成果,例如,我保证这是非常值得努力的。

在我的回答中,我将在理论上做更多的工作,因为我的布局主要是针对我的特定编程需求量身定制的,并且不适合说Python开发人员,除非他调整了双字母和1级字符。

使用理论,并根据您的需求进行调整。

术语:


Altgr:通常启用了正确的alt键,可以编写外来字符或重音符号。
级别1:没有修饰键(ShiftAltgr)的布局。
级别2:具有Shift的布局
级别3:具有Altgr的布局
级别4:具有Shift + Altgr的布局




Beta键盘-Vim程序员的Colemak v3

这是我过去一年使用的面向右的布局:
enter image description here

请记住,此布局针对以下方面进行了优化:


vi(请注意方向键在右侧的位置,就像vi一样)
C语言
APL(是,APL)
XML(第二考虑)
重击(set -o vi


它涵盖了有关键盘布局的三种主要的基本理论:


应该将方向键Up Down Left Right Home End PgUp PgDn委派给第3级,以达到自然手指放置的目的。
两个Alt键都应变成Altgr,以便您可以用任何一只手访问Level 3。
数字应从第一行取下,并组织成键盘。通用计算器符号应围绕它。


还应该说,程序员的布局原则上是将数字键移出1级,因为一个好的程序员根本不应该经常使用Numbers。参见:https://en.wikipedia.org/wiki/Magic_number_%28programming%29



以下是这些理论在使用一年后的效果:

理论1-方向键

全面改进工作流程,尤其是文档编辑(与vi已经提供该功能的编程相反)


HomeEnd键放在适当的范围内时非常有用。
方向键是必不可少的。
PgUpPgDn的使用率不足,但这可能是由于倾斜的交错键盘位置使您不得不为Prior拉伸。当前测试此方法的方式相反(在此答案的底部。)


理论2-AltGr

这是一个必要的要求,因为我们有两个Shift键,两个altgr键分别位于空格键的左和右,这是徒劳的。仅与一个人一起工作会使打字过程很痛苦。

尽管有必要,但必须提及的是,拇指如此频繁地向下按压可能会产生一些非常轻微的疼痛。付出很小的代价。如果可以得到缩小的空格键布局,例如:enter image description here

这可能会解决问题。

对于大多数用户而言,另一个问题将是巨大的,它缺少一个alt键。但是,在Ubuntu上,您可以使用HUD访问大多数菜单命令,从而无需90%的使用Alt的键盘快捷键。我偶尔遇到的唯一问题是无法访问TTY终端。 (Alt + Ctrl + F1)我从来没有打扰过重新映射它,尽管我应该这样做。

理论3-数字键盘

enter image description here

这是一个艰难的过程,即由于它的左方向。在以前的版本中,我尝试将键盘向上移动一个级别,以使0和1出现在主行上,并且数字顺序相反(请注意它的显示方向是3210而不是0123)。

最终我变得更喜欢它,但是调整非常艰巨,因为:


键盘的肌肉记忆最常使用右手。
水平交错的键盘布局(这是非常愚蠢的。请参阅我的youtube视频),尽管我做出了最好的折衷,但还是具有挑战性的数字键盘。
数字的倒序,这是必需的,因为您希望食指可以访问0和1(最常见)。


在一天结束时(以及经过数月的调整),我确实喜欢它,尽管我觉得它只有40%的可能。不过,更重要的是,我发现了一些东西:


实际上,在第3层上键入+容易,然后在第1层上的角落甚至在第一行上将其关闭。
.b上非常有用


考虑到所有这些因素,我决定通过将数字键盘切换到右侧,将方向键切换到左侧来进行实验。在这种情况下,我将介绍许多未提及的小改进,以及我的主要新理论。

Beta WADS-键盘编程器Colemak v1

enter image description here

优化:


C语言(); // << "" \n \t m_
重击/ "" < * && || \ \( \) ^C
文档编辑? ! Shift_R Control_R


保持理论:


反向括号:最好将()的方向更改为)(。这是Colemak基本理论的一部分,该理论指出,将手指从小指滚动到拇指更容易。 (Colemak是一种布局,它强调手指滚动而不是手部更改,Dvorak优先考虑)。对于这种极为常见的C ++三元组();尤其有用,尽管看起来倒是很容易,但是习惯起来却令人惊讶。
2级基本未触及:这只是为了进行实际调整。它不是非常重要的层,因此可以保留它以保持肌肉记忆。
在shift和z之间进行控制:最佳mod。复制,粘贴,全选和撤消不再痛苦且笨拙,现在只需简单的指尖操作即可。
返回第3级右边的小指:在vim中,o创建新行。在此键上放置Return进行文本编辑具有实际意义。事实证明它非常方便,并且很快就变成了肌肉记忆。
双引号中指:在第2层使用双引号是犯罪分子。我很满意将它放在最容易触及的第一行键4上。
?在第1级:老兄,我喜欢这个。不必手动组合键就可以编写文档。


新理论


小指不要触摸空格键行,甚至不要触摸Shift键:将控制键上移一个级别的好处使我完全相信了这一点。 (请注意,我有一个法式布局,将左移变成两个按钮。)毕竟,这就是开发可怕的emacs小指的原因。这样,将移位键放置在主行上。虽然我很想将Capslock转换为Shift键,然后将Backspace移至Alt+D,但我将坚持使用o的Shift键。以我的短暂经验,我已经爱上了它,并且不会错过任何我以前在这里拥有的东西。
永远不要在级别2上结束语句,段落或句子:由于我在级别1上使用?取得了巨大的成功,所以我决定也将!放在那儿,尽管位于最远的角落。我将其移到最远的角落,因为它并不常见,并且¬~都代表false / not语句。 != ~Deconstructors (P & ¬Q)。但是,主要的重点是您应该能够完成陈述,段落,句子等,而不必执行键组合,因为这会干扰流程。
利用WADS的肌肉记忆力:vi用右手指示方向时,玩过视频游戏的任何人都习惯于用左手进行运动,因此应该遵循的做法是,用左手进行运动是完全可行的。将重新映射Vim,以使其与此保持一致,这将需要一些调整。
键盘只能位于右手:如前所述,这在视觉上更有意义,将0和1保留在食指上,并利用了通过键盘开发的肌肉记忆。
逃离3级a:我们将看看它是如何发展的。我曾在波浪号上尝试过,但通常忘了它在那儿。作为vim用户,我确实需要Escape,但是通常我会通过映射inoremap来缓解这种需求,以便在按下3级方向键时可以逃逸(并移动光标)。
级别3 CV应该填充一个非常常见的非字母数字二元组:目前,我使用*/填充它,因为这对于注释很重要,但是它可以填充许多不同的内容。
1级及以上,处于其换档位置:换档时尝试按下的最令人沮丧的角色。 ^也是一样,我会在正则表达式中使用一些位。如果完全依靠这些,则需要为它们找到一个更好的地方。
将尝试在级别3 ZX上插入和删除。


其他一切基本上都只是装饰。同样,您可以根据用例来移动它们。 python开发人员可能希望将:置于第一级,并将其与Return组合在一起。

理论失败


Shift + Backspace应该执行Delete:太混乱了,从没有用。
78 /* bigram:这实际上并没有那么糟糕,但是考虑到bigram是双向的,它并不是非常有用。它也需要很大的拉伸。我认为最好每只手都有字符,这样比较容易将两种方式组合在一起。
Tilde Escape:利用不足。如果您无论如何都要伸展那么远,不妨按我经常这样做的逃逸键。
Enter旁边第1级右手边的{ },不可逆转:这是一个可怕的坦白痛苦的二元论,如果您需要{},执行起来会很尴尬。单个无关字符(例如,您不会连续推送的两个字符)的更好位置




建立自己的自定义布局

https://docs.google.com/spreadsheets/d/1LkvWvwjahVaJyaN9hmDdulrAN08x7gQEM6DT4NFkok4/edit#gid=507511935

我已经创建了此电子表格,该电子表格将生成适当的xkb代码以插入到布局中。只是:


更改Layout Definition Page上的字符
这会将字符转换为unicode,并将其串联为xkb代码。
转到XKB页面,选择行,然后将其插入到布局中。
正确地添加新的布局。


现在,创建合适的布局实际上非常困难,因此我只需替换colemak定义中已经存在的内容(首先备份,如果您输入有误,就根本无法键入,甚至可能需要实时启动才能解决问题。)

它看起来像这样:

sudo vim /usr/share/X11/xkb/symbols/us

// Colemak symbols for xkb on X.Org Server 7.x
// 2006-01-01 Shai Coleman, http://colemak.com/
// Akiva Abraham WADS-Keypad Programmer's Colemak

partial alphanumeric_keys
xkb_symbols "colemak" {

include "us"
name[Group1]= "English (Colemak)";

key <CAPS> { [    BackSpace,    BackSpace,       BackSpace,        BackSpace ] };
key <LSGT> { [Control_R, Control_R, Control_R, Control_R] };
key <SPCE> { [        space,        space,           space,     nobreakspace ] };

key <TLDE> { [U0021, U007E, U00AC, U00A4] };
key <AE01> { [U005B, U0021, U005B, U20AC] };
key <AE02> { [U005D, U0040, U005D, U00A2] };
key <AE03> { [U002F, U0023, U002F, U00A3] };
key <AE04> { [U0022, U0024, U0022, U00A5] };
key <AE05> { [U003C, U0025, U003C, U003C] };
key <AE06> { [U003E, U005E, U003E, U003E] };
key <AE07> { [U0026, U0026, U0026, U2030] };
key <AE08> { [U002A, U002A, U002A, U00BC] };
key <AE09> { [U0029, U007D, U0029, U00BD] };
key <AE10> { [U0028, U007B, U0028, U00BE] };
key <AE11> { [U005F, U005F, U002D, U2308] };
key <AE12> { [U003D, U002B, U003D, U230A] };

key <AD01> { [U0071, U0051, minus, U00A9] };
key <AD02> { [U0077, U0057, Home, U00AE] };
key <AD03> { [U0066, U0046, Up, U2191] };
key <AD04> { [U0070, U0050, End, U00B6] };
key <AD05> { [U0067, U0047, Prior, U2371] };
key <AD06> { [U006A, U004A, U0023, U2372] };
key <AD07> { [U006C, U004C, U0037, U00B0] };
key <AD08> { [U0075, U0055, U0038, U22A4] };
key <AD09> { [U0079, U0059, U0039, U00A7] };
key <AD10> { [U003B, U003A, U2234, U2234] };
key <AD11> { [U005C, U005C, minus, U0025] };
key <AD12> { [U007C, U00A6, U007C, U2262] };
key <BKSL> { [U0027, U0060, U0060, U2260] };

key <AC01> { [U0061, U0041, Escape, U2122] };
key <AC02> { [U0072, U0052, Left, U2190] };
key <AC03> { [U0073, U0053, Down, U2193] };
key <AC04> { [U0074, U0054, Right, U2192] };
key <AC05> { [U0064, U0044, Next, U2228] };
key <AC06> { [U0068, U0048, U0024, U2227] };
key <AC07> { [U006E, U004E, U0034, U22A3] };
key <AC08> { [U0065, U0045, U0035, U22A5] };
key <AC09> { [U0069, U0049, U0036, U22A2] };
key <AC10> { [U006F, U004F, Return, U2235] };
key <AC11> { [Shift_R, Shift_R, Shift_R, Shift_R] };

key <AB01> { [U007A, U005A, Insert, U2229] };
key <AB02> { [U0078, U0058, KP_Delete, U222A] };
key <AB03> { [U0063, U0043, U002A, U2282] };
key <AB04> { [U0076, U0056, U002F, U2283] };
key <AB05> { [U0062, U0042, U002E, U2022] };
key <AB06> { [U006B, U004B, U0030, U00BA] };
key <AB07> { [U006D, U004D, U0031, U00B9] };
key <AB08> { [U002C, U003C, U0032, U00B2] };
key <AB09> { [U002E, U003E, U0033, U00B3] };
key <AB10> { [U003F, U003F, U002F, U2020] };

include "level3(ralt_switch)"
include "level3(lalt_switch)"
};

关于keyboard - 修改后的Colemak用于编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14981498/

相关文章:

linux - 如何枚举 X.org 中所有可用的键盘布局?

vim - 在 VIM 正常模式状态行中显示按下的按键

android - 横向显示 SoftKeyboard 但不是整个屏幕

linux - Mac OS 商店键盘布局的位置在哪里?

iPhone键盘透明度

android - 如何听软键盘中的按键?

windows-7 - VMware Fusion 和 Macbook Pro 键盘

c# - 更改其他进程的键盘布局