避免获得“Emacs Pinky”的最佳方法是什么?

时间:2008-09-09 18:08:44

标签: emacs keyboard

我刚刚开始使用GNU Emacs作为我的文本编辑器,我担心受到“Emacs Pinky”的困扰,因为在使用Emacs时必须按照我的小拇指不断按下控制键。如何避免潜在的这种重复性劳损?

33 个答案:

答案 0 :(得分:54)

使大写锁定另一个控制键是一个好的起点。投资符合人体工程学的键盘。一些emacs用户甚至可以使用脚踏板来控制和控制元素...

答案 1 :(得分:30)

配置,以便空格键两者作为空间和控件;当单独按下空格时,作为空格,并与其他人按下,如 ctrl 。所以 Space + x 被视为 Ctrl + x

您可以在Windows中使用AutoHotKey,在Linux中使用Xorg中的“at-home-modifier”。 (X,但仅限Linux。)您可以在Mac中使用Karabiner(格式称为 keyremap4macbook )。 (事实上​​,我 at-home-modifier的作者。=)

如果您的键盘周围有许多键,可以执行更多操作,例如日语键盘:Japanese keyboard http://www.owltech.co.jp/products/keyboard/KB86STD/KB86STD_B-320.jpg

我的底行基本上是 Esc BS 空间 输入 Tab ,但是当用作修饰符时,它是 Alt Shift Ctrl Shift Alt 。 (例如,如果先按 Esc 然后按空格键,则 Alt + 空格,但空格后跟 Esc ,它是 Ctrl + Esc 。如果按空格 Esc x ,然后它是 ctrl + alt + x 。)所有都可以用拇指按下。您可以从amazon.com订购日语键盘。你不必说日语。

这非常方便。例如,对于firefox(抱歉,不是emacs),请关注一个链接,然后按Ctrl + Enter;然后它将在一个新选项卡中打开。 (通过按Shift键,它将切换到新选项卡,而不是保持当前状态。)

(上图是the author of at-home-modifier使用的一个。但制造商不再销售此型号。)

答案 2 :(得分:20)

答案 3 :(得分:15)

踩脚踏板! (我有一个kinesis。)在你这样做之后,取消地图控制和封锁,这样你就可以强迫自己用脚了。

(仅供参考,重新设置大写字母会有所帮助,但在一天之内完成足够的电子邮件后,将不会是一个完整的解决方案。)

答案 4 :(得分:14)

为了上帝的爱 - 使用另一个文本编辑器!如果它需要一个脚踏板来正常使用它,那么......好吧......坦率地说,我说不出话来。当时有许多强大的现代文本编辑器,不需要你记忆大量的奥术击键或购买花哨的硬件。

你知道,我可以理解并接受很多东西,但是一个简单的文本编辑器的脚踏就是我画线的地方。

答案 5 :(得分:11)

我一直很好奇为什么这么大的程序员,作家,极客等社区还没有找到超级简单有效的解决方案来解决这个问题。简单地说:1)拿一小张纸,制作纸球; 2)用苏格兰威士忌将它粘在左边的ctrl键上(暂时将其从地方取下); 3)写作时,使用左手掌侧按下该键 - 现在这个键比其他键高,你可以轻松完成。这样你就不需要购买uber ergo-keyboards,或者将ctrl键重新映射到大写字母(无论如何你最终会用你的小指推送)......

关于这么小问题的讨论很多。

答案 6 :(得分:10)

重新映射左 - Ctrl 大写锁定,以便它们应该是它们的位置:

[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

答案 7 :(得分:7)

我完全同意重映射大写锁定解决方案,这有点帮助。 为了更进一步,我尝试并喜欢Ergoemacs keybindings。该项目正在积极开发,并得到很好的支持。我个人不使用它,因为它没有与Mac OS X集成(一些EMACS密钥集成在Cocoa中),虽然似乎有人发布了带有Ergoemacs键绑定的inputrc文件。 我一直在玩的另一个技巧是启用StickyKeys。它在许多平台上得到支持并减轻了一些特定于chording的问题(而不仅仅是过度使用):显然建议在emacswiki上使用:http://www.emacswiki.org/emacs/StickyModifiers

答案 8 :(得分:7)

我使用优秀的key-chord mode来执行常见操作。你可以给它调用函数或键序列。

为了确保我不会过多地阻碍正常输入,我生成了字母统计信息以找到好的键和弦。我将它们与my default chords一起录制。

除了更方便的命令调用之外,我还有用于插入

等内容的和弦
Best wishes,
Arne

我讨厌没有那封电子邮件☺

我也使用control lock mode来表示像flyspell这样的东西,我需要一直控制。这是使用真正的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)

