我刚开始使用 GNU Emacs 作为我的文本编辑器,我担心会因为使用 Emacs 时需要用我的小指不断按下控制键而受到“ Emacs Pinky ”的困扰。我怎样才能避免可能出现这种类型的重复性劳损?
33 回答
制作caps lock另一个控制键是一个不错的起点。投资符合人体工程学的键盘。一些 emacs 用户甚至会为了控制和元...
配置使空格键兼作空格和控件;当space单独按下时,作为空格,并且与其他人一起按下时,作为ctrl。所以Space+x被视为Ctrl+ x。
你可以在 Windows 中使用 AutoHotKey,在 Linux 中使用 Xorg 中的“ at-home-modifier ”。(X,但仅限 Linux。)您可以在 Mac中使用Karabiner(以前称为keyremap4macbook )。(其实我是at-home-modifier的作者。=)
如果您的键盘周围有许多键,您可以做更多的事情,例如日文键盘:日文键盘 http://www.owltech.co.jp/products/keyboard/KB86STD/KB86STD_B-320.jpg
我的底行基本上是EscBSSpaceEnterTab,但是当用作修饰符时,它是AltShiftCtrlShiftAlt. (例如,如果你先按住Esc空格,然后是Alt+ Space,但空格后跟Esc,是Ctrl+ Esc。如果你按Space,Esc和x,然后是ctrl+ alt+ x。)都可以用拇指按下。您可以从 amazon.com 订购日语键盘。你不必说日语。
这非常方便。例如,对于 firefox(对不起,不是 emacs),聚焦一个链接,然后按 Ctrl + Enter;然后它将在新选项卡中打开。(同时按下 Shift 键,它会切换到新选项卡,而不是停留在当前选项卡上。)
(上图是at-home-modifier作者使用的那张。不过,制造商不再销售这种型号了。)
来个脚踏板!(我有一个运动。)在你这样做之后,取消映射控制和大写锁定,这样你就可以强迫自己使用你的脚。
(仅供参考,重新映射大写锁定会有所帮助,但在一天内进行了足够的 emacsing 之后,这将不是一个完整的解决方案。)
看在上帝的份上 - 使用另一个文本编辑器!如果是需要脚踏板才能正常工作的东西,那么……好吧……坦率地说,我无语了。有许多功能强大的现代文本编辑器,它们不需要你记住大量的神秘击键或购买花哨的硬件。
你知道,我可以理解和接受很多东西,但是一个简单的文本编辑器的脚踏板确实是我划清界限的地方。
我一直很好奇为什么这么大的程序员、作家、极客等社区还没有找到超级简单有效的解决方案。简单: 1)取一小张纸,把它做成纸球;2) 用 scotch 将它粘在你的左 ctrl 键上(暂时将其从原处移除);3)书写时,用左手掌侧按那个键——现在这个键比其他键高,你可以轻松做到。这样你就不需要购买 uber ergo 键盘,或者将 ctrl 键重新映射到 capslock (无论如何你最终都会用你的小指推动)......
这么多关于这样一个小问题的讨论。
重新映射Left-Ctrl,Caps-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
我完全同意重新映射大写锁定解决方案,这很有帮助。为了更进一步,我尝试并喜欢Ergoemacs 键绑定。该项目正在积极开发中,并得到很好的支持。我个人不使用它,因为它没有与 Mac OS X 集成(一些 EMACS 键集成在 Cocoa 中),尽管似乎有人发布了一个带有 Ergoemacs 键绑定的 inputrc 文件。我一直在玩的另一个技巧是启用 StickyKeys。它在许多平台上得到支持,并缓解了一些特定于和弦的问题(而不是过度使用):显然在 emacswiki 上推荐它:http ://www.emacswiki.org/emacs/StickyModifiers
我将出色的键和弦模式用于常见动作。你可以给它功能或按键序列来调用。
为了确保我不会过多地妨碍正常打字,我生成了字母统计数据以找到好的关键和弦。我将它们与我的默认和弦一起录制。
除了更方便的命令调用之外,我还有用于插入诸如
Best wishes,
Arne
我讨厌没有那个写电子邮件☺</p>
我还对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)
首先,我想指出建议不要使用 Emacs,因为默认键绑定可能不适合所有人,这没有任何意义。Emacs 是有史以来最可配置的“文本编辑器”,因此,当然,像键映射这样的琐碎事情是完全可配置的。
关于“Emacs pinky”问题,我注意到有几个人在他们的.emacs中有“anti-Emacs-pinky”键绑定,比如这里的用户“Paul Nathan”(我输入这个是 17.5k 代表):
然后众所周知,许多人更喜欢vi方式和用户 Emacs 的 viper 模式。
我认为 Emacs 的主要问题是,默认情况下,过度依赖 CTRL,更具体地说是 Cx 和 Cf / Cb。这三个真的很糟糕,因为这意味着,恕我直言,痛苦的手指扭曲。
所以对我来说,首先必须定义问题:问题是什么?问题是默认情况下对 CTRL 的过度依赖,事实上 CTRL 通常在大多数键盘上的位置很糟糕,而且大多数键盘(我估计超过 99.9% 曾经生产的所有键盘)都是垃圾。
那么我的解决方案是什么?
- 我使用一个好的机械键盘,我做触摸式。对此非常认真的人可能会为一个非常好的分体式和矩阵式键盘(如 Kinesis Advantage)掏出美元...因为从人体工程学的角度来看,分体式和矩阵式是唯一有意义的键盘(这个甚至不公开辩论)。可悲的是,我已经打字三年了,无法适应矩阵布局,所以我使用的是旧的(有缺陷的)交错键盘。如果您要使用交错键盘,至少要使用一个具有良好开关的键盘(例如 IBM Model M 或 Cherry MX 开关中的屈曲弹簧或 Happy Hacking Keyboard Pro 中的 Topres)。准备好花 500 美元甚至更多,如果您希望找到一个拆分 +“机械”交错的产品,例如 Cherry MX-5000 (*) 或 IBM M15。
所以:简而言之,如果您对此非常认真,请选择 Kinesis Advantage(他们使用的是 Cherry MX 开关,如果我没记错的话,您甚至可以选择您的特定开关)。
如果像我一样,遗憾地因为它们“太不同”而无法适应这些出色的键盘,那么请选择一个好的“机械”键盘。任何在打字时不允许“触底”的键盘都可以节省您的手指关节。经过数十年的编程后有所帮助。
如果您不想走“机械”路线并认为橡胶圆顶是很好的键盘(我认为它们是垃圾,但每个都是偏好),那么至少选择一个好的橡胶圆顶。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 函数来快速移动文本缓冲区而不是“移动光标”,我仍然需要经常“手动”移动光标。
Cf / Cb 必须是移动光标的两个最愚蠢的快捷方式。
我使用 M-{i,j,k,l}。所以人们更喜欢 {hjkl} 而不是 {ijkl} 但我喜欢 {ijkl} 因为它再现了倒 T 箭头。我也喜欢这样一个事实,作为一个触摸打字员,当你在你的主行时,你已经在 {jkl} 上有了三个手指。没有疯狂的手指运动来达到“f”或“b”:没有意义。
最后但同样重要的是:当您不打字时,请将手指放在键盘上。为此,您当然需要一个带有良好开关的键盘,当您将按键放在键盘上时,它有足够的电阻不会激活。
微软自然键盘对我来说非常非常好。我每天用 emacs 做 10 多个小时,没有任何问题。
我的建议是尝试使用您的拇指在触手可及的情况下按下修饰键(控制、alt)。在空格键较短的键盘上,即使拇指不向内弯曲,也可以按 Alt (Meta)。您可以将例如右 Alt 重新映射到 Control,这样就可以方便地访问 Control 和 Alt。这在 MS 自然键盘上也是可能的。
考虑一个Kinesis Contoured键盘。我花了大约一个月的时间来熟悉我的速度,现在我认为它是理想的 Emacs 键盘,即使没有脚踏板。
不是开玩笑。我用食物踏板订购了我的第一个,但发现我实际上并不能充分协调我的脚和手的时间,以充分利用它作为修饰键。有一段时间我用它来切换集成数字键盘,但当我意识到我没有使用它时我放弃了它,因为 Kinesis 上的数字行很容易够到。
此处尚未提及的一种解决方案是使用双手进行组合键。
例如,假设您要按 <CTRL-K>。在 QWERTY 键盘上,<K> 位于右侧,因此左手按 <CTRL>,右手按<K> 。一旦你习惯了这个系统,它就可以正常工作。
根据@Alasdair,将 Ctrl 重新映射到“Caps Locks”或其他地方:各种平台的说明。
PS 我有点惊讶这不能通过 elisp 函数来完成。
另一种方法:如果您想避免获得“emacs pinky” ,请不要使用 pinky 来按下 control key。
如果有必要按以下顺序重新映射键盘上的键:
[Ctrl][Alt][空格][Alt][Ctrl]
在任何标准键盘(对称放置修饰键,例如任何 MS 键盘)上,您现在可以用无名指按 Ctrl 键,用中指按 Alt 键。这些手指比小指强壮得多,可以承受频繁使用。
在 Windows 上轻松重新映射键盘键的好工具是AutoHotKey
在 Ubuntu 上,我设法做到了:键盘首选项/布局/其他选项
试试viper-mode,它是 emacs 中的 vi 模拟器。作为一个在过去 25 年中多次在 vi/emacs/vim 之间来回切换的人,我现在终于在 emacs 中尝试 viper-mode,我喜欢它。我发现 vi 命令更舒服,但我仍然可以保留我喜欢的 emacs 的高级功能。
我每天都在使用 emacs 和 bash,并且我有 capslock 作为额外的左控制键,就像 VT100 一样。还没有人提到在 X11 上做到这一点的最佳方式。(实际上,这是特定于 X.org/xfree86 X 服务器的,现在一切都在使用):
setxkbmap -option ctrl:nocaps 或编辑您的 xorg.conf 以拥有 “输入设备”部分 标识符“通用键盘” 驱动程序“kbd” 选项“XkbRules”“xorg” 选项“XkbModel”“pc105” 选项“XkbLayout”“我们” 选项“XkbOptions”“ctrl:nocaps” 选项“自动重复”“200 40” 端部
(XkbOptions 和 Autorepeat 是我添加到预生成的。然后 X 每次都会以正确的键映射开始,并且您不必每次登录时都找到放置 setxkbmap 的位置并执行它启动你的窗口管理器。)
尽管 gnome 确实有一个键盘管理器,正如 boskom 所提到的。
仅供参考,emacs 最初是为带有“space cadet”键盘的 MIT lisp 机器编写的。X11 有 super、hyper、alt 和 meta 修饰键。有时,PC 键盘上的“windows 键”会映射到 Super。它们很容易绑定到窗口管理器的东西(例如切换虚拟桌面),因为几乎没有应用程序通常使用它们。
对周,
昨天我找到了一个解决方案,我们可以在 mac 上进行系统范围的 ErgoEmacs 键绑定。
诀窍是使用 mac os x 的键绑定系统,以便您拥有系统范围的 ErgoEmacs 与 Control 键的键绑定。然后,在操作系统首选项中,交换 Control 和 Cmd 键。
这样,您就可以在空格键旁边使用修饰符获得 ErgoEmacs 键绑定系统范围。缺点当然是普通的 mac Cmd+key 现在位于键盘的角落。因此,关于您是使用大多数应用程序进行文本编辑还是应用程序的快捷方式,这是一个权衡。
可能会在这里试一试: http ://code.google.com/p/ergoemacs/wiki/ErgoEmacs_keys_system_wide
此外,几年前我尝试了 mac 的操作系统范围的自定义键绑定,一些可可应用程序仍然不支持它。见底部
但也许现在情况好多了。
我也有一个 MS 自然键盘,非常棒。我已经设法训练自己使用左手的一侧(小指下方)按下 Ctrl 键。
即使在重新映射capslock成为之后control,你仍然必须用你的小指来按下它——至少我会这样做,因为我的无名指无法触及它来执行类似的命令C-g。根本不建议使用你的小指,对吧?
我在 MacBook Pro 上,我刚刚重新映射了⌘</KBD> on the right side of the keyboard to become control. So that way, for instance, C-g becomes a keystroke I execute with both hands, my right-hand thumb on ⌘</KBD> and my left forefinger on g.
我们会看看这对我的 RSI 是否有帮助。还有人这样做吗?
我在新机器上做的第一件事就是将 Caps Lock 重新映射到新的 Control。
谷歌,有很多.reg
可用的文件可以在 Windows 上为您轻松完成这项工作。
我开始用我的手边\手掌而不是我的小指来敲击控制键。我的理解是,在更符合人体工程学的键盘上,控制键按钮更大,这使得执行该动作更容易。
我可以在西或西南的位置使用 Control 键,没有任何问题。许多 Emacsers 发誓控制键只属于西位和西位,其他任何东西都会毁了你的小指。我们唯一确定导致 RSI 输入的原因是输入过多。试试 type-break-mode 看看是否有一些常规的休息有帮助。
购买一个在正确位置有 Ctrl 的Happy Hacking 键盘(Caps Lock 移到其他地方)。它具有出色的响应能力,并可通过 DIP 开关进行配置,以最大限度地集成在 Mac、Windows 和 Linux 上(例如,您可以直接从键盘切换 Alt 键和 Windows 键,无需软件)。
如果适合您的喜好,它的占地面积也很小。
由于该线程仍在进行中,因此我将加两分钱:
无论有没有 emacs,ctrl 键对 linux 或 windows 上的大量内容都很有用:复制、剪切、粘贴、查找、关闭、退出……我经常使用这些东西。所以正如其他人所建议的那样,我希望它靠近空格键,这样我就可以用我的拇指了。这就是 Mac 上默认的情况,所有这些东西都使用 cmd 键:
[ctrl] [alt] [cmd] [空格键]
所以,我在我的 linux 机器上使用 mac 键盘,并将 cmd 键设置为第二个 ctrl 键(在 Ubuntu Lucid 中:Keyboard Prefs > Layouts > Options > Alt/Win Key Behavior > Control is mapped to Win keys(并且常用的 Ctrl 键))
[ctrl] [alt] [ctrl] [空格键]
其他好处: * 当我有时需要使用 mac 时,剪切/粘贴/等都在我习惯的同一个地方。* ctrl+tab(使用真正的 ctrl 键)仍然在两个平台上通过浏览器和其他应用程序的选项卡移动。
这个计划的缺点是 alt 键移到了左边,所以 alt+tab 命令(我用来切换窗口)不再匹配 mac 等效的 cmd+tab。但我仍然可以用拇指敲打它,而且对我来说,它仍然比摧毁我的小指要小得多。是的,我知道我可以让 ctrl+tab 成为窗口切换器,但是真正的 ctrl 键不适用于选项卡切换。此外,随着应用程序进入浏览器,窗口/选项卡导航策略将在一段时间内不断变化——但像剪切/粘贴这样的基本功能不会随处可见,所以我希望它们被锁定。在我的拇指下。
(当然,如果你想在 mac 上使用 emacs,我想你会回到第一方......)
我实际上做了自己的破解以避免使用 ctrl 键。我现在使用空格键。 这个X 的小程序改变了空格键的行为,所以当它组合使用时,它会为其添加控制修饰符。单独使用时,它在释放时表现正常。这样你就不必使用你的小指了!非常适合我。
我不是程序员,我也很难解释想法。我在戴尔迷你笔记本电脑上。鼠标触摸板在我的拇指休息的地方。我的左触摸板按钮充当控制键:用拇指的一侧按下它并像往常一样在 emacs 中进行编辑。我打算将右侧触摸板按钮映射到 alt,但我做了以下操作:我按下按钮,控制键被按下(锁定)。我再次按下它并释放控制。这不仅让我的小指感觉更好,还让我的编辑速度提高了一倍。(根据我的组织模式时钟)很难解释它的工作原理。为了做到这一点,我使用了以下两个应用程序: 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 来做所有常规的事情,即 caps ---> control(不是完整的解决方案),交换 alt 和 control。(在笔记本电脑上没关系,但我的拇指抽筋)我使用窗口管理器配置文件(stumpwm)创建绑定以加载正确的键映射文件。(取决于我当天的心情)我相信这一切都可以在不同的环境中实现。我的粉红色疼痛消失了,我的编辑速度更快了。
试试还不错的God-Mode插件。
为了克服这个问题,我将所有的复制、粘贴、保存...等重新映射到小键盘中。为了进一步方便,我买了一个单独的小键盘并将其放在笔记本电脑键盘后面。
您可以使用 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:保存
等....
假设键盘左下角的键是控制键(适用于标准键盘),只需放下手掌就很容易按下 Ctrl 键。不涉及小指。它是如此简单和快速,我喜欢它。我只将小指用于 Ctrl 键上方的其他键(Shift、Caps 等)。对于左侧的 Alt、Windows 键、功能键(使用笔记本电脑时),我使用左手拇指(右手拇指用于空格)。对于包含 Ctrl 的热键组合,我使用 Ctrl 的方式相同。
我只使用右左 Ctrl 键。我使用 Right Ctrl 作为“超级”修饰符(在 autohotkey 中映射到 F23,然后在 emacs 中映射到 supper)。
起初按这种方式按 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)