一种理想的编程键盘布局

时间:2010-02-21 15:57:07

标签: language-agnostic keyboard-layout dvorak qwerty

我经常听到抱怨为了简洁而大量使用符号的编程语言,最明显的是C和C ++(我不会触及APL),很难打字,因为它们需要经常使用shift键。一两年前,我自己厌倦了,下载了微软的Keyboard Layout Creator,对我的布局进行了一些修改,并且没有一次回头看。速度差异惊人;通过这些简单的更改,我能够以大约30%的速度输入C ++代码,当然这取决于毛茸茸的程度;最重要的是,我在普通正在运行的文本中的打字速度不会受到影响。

我的问题是:编程中存在哪些备用键盘布局已经普及,其中任何一种仍然在现代使用,你个人使用任何改变的布局,我的布局如何进一步优化?

我对标准QWERTY布局进行了以下更改。 (我不使用Dvorak,但有一个programmer Dvorak布局值得一提。)

  • 在顶行交换带符号的数字,因为长文本或重复的文字数通常会被命名的常量替换;
  • 使用代字号交换反引号,因为反引号在很多语言中很少见,但析构函数在C ++中很常见;
  • 使用下划线交换减号,因为下划线在标识符中很常见;
  • 用方括号交换花括号,因为块比下标更常见;和
  • 使用单引号交换双引号,,因为字符串比字符文字更常见。

我怀疑这最后可能是最具争议性的,因为它通过要求使用shift来键入常见的收缩来干扰运行文本。这种布局大大提高了我在C ++,C,Java和Perl中的打字速度,并且在LISP和Python中有所增加。

6 个答案:

答案 0 :(得分:32)

我仍然认为打字速度不是项目完成所需时间的主要因素。如果是,那就有一个大问题(编码周节省了我们的计划时间)。

关于你的问题,我更喜欢使用标准布局,因为这意味着当出现标准键盘布局时,我不必花费前10分钟看起来很愚蠢。

您建议的一些替代品,例如带有特殊字符的顶行不会产生一点差异,因为另一方面外侧手指应该同时移动。

恕我直言,有助于上述链接布局的一件事是仅使用键盘快捷键。建议使用Vim和Emacs。它可以更快地移动文本。

答案 1 :(得分:14)

我会以下列方式处理你的问题。 任务是组织键盘,以便最小化给定文本的击键和手部移动。

寻求可能解决方案的步骤。 制作一个程序:

  1. 使用源代码获取文本文件。 (越大越好,各种来源!)
  2. 计算每个符号的使用频率(在文本中的存在)。
  3. (可选)基于步骤2:程序为每个符号生成关键笔划数,以及手必须从中心位置移动多远。因此,您将衡量键盘布局的效果。
  4. 现在手动或通过编写程序以下列方式重新定义布局。将最常用的符号放在靠近强手的中心位置。第二个符号位于中央位置的弱手。第三个符号可以追溯到你强有力的手......等等。然后,您逐渐从手的中心位置移动到键盘的更“远”区域。当所有键盘都已满时,您将继续分配键的过程,但这次按下Shift键。另一个区别是,当Shift关闭时,您不会为每个符号旋转强弱手。首先按下shift键,您将填充键盘上的中心位置,然后移动到更远的位置。

    当你为新布局再次执行第3步时,看看布局是如何改进的。

    您可能必须随身携带键盘。在光明的一面,没有人会触摸你的电脑。它会让你看起来像专业人士。

    最后,不要忘记分享您的发现。

答案 2 :(得分:12)

我现在正在使用Colemak布局的变体,并对符号进行了大量更改:

没有SHIFT:

` - {} []; < > ()_ =
 q w f p g j l u y * /#\
r。
。 z x c v b k m ,. !

使用SHIFT:

~1 2 3 4 5 6 7 8 9 0& +
Q W F P G J L U Y @ ^ $ |
A R S T D H N E I O“
Z X C V B K M%:?

也许我会恢复/键......

但这不是基于任何合理的研究,我也很乐意看到基于源代码的语料库优化布局(优化包括手工改造等,也包括ZXCV保存......),因为所有这些布局似乎只针对散文进行了优化。例如,'f'是C中非常常见的字母(if,for)。

更新:我目前正在使用

` - {} [] @< > ()_ =
q w k r g y u l p *; #
s s t h h e e o o'\\ \ z x c v b j m ,. /

使用SHIFT:

~1 2 3 4 5 6 7 8 9 0 ^ +
Q W K R G Y U L P& ! $
A S F T D H N E I O“|
| Z X C V B J M%:?

这是基于从Carpalx获取的6键交换部分优化,保留了通常的剪切/复制/粘贴/撤消快捷方式,并进行了修改,以便更好地访问通常的编程字符。

答案 3 :(得分:10)

制作一个简单的键盘记录器,然后计算每个键被按下的次数。运行一两天,然后将输出保存到文本文件。每隔一段时间做一次。使用什么布局并不重要,因为您只是看到哪些键被最多使用。

如果你想做一个好的布局,你不能害怕摆脱常态。我建议将前11个键放在主行,然后将前11个键作为顶行(将返回键上方的2个键保留为最少使用的键),然后将第3个前11个键作为最下面的行。现在应该剩下4把钥匙了。把它们放在 - =和] \ slots中。恭喜!您现在已经为您的目的制作了出色的键盘布局! = d

答案 4 :(得分:9)

总的来说,我认为拥有一个好的文本编辑器并知道如何使用它比尝试提高打字速度更好。能够记录和重放宏有时是救生员,并且选择快捷方式分配的代码片段可以很方便,因为通常会对可以转换为库的内容施加语言限制。

更一般地说,我认为真正的生产力提升者都是关于知识......

  • 了解可用的工具和库以及如何使用它们。
  • 了解您正在处理的代码的整体结构,而不仅仅是您的一点点。
  • 了解关键算法,设计模式和习语,这样您就不必重新发明它们。
  • 充分了解规则,你可以灵活 - 你知道何时打破它们。
  • 了解你的同事及他们的优点,缺点等 - 即知道何时自己解决问题,以及何时以及向谁提问。

FWIW,我并不是声称对所有这些都很强。我一直过于偏向于自己解决问题,并且过于强烈地倾向于重新发明轮子和宏伟的建筑方案。

无论如何,我只是怀疑改变和学习键盘布局所花费的时间会分散更重要的问题。

答案 5 :(得分:-4)

更改键盘布局是一个坏主意,因为它会(或许)提高您在一个键盘上的打字速度,但会严重损害您在其他键盘或没有特殊键盘布局的计算机上的打字速度。我发现通常最好将自己调整为默认值,不得不随处更改它们。 (就我个人而言,我的手指严重偏向Emacs,这会导致其他地方出现大量的打字摩擦。)