答案 9 :(得分:6)

首先,我想指出建议不要使用Emacs,因为默认的键绑定可能不适用于每个人都没有任何意义。 Emacs是有史以来最可配置的“文本编辑器”,因此,当然,像keymappings这样的微不足道的东西是完全可配置的。

关于“Emacs pinky”问题,我注意到有几个人在他们的 .emacs 中有“反Emacs-pinky”键绑定,就像用户“Paul Nathan”一样(17.5k rep我输入这里):

What are good custom keybindings in emacs?

然后众所周知,许多人更喜欢 vi 方式和用户Emacs的毒蛇模式。

我认为,默认情况下,Emacs中的主要问题是过度依赖CTRL,更具体地说是C-x和C-f / C-b。这三个真的很可怕,因为它意味着,恕我直言,痛苦的手指扭曲。

首先,我必须定义问题:问题是什么?问题是默认情况下对CTRL过度依赖,事实上CTRL通常位于大多数键盘上,并且大多数键盘都在那里(我估计有超过99.9%的键盘都是有效的)是总的垃圾。

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

  • 我使用一个好的机械键盘,我做触摸式。真正认真对待这个问题的人可能会将$$$视为一个非常好的分裂&矩阵键盘(如Kinesis Advantage)...因为分割矩阵是唯一一种从符合人体工程学的角度来看有意义的键盘(这甚至不公开辩论)。遗憾的是,我打字三十年了,不能适应矩阵布局,所以我使用的是旧的(有缺陷的)交错键盘。如果您打算使用交错键盘,至少要使用一个具有良好开关的键盘(例如像IBM Model M或Cherry MX开关中的屈曲弹簧或者像Happy Hacking Keyboard Pro中那样的Topres)。准备好支付500美元甚至更多,如果你希望找到分裂+“机械”交错,如Cherry MX-5000(*)或IBM M15。

所以:简而言之,如果你真的认真对待这个问题,可以选择Kinesis优势(他们使用的是Cherry MX开关,如果我没弄错的话你甚至可以选择你的特定开关)。 / em>的

如果像我一样,你遗憾地无法适应这些美妙的键盘,因为它们“太不同”了,那么就去找一个好的“机械”键盘。任何键盘都不允许在打字时“触底”,这样可以节省手指的关节。经过数十年的编程后帮助。

如果你不想走“机械”路线,并认为橡胶圆顶是精美的键盘(我认为它们是垃圾,但每个人都喜欢),那么至少选择一个好的橡胶圆顶。 MS'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':毫无意义。

最后但并非最不重要:当您不打字时,请在键盘上休息。当然,你需要一个带有良好开关的键盘,当你只是把钥匙放在键盘上时,它有足够的阻力不能激活。

答案 10 :(得分:4)

我的建议是尝试使用拇指按压修改键(控制,替代),当它们在触手可及范围内时。在具有较短空格键的键盘上,即使不向内弯曲拇指也可以按Alt(Meta)。您可以重新映射,例如右键Alt控制,这样就可以方便地访问Control和Alt。 这也可以在MS Natural Keyboards上使用。

答案 11 :(得分:4)

考虑使用Kinesis Contoured键盘。我花了大约一个月的时间来加速我的速度,现在我认为它是理想的Emacs键盘,即使没有脚踏板也是如此。

不开玩笑。我用食物踏板命令我的第一个,但发现我实际上无法协调我的脚和我的手的时间,足以充分利用它来修改键。有一段时间我用它来切换集成数字键盘,但当我意识到我没有使用它时,我放弃了它,因为Kinesis上的数字行很容易到达。

答案 12 :(得分:4)

此处尚未提及的一个解决方案是使用两个指针进行组合键。

例如,假设您要按< CTRL-K>。在QWERTY键盘上,< K>在右边,所以按< CTRL>使用手和< K>用你的正确手。一旦你习惯了系统,它就可以正常工作。

答案 13 :(得分:4)

微软自然键盘对我来说非常非常好。我每天10小时都使用emacs,没有任何问题。

答案 14 :(得分:3)

尝试 viper-mode ,这是emacs中的vi模拟器。作为在过去的25年中在vi / emacs / vim之间多次来回切换的人,我现在终于在emacs中尝试了viper-mode,我喜欢它。我发现vi命令更舒服,但我仍然可以保留emacs的高级功能。

