【问题标题】:An Ideal Keyboard Layout for Programming [closed]理想的编程键盘布局[关闭]
【发布时间】:2026-02-17 20:10:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 也许只是我想得太慢了——但在开发软件时,原始打字速度通常不是我的限制因素。如果是这样,我可能会认为我做错了什么。
  • @Lucero:总体而言,不,但是当我(终于!)弄清楚我应该做什么时,我可以更快更舒适地输入它,更好的。一旦你完成了所有艰苦的思考,有时就需要大量的代码打磨...... :-)
  • @Jon:强烈建议在它被关闭之前将其作为一个 CW(毕竟,它是)。
  • @T.J.:制作 CW。良好的布局与其说是原始性能问题,不如说是舒适度问题——但舒适度对性能非常重要。
  • 你被很多人抨击很有趣,我建议忽略他们。这不仅仅是打字速度(如果您可以输入足够多的内容以“按照您的想法编程”,这一个因素),人体工程学胜过这一点。但是速度和人体工学是相辅相成的:让你的双手紧张的动作执行起来很慢,疲劳会导致错误,而你的双手会更费力地解决这些问题。从长远来看,调整键盘布局以满足您的需求可能是 RSI 或无 RSI 的区别。

标签: language-agnostic keyboard-layout dvorak qwerty


【解决方案1】:

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

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

您建议的一些替代品,例如带有特殊字符的第一行没有任何区别,因为另一方面,外侧手指应该同时移动。

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

【讨论】:

  • 哦,不,打字速度无论如何都不是瓶颈,但与此同时,为什么要让像键盘这样愚蠢的东西妨碍你呢?我在我的布局和其他布局之间来回切换没有问题,因为我经常使用两者;我只是更喜欢我的。而且我必须承认,emacs 使编程变得尽可能快——当我不必查找键序列时。
  • 哦,左右手的同时移动也没有什么区别:在敲击键之前必须按下修饰符。肯定有几毫秒的差异,但又一次,为什么要阻碍自己呢?使用不适合您的布局进行编程就像在粘滞键盘上编程。
  • 我认为,在记忆中保留多个键盘布局会破坏您的肌肉记忆,从而使您的打字速度变慢。
  • shift 键的另一个问题是你交替的序列,所以双手从第一行跳到它们的 shift 键并返回。不过,我并不是说这很常见,但像“(!*x)”这样的事情可能会令人讨厌。
  • -1:对讨论没有任何贡献(“看起来很愚蠢”的论点甚至没有一个经验数据支持,这是一个前瞻性的担忧)并且不能固定。
【解决方案2】:

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

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

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

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

当您为新布局再次执行第 3 步以查看布局如何改进时。

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

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

【讨论】:

  • 我真的很喜欢这个答案,:P
  • 如果想要让事情变得更复杂,可以考虑字符组合,并尝试让双手交替或避免使用相同的手指敲击(如 QWERTY 上的“kilo”)
  • 会将源代码文本文件更改为键盘记录程序,以获取您按下的快捷键并优化它们。
【解决方案3】:

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

不带 SHIFT:

` - { } [ ] ; ( ) _ =
q w f p g j l u y * / # \
一个 r s t d h n e i o '
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 f t d h n e i 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 键交换部分优化,保留了常用的剪切/复制/粘贴/撤消快捷键,并进行了修改以更好地访问常用的编程字符。

【讨论】:

  • 我喜欢让字符默认而不是数字的想法。即: shift+1 得到一个,然后按 1 给你!
【解决方案4】:

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

如果你想做出好的布局,你不能害怕偏离规范。我建议将前 11 个键放在主行,然后将下一个前 11 个键作为顶行(将返回键上方的 2 个键作为最少使用的键),然后将第 3 个前 11 个键作为底行.现在应该还剩下 4 个键。把它们放在 -= 和 ]\ 插槽中。恭喜!您现在已经为您的目的制作了一个很棒的键盘布局! =D

【讨论】:

  • 很好的答案:键盘应该定制给所有者
  • 对于键盘使用统计,已经有很好的程序可以显示热图,比如这个:WhatPulse
  • [访问旧帖子 cmets] 这实际上是一个非常酷(或热;])的想法。我必须自己检查一下!
【解决方案5】:

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

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

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

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

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

【讨论】:

  • 我在所有方面都同意你的看法!善用工具和习语就是很好的编程。但这是一个关于一件非常具体的事情的问题,嘿,两年前的十五分钟为我节省了相当多的挫败感。
  • @Jon - 我明白了,但我认为我的打字习惯现在已经非常严格了 - 改变会很辛苦。
  • -1:听起来不像是基于替代键盘布局的经验;违背我与他们的经验。离题远远超出了主题。不提供具体的行动项目。无法修复。
【解决方案6】:

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

【讨论】:

  • 我很乐意在两种布局之间切换。乔恩报告说已经“一两年”了,他来回没有问题。 YMMV,基本上。
  • 我发现在键盘和键盘布局之间进行更改就像在说不同语言之间进行更改一样容易/困难——如果您熟悉它们,几分钟后您就会恢复全速思考。
  • @liori:说得好,虽然是几分钟还是几秒钟,完全取决于我有多累。 :P
  • @Jason D:有效积分,但我很高兴它们不适用于我……我很少使用别人的电脑。
  • @Liori。很多公司都设有带共享计算机的会议室。很多开发人员会在标记团队困难的问题时让其他人“驱动”他们的计算机。如果其他人由于您的非标准布局而拒绝触摸您的计算机,您可能会妨碍合作解决问题。对于您的雇主而言,这消除了您通过所选布局获得的大部分 个人 好处。请记住,发展通常不是一个人对抗世界。它通常作为一个团队完成。