一个理想的编程键盘布局

我经常听到一些抱怨,那些为了简洁而大量使用符号的编程语言,最值得注意的是C和C ++(我不会去碰APL)很难打字,因为他们需要经常使用shift键。 一两年前,我自己已经厌倦了,下载了微软的键盘布局创build器 ,对我的布局做了一些改变,而且一直没有回头。 速度差异惊人; 有了这几个简单的改变,我就能够以大约30%的速度键入C ++代码,具体取决于它有多毛。 最重要的是,我在普通文本中的打字速度不会受到影响。

我的问题是这样的:编程已经存在的替代键盘布局已经stream行,它们中的任何一个还在现代使用中,您是否亲自使用任何改变的布局,以及如何进一步优化我的布局?

我对标准QWERTY布局做了以下更改。 (我不使用Dvorak ,但有一个程序员Dvorak布局值得一提。)

  • 顶部行中的符号交换数字 ,因为长或重复的字面数字通常被replace为命名常量;
  • 用波浪replace反引号,因为反引号在许多语言中是罕见的,但是析构函数在C ++中很常见;
  • 交换减去下划线,因为下划线在标识符中是常见的;
  • 用方括号交换花括号,因为块比下标更常见; 和
  • 用单引号交换双引号,因为string比字符文字更常见。

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

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

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

你所提出的一些替代品,例如带有特殊字符的最上面一行,不会产生一丝不同,因为另一方面,外侧的手指应该同时移动。

恕我直言,有助于上面的链接布局是只使用键盘快捷键。 Vim和Emacs是推荐的。 它使得文本移动得更快。

我会以下面的方式来处理你的问题。 其任务是组织一个键盘,以最大限度地减less键盘敲击和给定文本的手部移动。

迈向可能的解决scheme。 制作一个程序:

  1. 带有源代码的文本文件。 (越多越好,从各种来源!)
  2. 统计每个符号的使用频率(在文本中的出现频率)。
  3. (可选)基于步骤2:程序产生每个符号的关键行程计数加上手从中心位置走多远。 因此,您将有一个措施如何有效的键盘布局。

现在手动或编写程序按照以下方式重新定义布局。 把最常用的符号放在靠近你强壮手的中心位置。 第二个符号在你的中心位置上是你的弱手。 第三个符号可以追溯到你强有力的手……等等。 然后,您逐渐从手的中央位置移动到键盘更“远”的区域。 当所有的键盘都满了,你继续分配键的过程,但这次按住Shift键。 另一个区别是,当Shift不在的时候,你不会为每个符号旋转强而弱的手。 首先按住Shift键,然后在键盘上的中心位置填充,然后移动到更远的位置。

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

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

最后,别忘了分享你的发现。

总体而言,我认为有一个好的文本编辑器,并知道如何使用它比尝试提高您的打字速度更好。 能够logging和重放macros有时候是一个救星,而select快捷方式的代码片段可以很方便,因为通常对可以变成一个库的语言施加限制。

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

  • 了解可用的工具和库以及如何使用它们。
  • 知道你正在处理的代码的整体结构,而不仅仅是你的一点点。
  • 知道关键algorithm,devise模式和习惯用法,所以你不必重新创造它们。
  • 了解规则,你就可以变得灵活 – 你知道什么时候打破。
  • 了解你的同事,他们的长处,弱点等 – 即知道什么时候自己想出什么东西,而且知道什么时候和谁要问。

FWIW,我并不是说在所有这些方面都很强大。 我自己一直偏向于解决问题,并且过于强调倾向于重新发明轮子和macros伟的build筑scheme。

无论如何,我只是有这样的怀疑,花费在改变和学习键盘布局的时间将是一个更重要的问题分心。

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

如果你想做一个好的布局,你不能害怕摆脱规范。 我build议把前11个按键沿着主排,然后下排前11个键作为最上面的一行(留下返回键上方的2个键作为最less使用的键),然后将第3个前11个键作为最后一行。 应该有4个键现在剩下。 把它们放在 – =和]槽中。 恭喜! 你现在已经为你的目的做了一个伟大的键盘布局! = d

目前,我正在玩Colemak布局的一个变种,符号变化很大:

没有SHIFT:

` – {} []; <>()_ =
qwfpgjluy * /#\
arstdhneio'
zxcvbkm,。 !

用SHIFT:

〜1 2 3 4 5 6 7 8 9 0&+
QWFPGJLUY @ ^ $ |
ARSTDHNEIO“
ZXCVBKM%:?

也许我会恢复/键…

但是这不是基于任何可靠的研究,而且我也喜欢用基于源代码的语料库来查看优化的布局(优化包括诸如手改动等的东西,还有ZXCV保存,…),因为所有这些布局似乎仅针对散文进行优化。 例如,'f'是C中的一个非常常见的字母(如果是)。

更新:我目前正在使用

` – {} [] @ <>()_ =
qwkrgyulp *; #
asftdhneio'\
\ zxcvbjm,。 /

用SHIFT:

〜1 2 3 4 5 6 7 8 9 0 ^ +
QWKRGYULP&! $
ASFTDHNEIO“|
| ZXCVBJM%:?

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

更改键盘布局是一个坏主意,因为它可能(可能)提高您在一个键盘上的打字速度,但会严重损害您在其他键盘或没有特殊键盘布局的计算机上的打字速度。 我发现,把自己调整到默认状态通常是更好的,那就是要随时随地改变它们。 (就我个人而言,我的手指是严重的Emacs偏见,导致其他地方的打字摩擦很多。)