答案 15 :(得分:3)

to Chow,

昨天我找到了一个解决方案,我们可以在mac上使用系统范围的ErgoEmacs键绑定。

诀窍是使用mac os x的键绑定系统,以便使用Control键进行系统范围的ErgoEmacs键绑定。然后,在OS首选项中,交换Control和Cmd键。

这样,你可以使用空格键旁边的修饰符获得ErgoEmacs键绑定系统。退回当然是正常的mac Cmd +键现在位于键盘的角落。因此,关于您是否使用大多数应用程序进行文本编辑或应用程序的快捷方式,这是一个权衡。

可能会在这里试一试: http://code.google.com/p/ergoemacs/wiki/ErgoEmacs_keys_system_wide

另外,几年前我尝试了mac的os wide custome键绑定,一些可可应用程序仍然不支持它。见这里的底部

How To Create Keybinding In Mac OS X

但也许事情现在变得更好了。

答案 16 :(得分:3)

我每天都使用emacs和bash,而且我有一个额外的左控制键,就像VT100一样。没有人提到在X11上做到这一点的最好方法。 (实际上,这是特定于X.org/xfree86 X服务器,所有这些都使用这些天):

setxkbmap -option ctrl:nocaps

 Or edit your xorg.conf to have
Section "InputDevice"
        Identifier  "Generic Keyboard"
        Driver      "kbd"
        Option      "XkbRules" "xorg"
        Option      "XkbModel" "pc105"
        Option      "XkbLayout" "us"
        Option      "XkbOptions" "ctrl:nocaps"
        Option      "Autorepeat" "200 40"
EndSection

(XkbOptions和Autorepeat是我添加到预先生成的那个。然后X每次都会以正确的键映射开始,并且您不必每次都找到将setxkbmap放在哪里执行它登录并启动窗口管理器。)

虽然gnome确实有一个键盘管理器的东西,正如boskom所说。

仅供参考,emacs最初是为具有"space cadet" keyboards的MIT lisp机器编写的。 X11具有super,hyper,alt和meta修饰键。有时PC键盘上的“Windows键”映射到Super。它们很方便绑定到窗口管理器(例如切换虚拟桌面),因为几乎没有应用程序通常使用它们。

答案 17 :(得分:3)

将修饰符放在空格键的任意一侧meant to be:可以用拇指(或您选择的其他数字)按下它们在数字的另一方面,按下修改后的字母(这样Cg右键在Ctrl上,左边的索引在'g'上,Ck左手拇指在Ctrl上,右边中间在'k'上)。你会注意到,从内到外的正确顺序是Ctrl Meta Super Hyper。

如何执行此操作取决于您的操作系统和键盘。对于Windows,您可能想要启动here。在Mac OS X中,您可以查看“系统偏好设置”>键盘&鼠标>修改键。对于Linux,有一千个xmodmapXKB教程。

答案 18 :(得分:3)

还有一种方法:如果你想避免“emacs pinky”,只需不要使用pinky按控制键

如果必须按键盘重新映射键,请按以下顺序进行操作:

[Ctrl] [Alt] [空格] [Alt] [Ctrl]

在任何标准键盘上(对称地定位修改键,例如任何MS键盘),现在可以用无名指按Ctrl键,用中指按Alt键手中。这些手指比小指强得多,可以经常使用。

在Windows上轻松重新映射键盘键的好工具是AutoHotKey

在Ubuntu上我设法使用:键盘首选项/布局/其他选项

答案 19 :(得分:3)

按@Alasdair,将Ctrl重新映射到“大写锁定”或其他地方:instructions for various platforms

P.S。我有点惊讶,这不能通过elisp函数来完成。

答案 20 :(得分:2)

我也有一个MS自然键盘,它很棒。我已经设法训练自己使用左手侧(小拇指下方)按Ctrl键。

答案 21 :(得分:2)

即使重新映射 capslock 成为 control ,你仍然需要使用你的小指按下它 - 至少我这样做,因为我的无名指将无法触及它对于像 Cg 这样的命令。根本不建议使用你的小指,对吧?

我在MacBook Pro上,我刚刚将键盘右侧的重新映射为 control 。这样,例如, Cg 成为我用双手执行的击键,我的右手拇指放在上,我的左手食指放在 g

我们会看看这对我的RSI是否有帮助。其他人这样做了吗?

答案 22 :(得分:1)

