93

我经常听到抱怨为了简洁而大量使用符号的编程语言,尤其是 C 和 C++(我不会接触 APL),因为它们需要频繁使用 shift 键而难以键入。一两年前,我自己也厌倦了,下载了微软的Keyboard Layout Creator,对我的布局进行了一些更改,并没有回头。速度差异惊人;通过这些简单的更改,我可以将 C++ 代码的输入速度提高 30% 左右,当然这取决于代码的复杂程度;最重要的是,我在普通文本中的打字速度没有受到影响。

我的问题是:有哪些可供编程的替代键盘布局已经流行,它们中的任何一个仍在现代使用中,您个人是否使用任何更改的布局,以及如何进一步优化我的布局?

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

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

我怀疑这最后一个可能是最具争议的,因为它要求使用 shift 来输入常见的收缩,从而对运行文本的干扰最大。这种布局显着提高了我在 C++、C、Java 和 Perl 中的打字速度,并且在 LISP 和 Python 中有所提高。

4

6 回答 6

33

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

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

您建议的一些替换,例如带有特殊字符的顶行并没有什么不同,因为另一方面,外侧手指应该同时移动。

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

于 2010-02-21T16:00:38.417 回答
21

我将通过以下方式处理您的问题。任务是以最小化给定文本的击键和手部移动的方式组织键盘。

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

  1. 获取带有源代码的文本文件。(越大越好,来源多样!)
  2. 计算每个符号的使用频率(它在文本中的存在)。
  3. (可选)基于第 2 步:程序生成每个符号的击键计数以及手必须离开中心位置的距离。因此,您将衡量键盘布局的有效性。

现在手动或通过编写程序以下列方式重新定义您的布局。将最常用的符号放在靠近您的强牌的中心位置。第二个符号指向你在中心位置的弱手。第三个符号回到你的强牌...等等。然后你逐渐从手的中心位置移动到键盘更“远”的区域。当所有键盘都已满时,您将继续分配键的过程,但这次按下 Shift 键。另一个区别是,当 Shift 向下时,您不会为每个符号轮换强弱手。首先按下 shift 键,您将填充键盘上的中心位置,然后移动到更远的位置。

当您为新布局执行所有这些操作时,再次执行第 3 步,以查看布局是如何改进的。

您可能必须始终随身携带键盘。从好的方面来说,没有人会碰你的电脑。它会让你看起来像一个专业人士。

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

于 2011-01-31T02:02:00.707 回答
16

我目前正在使用 Colemak 布局的变体,其中符号发生了重大变化:

没有 SHIFT:

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

使用 SHIFT:

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

也许我会恢复 / 键...

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

更新:我目前正在使用

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

使用 SHIFT:

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

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

于 2011-07-13T10:51:38.300 回答
15

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

If you want to make a good layout, you can't be afraid to go away from the norm. I'd suggest putting the top 11 keys along the home row, then the next top 11 keys as the top row (leave the 2 keys above the return key as the least used keys), then the 3rd top 11 keys as the bottom row. There should be 4 keys left over now. Take those and put them in the -= and ]\ slots. Congrats! You have now made a great keyboard layout for your purposes! =D

于 2012-11-23T07:12:04.220 回答
10

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

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

  • 了解可用的工具和库以及如何使用它们。
  • 了解您正在处理的代码的整体结构,而不仅仅是您的一点点。
  • 了解关键算法、设计模式和习语,因此您不必重新发明它们。
  • 充分了解规则以便您可以灵活应对——您知道何时打破规则。
  • 了解你的同事以及他们的优势、劣势等——即知道什么时候自己解决问题,以及什么时候问谁。

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

无论如何,我只是怀疑花在更改和学习键盘布局上的时间会分散对更重要问题的注意力。

于 2010-02-21T17:03:25.520 回答
-5

更改键盘布局是一个坏主意,因为它(可能)会提高您在一个键盘上的打字速度,但会严重损害您在其他键盘或没有特殊键盘布局的计算机上的打字速度。我发现将自己调整为默认值通常会更好,因为必须在任何地方更改它们。(就我个人而言,我的手指严重偏向 Emacs,这会在其他地方造成很多打字摩擦。)

于 2010-02-21T16:08:59.690 回答