什么是避免“Emacs手指”的最佳方法?

40

我刚开始使用 GNU Emacs 作为我的文本编辑器,我担心会因为不断地用小指按下控制键而感染 "Emacs Pinky" 而导致重复性劳损伤害。有哪些方法可以避免患上这种类型的损伤?


5
答案在您所引用的段落中。 - kjfletch
2
请参见RSI页面,该页面在Emacs Wiki中简明扼要地介绍了几乎所有相关内容,而不是浏览这个分散的页面。 - teika kazura
33个回答

53

大写锁定 键作为另一个控制键是一个不错的起点。投资一个符合人体工程学的键盘。一些emacs用户甚至会使用脚踏板来进行控制和meta操作...


7
太过分了。 - Joe Phillips
12
我认为脚踏板是用来增加更多的修饰键的。 - intuited
6
哈哈!脚踏板?得去买一个 :) - armandino
8
将控制绑定到大写锁定键并不是一个好的解决方案;你仍然要使用小指,而现在你只能使用其中一个。试试使用像Lisp机器上发现的布局。 - Joe Snikeris
2
@Zombies 现在我正在努力改掉这个习惯,使用两只手正确地操作键盘,将 Caps Lock 重新映射为 Control,并使用 Karabiner 将 Enter 键作为右侧的 Control 键(当作为修饰键使用时——单独按下时仍然起到 Enter 的作用)。一开始我打字速度很快时会有问题,但现在我似乎已经掌握了时机。我认为大多数键盘上正常的 Control 键的位置是整个问题的一部分。 - hoff2
显示剩余9条评论

30

配置使得空格键在按下时既可以作为空格,也可以作为控制键;当仅按下 space 时,作为空格;当和其他键一起按下时,作为 ctrl。因此,Space+x 被视为 Ctrl+x

在Windows中,您可以使用AutoHotKey,在Linux的Xorg中,您可以使用"at-home-modifier"(只适用于X)。在Mac中,您可以使用Karabiner(以前称为keyremap4macbook)。(事实上我是at-home-modifier的作者。=)

如果您有一个像日文键盘上那样拥有许多围绕空格键的按键的键盘,则可以做更多的事情:Japanese keyboard http://www.owltech.co.jp/products/keyboard/KB86STD/KB86STD_B-320.jpg

我的底部行基本上是EscBSSpaceEnterTab,但当用作修饰键时,它变成了AltShiftCtrlShiftAlt。(例如,如果您首先按住Esc,然后再按下Space,则为Alt+Space,但如果是先按Space,然后是Esc,则为ctrl+Esc。如果您按下SpaceEscx,那么就是ctrl+alt+x。)所有的键都可以用拇指按下。您可以从亚马逊(amazon.com)订购一个日语键盘。您不必会说日语。

这非常方便。例如对于火狐浏览器(抱歉,不是emacs),将焦点放在链接上,按下Ctrl+Enter;然后它将在新选项卡中打开。(同时按下Shift,它将切换到新选项卡,而不是停留在当前选项卡。)

(上面的图片是at-home-modifier的作者使用的。然而,制造商不再销售这个型号。)


3
您如何获取 Ctrl+空格? - mark999
1
  1. 如果仅限于Emacs,只需将set-mark-command重新绑定到其他键上即可。
  2. 通常情况下,可以使用一个额外的空格、ctrl或空格/ctrl键。(没有多余的东西。拥有两个空格/ctrl键比单独使用ctrl和空格要好得多。)
- teika kazura
太棒了!Keyremap4macbook 真是太棒了。 - juliomalegria
1
非常感谢!空格键作为控制键是一个好主意! - Chandresh Pant
使用 at-home-modifier,即使将空格设置为 space/ctrl,ctrl+space 也能正常工作。如果您不想再使用普通的 ctrl 键,set-mark-command 也可以绑定到 ctrl+@ 或其他键。 - fgui
我想知道Karabiner是否安全。它会要求一些权限。所以有人能告诉我它不会记录我的密码吗? - Ansuman Bebarta

20

4
给出漫画页面的链接可能会不错。 - Xiong Chiamiov

15

买一个脚踏板吧!(我有一个kinesis。)买了之后,取消掉控制键和大写锁定键的映射,这样你就会强迫自己使用脚。

(顺便说一下,重新映射大写锁定键会有所帮助,但是在一天内进行足够多的emacs操作后,这并不是完全解决方案。)


2
如果你有Kinesis Advantage,你甚至不需要脚踏板,因为使用拇指就可以轻松控制。 :) - Gordon Gustafson

14

求求你了——换一个文本编辑器吧!如果需要用脚踏板才能正常使用,那么...好吧...老实说,我无话可说。现在有很多强大的当代文本编辑器,它们不需要你记住一堆奇怪的按键组合或购买昂贵的硬件。

你知道吗,我可以理解并接受很多事情,但是对于一个普通的文本编辑器需要脚踏板这一点,真的让我难以接受。