购买一个Happy Hacking Keyboard,其中的Ctrl位于右侧(Caps Lock移动到其他位置)。它具有出色的响应,可通过DIP开关进行配置,以便在Mac,Windows和Linux上实现最大程度的集成(例如,您可以从键盘切换Alt和什么是Windows键,无需软件)。

如果适合您的喜好,它的占地面积也非常小。

答案 23 :(得分:1)

我可以在西部或西南部位置使用Control键而不会有任何麻烦。许多Emacsers发誓控制键只属于西方位置和西方位置,而其他任何东西都会破坏你的小指。我们唯一确切知道的是因为打字输入RSI太多了。尝试使用type-break-mode并查看是否有一些常规中断有帮助。

答案 24 :(得分:1)

我开始用手掌按下控制键而不是我的小手指。我的理解是,在更符合人体工程学的键盘上,控制键按钮更大,这使得更容易执行该动作。

答案 25 :(得分:1)

由于这个帖子仍然有点发展,我将加上我的两分钱:

有或没有emacs,ctrl键对于linux或windows上的大量内容非常有用:复制,剪切,粘贴,查找,关闭,退出......我经常使用这些东西。正如其他人所建议的那样,我希望靠近空格键,这样我就可以用拇指了。这就是默认情况下在mac上的情况,其中所有内容都使用cmd键:

[ctrl] [alt] [cmd] [空格键]

所以,我在我的linux盒子上使用mac键盘,并将cmd键设置为第二个ctrl键(在Ubuntu Lucid:键盘首选项>布局>选项> Alt / Win键行为>控制是映射到Win键(和通常的Ctrl键))

[ctrl] [alt] [ctrl] [spacebar]

其他好处: *当我有时需要使用mac时,剪切/粘贴/等都在我习惯的相同位置。 * ctrl + tab(使用真正的ctrl键)仍会在两个平台上浏览浏览器和其他应用程序的标签。

此计划的缺点是alt键已向左移动,因此alt + tab命令(我用于窗口切换)不再匹配mac等效cmd +选项卡。但是我仍然可以用拇指击打它,对我而言,它仍然比摧毁我的小拇指还要小得多。是的,我知道我可以在窗口切换器上按ctrl + tab,但是真正的ctrl键不能用于切换切换。此外,随着应用程序进入浏览器,窗口/标签导航策略将会流行一段时间 - 但像剪切/粘贴这样的基础知识不会随处可见,所以我希望它们被锁定。在我的拇指下。

(当然,如果你想在Mac上使用emacs,我猜你会回到原点......)

答案 26 :(得分:1)

我实际上做了自己的黑客以避免使用ctrl键。我现在使用SPACEBAR键。 This X的小程序改变了空格键的行为,因此当它在组合中使用时,它会向其添加控制修饰符。单独使用时,它在释放时表现正常。 这样你根本不必使用你的小指!对我来说很完美。

答案 27 :(得分:1)

我在新机器上做的第一件事就是将Caps Lock重新映射到新控件。

Google周围有很多.reg个可用的文件,可以在Windows上轻松地为您完成此任务。

答案 28 :(得分:1)

我不是程序员,也很难解释想法。我在戴尔迷你笔记本电脑上。鼠标触控板位于我的拇指休息的地方。 我的左触摸板按钮用作控制键: 在我的拇指一侧,我按它并像往常一样在emacs中编辑。 我打算将右触摸板按钮映射到alt,但我已经完成了 以下: 我按下按钮,控制键被按下(锁定)。 我再次按它并且controll被释放。 这不仅让我的小指感觉更好,而且使我的编辑速度提高了两倍。 (根据 到我的组织模式时钟) 很难解释它有多好用。 为了做到这一点,我使用了以下两个应用: xbindkeys xdotool 我的xbindkeys配置文件:

###########################
# xbindkeys configuration #
###########################
# left mouse button ctrl key
"xdotool keydown ctrl"
b:1
"xdotool keyup ctrl"
control + b:1  +  Release
# vi wanna be style editing
"xdotool keydown ctrl"
release+b:3
"xdotool keyup ctrl"
release+control+b:3
# -------------------------

在尝试这些想法之前,请务必阅读手册页。 没有任何重要的开放。我不得不几次杀了我的窗口管理员 在弄清楚之前。 笔记: 我使用xmodmap来做所有常规的东西,即大写字母--->控制(不是完整的解决方案),交换alt和控制。 (在笔记本电脑上没关系,但我的拇指痉挛起来) 我使用窗口管理器配置文件(stumpwm)来创建绑定以加载正确的键映射 文件。 (取决于我当天的心情) 我相信所有这些都可以在不同的环境中实施。 我的粉红色疼痛消失了,我的编辑速度更快。