5
太搞笑了!我几年前也用过Emacs,我能理解人们为什么喜欢它,但你的回答确实让它看起来有些愚蠢。 - John D. Cook
29
“神秘”的按键组合的记忆,“量级”是非常主观的。如果要在其他编辑器中同样熟练,你仍需要记忆许多命令。 - Adriano Varoli Piazza
4
+1,多余的回答 - 使用vi - elcuco
17
实际上,我发现Emacs比所谓的“更现代”的工具要快得多,特别是因为一切都可以从控制键和alt键进行访问。没有必要将手移动到鼠标上去点击这里那里。另外一个问题是-为什么脚踏板比手控制还要荒谬呢?最初的汽车只使用手动控制来操纵方向盘、加速、减速和换挡。设计师转向使用脚踏板,因为它更有效-不需要将手从方向盘上移开就可以完成某些操作。 - Cheeso
11
这个答案可能会有点搞笑,但除此之外没有什么价值。Emacs实际上是一个虚拟的Lisp机器:它内置了第三方新闻/邮件阅读器、IRC客户端、文件管理器、版本控制接口、本地Shell、终端模拟器,您可以在其中运行另一个Shell或其他基于终端的程序,还有一个与基于文本的WWW浏览器W3M的接口,以及除Vim之外其他任何文本编辑器中看不到的许多文本编辑相关功能。"Emacs是一个操作系统"并不是一个玩笑,除了它没有一个好的编辑器的部分。;) 还可以看一下它的Vim仿真器"Evil"。 - TaylanKammer
显示剩余11条评论

11

我一直很好奇为什么程序员、作家、极客等这样一个庞大的社区还没有找到超级简单和有效的解决方案来解决这个问题。简单地说:

  1. 取一小张纸,把它弄成一团;
  2. 用透明胶将其粘在左边的ctrl键上(暂时从原位移除);
  3. 在写作时,使用左手掌的侧面按压该键 - 现在这个键比其他键更高,你可以轻松地按到它。这样你就不需要购买超级符合人体工程学的键盘,也不需要将ctrl键重新映射到大小写锁定键(因为你最终会用小指按下它)......

如此小的问题引起了这么多讨论。


2
看看我的答案。用拇指按Ctrl键比使用手掌要好得多,这样你根本不需要离开主键区。 - teika kazura

10

重新映射 左 CtrlCaps Lock,使它们在应该的位置上:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,1d,00,1d,00,3a,00,00,00,00,00

 


1
另外,来自微软的Ctrl2Cap实用程序表现不错。(http://technet.microsoft.com/en-us/sysinternals/bb897578.aspx) - James Sulak
1
如果您使用的是Unix系统,可以使用xmodmap来交换键。最新版本的Mac OSX提供了一个对话框来进行此交换。 - Bryan Oakley
KDE在个人设置>输入设备>高级>Ctrl键位置中提供了一个选项,可以将大写锁定键作为额外的控制键。 - Tikhon Jelvis

7

我使用优秀的key-chord mode来进行常规操作。您可以为其提供要调用的函数或键序列。

为了确保我不会过分阻碍正常打字,我生成了字母统计信息以找到好的按键和弦。我将它们记录在一起,与我的默认和弦一起。

除了更方便的命令调用外,我还有一些和弦用于插入一些内容,例如

Best wishes,
Arne

我不喜欢写没有☺表情的电子邮件。

另外,我在像拼写检查之类需要一直按住control键的时候使用控制锁定模式。这是真正的Emacs快捷键下的模态编辑。

我经常使用的和弦是:

; buffer actions
(key-chord-define-global "vg"     'eval-region)
(key-chord-define-global "vb"     'eval-buffer)
(key-chord-define-global "cy"     'yank-pop)
(key-chord-define-global "cg"     "\C-c\C-c")
(key-chord-define-global "äü"     'control-lock-toggle)

; frame actions
(key-chord-define-global "xo"     'other-window);
(key-chord-define-global "x1"     'delete-other-windows)
(key-chord-define-global "x0"     'delete-window)
(defun kill-this-buffer-if-not-modified ()
  (interactive)
  ; taken from menu-bar.el
  (if (menu-bar-non-minibuffer-window-p)
      (kill-buffer-if-not-modified (current-buffer))
    (abort-recursive-edit)))
(key-chord-define-global "xk"     'kill-this-buffer-if-not-modified)

; file actions
(key-chord-define-global "bf"     'ido-switch-buffer)
(key-chord-define-global "cf"     'ido-find-file)
(key-chord-define-global "zs"     "\C-x\C-s")
(key-chord-define-global "vc"     'vc-next-action)

7
我完全赞同重新映射大写锁定键的解决方案,这对于改善打字有很大帮助。为了更进一步,我尝试并喜欢Ergoemacs按键绑定。该项目正在积极开发,并得到良好的支持。我个人不使用它,因为它没有与Mac OS X集成(一些EMACS键已经集成在Cocoa中),但似乎有人发布了一个inputrc文件,其中包含Ergoemacs按键绑定。 我一直在尝试启用StickyKeys。它在许多平台上都得到支持,并缓解了一些特定于弹奏(而不仅仅是过度使用)的问题:据说emacswiki推荐使用它:http://www.emacswiki.org/emacs/StickyModifiers

6
首先,我想指出的是,建议不使用Emacs,因为默认的按键映射可能不适合每个人,这是没有意义的。 Emacs是有史以来最可配置的“文本编辑器”,因此,当然,诸如按键映射之类的琐碎事情都是完全可配置的。
关于“Emacs手小指”问题,我注意到有几个人在他们的.emacs中有“反Emacs手小指”的按键映射,例如用户“Paul Nathan”(在我撰写本文时有17.5k rep)在这里: What are good custom keybindings in emacs? 然后众所周知,许多人更喜欢vi方式,并使用Emacs的viper-mode。
我认为Emacs的主要问题是,默认情况下过度依赖CTRL,特别是C-x和C-f / C-b。 这三个真的很糟糕,因为它意味着,依我之见,会让手指非常难受。

首先,对我来说,问题必须被定义:什么是问题?问题是默认过度依赖CTRL键,事实上,大多数键盘上的CTRL键位置通常很糟糕,而且大多数键盘(我估计超过99.9%的所有生产的键盘)都是垃圾。

那么,我的解决方案是什么?

我使用一款优秀的机械键盘并采用触摸打字方式。那些真正重视此事的人可能会花费大量资金购买非常好的分离式和矩阵式键盘(如Kinesis Advantage)......因为从人体工程学角度来看,只有分离式和矩阵式键盘才是有意义的选择(这甚至不容置疑)。可惜的是,我已经打字三十年了,无法适应矩阵布局,所以我现在使用一个旧的(有缺陷的)错列式键盘。如果你要使用错列式键盘,请至少选择一个拥有良好开关的键盘(例如IBM Model M中的扣动弹簧,Cherry MX开关或Happy Hacking Keyboard Pro中的Topres)。如果你希望找到一款分离式+“机械”错列式键盘,如Cherry MX-5000 (*)或IBM M15,则需要准备支付500美元或更多的费用。

简而言之,如果你真的很在意这个问题,请选择Kinesis Advantage(它们使用Cherry MX开关,如果我没记错的话,你甚至可以选择自己喜欢的开关)。

如果你和我一样,因为它们“太不同”而无法适应这些精美的键盘,那么就选择一款好的“机械”键盘。任何允许在打字时不要“底部出现”按键的键盘都可以保护你的手指关节。在编程数十年后有所帮助。
如果你不想选择“机械”键盘,认为橡胶圆顶键盘也很好(我认为它们是垃圾,但每个人都有自己的喜好),那么至少选择一款好的橡胶圆顶键盘。微软的Ergo 4K是一个不错的选择(再次强调:对我来说,它是一种破坏手指的垃圾,但这是个人品味问题)。
一旦你使用了好的键盘,请将CAPS-LOCK重新映射到CTRL。这可以在任何操作系统上完成。这很简单,有很多相关链接。
重新映射Emacs的键,以避免过度依赖CTRL。首先,CTRL-x是可怕的。它真的是最糟糕的快捷方式。但是你可以将ctl-x-map重新映射到你想要的内容。我在我的重新映射小模式中这样做:
(define-key my-keys-minor-mode-map (kbd "C-,") ctl-x-map)
C-,可能不适合你:选择其他内容...
然后有一个关于光标移动的问题。我认为这对于“文本编辑器”来说是一个大问题。即使倾向于使用所有精细的Emacs函数来快速移动文本缓冲区而不是“移动光标”,我仍然经常需要“手动”移动光标。
C-f / C-b 必须是有史以来最愚蠢的移动光标快捷键。
我使用 M-{i,j,k,l}。有些人更喜欢 {hjkl} 而不是 {ijkl},但我喜欢 {ijkl},因为它重现了倒置的 T 箭头。我还喜欢这样一个事实:当你作为一个触摸打字者在你的主键盘上时,你已经有三个手指放在 {jkl} 上。没有疯狂的手指动作去到达 'f' 或 'b':毫无意义。
最后但并非最不重要的一点:当你不打字时,请将手指放在键盘上休息。当然,为此,您需要一个带有足够阻力的好开关,以便当您简单地将键盘上的键休息时不会激活它们。

我拥有几个好键盘:我有几个IBM Model M,一个Cherry MX-5000(有些在eBay上卖了1000美元以上),还有一个使用白色ALPS键轴的分离+矩阵键盘。我打字已经近30年了,触摸打字也有15年左右了。如果我能适应真正的分离+人体工程学键盘,我会毫不犹豫地花大钱买Kinesis... - TacticalCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接