答案 29 :(得分:1)

尝试不坏的神模式插件。

答案 30 :(得分:0)

为了解决这个问题,我将所有的复制,粘贴,保存等重新映射到numpad。为了更加轻松,我买了一个单独的小键盘并将它放在我的笔记本电脑键盘后面。

您可以使用AHK(自动热键)轻松重新映射密钥。我使用以下密钥映射脚本,

NumpadIns::^s
NumpadEnd::^c
NumpadDown::^v
NumpadPgDn::^x
NumpadLeft::^+v
NumpadClear::Control
NumpadRight::^a
NumpadHome::q
NumpadUp::Tab
NumpadDel::^f
NumpadEnter::Space

1:复制
2:粘贴
0:保存
等等....

答案 31 :(得分:0)

假设键盘左下角的按键是控制键(用于标准键盘),只需按下手掌即可轻松按下Ctrl键。没有小指涉及。它非常简单快速,我喜欢它。我只将小指用于Ctrl键上方的其他键(Shift,Caps等)。对于Alt,Windows键,功能键(当使用我的笔记本电脑时)左侧我使用左手拇指(右手拇指用于空间)。对于包含Ctrl的热键组合,我以相同的方式使用Ctrl。

我只使用右侧的左Ctrl键。我使用右Ctrl作为“超级”修饰符(映射到autohotkey中的F23,然后映射到emacs中的晚餐)。

首先按这种方式按Ctrl可能看起来很奇怪但是在一些使用变得非常容易之后(它只需要轻微地降低手/掌) - 对我而言,这几乎就像没有按下热键(Ctrl)一样容易。我看到了这种差异,因为我现在正在学习emacs并学习在右侧做同样的事情(对于AppKey和Right Control键以及Down和End用于我的笔记本电脑)。

这是我的ahk代码:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and      reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

^#e:: Gosub, start_emacs
^#c:: Gosub, start_capture

#IfWinActive emacs@ ahk_class Emacs

Up::Return ; to not interfere with pressing <Down>

; F21 = Alt
RAlt::F21

; F23 = Super
RCtrl::F23

#IfWinActive

exit

start_emacs:
IfWinExist emacs@ ahk_class Emacs
    WinActivate
else
    Run c:\bin\emacs\bin\runemacs.exe
    WinMaximize
return

start_capture:
    Gosub, start_emacs
    SendInput {Ctrl down}xf{Ctrl up} {ctrl down}{shift down}{backspace}{ctrl up}{shift up}
    SendInput ~/org/capture.org {enter}
    SendInput {Alt down}x{Alt up} org-capture {enter}
return

这是我在.emacs中的内容:

                    ; prevent single key press from activating the given key
;; http://emacs.1067599.n5.nabble.com/w32-pass-rwindow-to-system-td144902.html
(setq w32-pass-lwindow-to-system nil
  w32-pass-rwindow-to-system nil
  w32-pass-apps-to-system nil)
                ; make sure the given key is not used as a modifier
(setq w32-lwindow-modifier nil
  w32-rwindow-modifier nil
  w32-apps-modifier nil) ; Menu/App key
                ; misc
(setq w32-recognize-altgr nil) ; C+M works: http://www.gnu.org/software/emacs/manual/html_node/emacs/Windows-Keyboard.html
                ; A-alt
(define-key local-function-key-map (kbd "<f21>") 'event-apply-alt-modifier) ; RAlt in ahk
                ; H-hyper
(define-key local-function-key-map (kbd "<f22>") 'event-apply-hyper-modifier) 
(define-key local-function-key-map (kbd "<menu>") 'event-apply-hyper-modifier)
(define-key local-function-key-map (kbd "<apps>") 'event-apply-hyper-modifier) 
(define-key local-function-key-map (kbd "<lwindow>") 'event-apply-hyper-modifier)
(define-key local-function-key-map (kbd "<down>") 'event-apply-hyper-modifier)
                ; s-super
(define-key local-function-key-map (kbd "<f23>") 'event-apply-super-modifier) ; RCtrl in ahk
(define-key local-function-key-map (kbd "<right>") 'event-apply-super-modifier) 
(define-key local-function-key-map (kbd "<rwindow>") 'event-apply-super-modifier)

答案 32 :(得分:0)

My Keyboard

enter image description here 只需用短空格键做一个键盘!