【问题标题】:Emacs on Mac OS X Leopard key bindingsMac OS X Leopard 上的 Emacs 键绑定
【发布时间】:2010-09-14 20:12:57
【问题描述】:

我是 Mac 用户,我决定学习 Emacs。我read 表示,为了减少手部压力并提高准确性,应该交换 CTRL 和 CAPS LOCK 键。如何在 Leopard 中执行此操作?

另外,在终端中,我必须使用 ESC 键来调用元。有什么方法可以让 alt/option 键来调用 meta 吗?

更新:虽然现在控制键更容易按下,但元键也经常使用,因此它在我的 MacBook 和 Apple 键盘上的位置也值得关注。事实上,我发现控制键实际上更容易被击中,所以我重新映射了我的控制键以充当元键。有没有人有更好/更标准的解决方案?

【问题讨论】:

标签: macos emacs keyboard-shortcuts key-bindings


【解决方案1】:

交换 CTRL 和 CAPS LOCK

  1. 进入系统偏好设置
  2. 进入键盘和鼠标首选项面板
  3. 在键盘选项卡中,单击修改键...
  4. 交换 Caps Lock 和 Control 的操作。

使用 ALT/OPTION 作为 META

  1. 在菜单栏中,单击终端
  2. 点击首选项...
  3. 在设置标签下,转到键盘标签
  4. 选中标记为使用选项作为元键的框

就是这样!你应该在成为 Emacs 大师的路上顺利!

【讨论】:

  • '使用选项作为元键'确实有效,但这导致我无法输入大括号和管道'[]{}|'等等,因为它们现在在 Option-7 和选项上......很好地映射到元。有什么想法吗?
  • @wic:那些角色不是有自己的钥匙吗?
  • 欧洲没有。使用挪威键盘,它们被映射到 alt- 8 和 9 以及 alt+shift- 8 和 9。
  • 编码时切换布局。然后他们得到他们应该得到的自己的钥匙。我是瑞典人,在编码时我从不觉得需要输入母语字符。
  • @hhh 这些设置是针对每个键盘的,因此请确保您已为外部键盘正确设置。但是,是的,一旦你做出改变,它应该可以在 OS X 的任何地方工作。
【解决方案2】:

另一个答案非常完整,但另外我要提到我只是设置了大写锁定 键到第二个控制键,而不是交换它们。

此外,您会注意到 Mac OS X 中的大多数文本输入字段 已经接受 emacs 击键(^A 行首、^E 行尾、^P、^N、^K、^Y 等)

祝你好运

【讨论】:

  • 你可能正在做点什么——我不记得我上次使用大写锁定是什么时候了。
【解决方案3】:

(不是符合人体工程学的键盘,但我真的很喜欢按键的行程和手感,并且 Control 键、Caps Lock 被交换了)。

http://matias.ca/osxkeyboard/index.php

【讨论】:

    【解决方案4】:

    如果您通过 ssh 连接或通过不在本地计算机上的机器使用 emacs,则向上/向下翻页按钮会在终端缓冲区中滚动 - 根据我的经验,它并没有太大帮助。

    您可以设置向下翻页和向上翻页按钮以向 emacs 发送适当的命令。在 emacs 中,您可以像这样滚动浏览 emacs 缓冲区:

    • 上一页:Ctl-v
    • 向下翻页:Esc-v

    因此,要让终端将这些命令发送到 emacs,请按照上述说明更改 Meta 的 Alt 键。但是,不要设置“将选项用作元”选项,而是找到“向下翻页”和“向上翻页”选项。

    向下翻页

    双击“向下翻页”选项进行编辑。将 Action 更改为 "send string to shell" 并输入 \026 作为字符串。保存它。

    上一页

    双击“向上翻页”按钮进行编辑。将 Action 更改为 "send string to shell" 并输入 \033v 作为字符串。保存它。

    【讨论】:

      【解决方案5】:

      不确定您是否完全同意从终端使用 Emacs,但另一种选择是使用 Carbon Emacs(我最喜欢)和 Aquamacs(非常类似于 Mac)。 Carbon Emacs 对 meta 使用 command 键,这很好,因为您可以通过按住 Control 和 Command 来执行 Control-Meta 命令,而不是先按 Escape 然后按 Control 键序列。

      另外,如果您是一名认真的 Emacs 用户,我强烈建议您使用适合编程的键盘(即完全可自行重新编程的键盘)。我用的是 Kinesis,虽然有点小贵,但是非常耐用而且非常好。

      【讨论】:

        【解决方案6】:

        作为参考,这里是用于移动文本的键绑定:

        ⌥ + ← - 左移一个单词
        ⌥ + → - 右移一个单词
        ⌥ + delete - 返回删除一个单词
        Shift + ⌥ + delete - 向前删除一个单词
        ⌥ + ↑ - 向上移动一个段落
        ⌥ + ↓ - 下移一个段落
        ⌘ + ← - 移到当前行的开头
        ⌘ + → - 移动到当前行的末尾
        Shift + 任何上述扩展选择适当的量

        单击然后拖动 - 选择文本
        双击然后拖动 - 选择文本,换行到单词结尾
        三击然后拖动 - 选择文本,换行到段落结尾

        Shift + 用鼠标选择文本 - 添加到选择(连续)
        ⌘ + 用鼠标选择文本 - 添加到选择(非连续)
        ⌥ + 拖动 - 选择矩形区域(不连续)
        ⌘ + ⌥ + 拖动 - 将矩形区域添加到选择中
        拖动选择 - 移动文本
        ⌥ + 拖动选择 - 复制文本

        Ctrl + A - 移动到当前段落的开头
        Ctrl + B - 向左移动一个字符
        Ctrl + D - 向前删除
        Ctrl + E - 移动到末尾当前段落
        Ctrl + F - 向右移动一个字符
        Ctrl + H - 删除Ctrl + K - 删除当前段落的剩余部分
        Ctrl + L - 使窗口居中当前行
        Ctrl + N - 下移一行
        Ctrl + O - 插入光标后换行
        Ctrl + P - 上移一行
        Ctrl + T -转置(交换)两个周围的字符
        Ctrl + V - 移动到末尾,然后离开一个字符
        Ctrl + Y - 粘贴之前用 Ctrl 删除的文本 - K

        添加 Option 到 Ctrl + F 或 Ctrl + B 移动一次一个单词而不是一个字符。

        【讨论】:

        【解决方案7】:

        就我个人而言,我已经设置了 caps lock 以在系统首选项上的行为类似于命令,然后在我的 emacs init.el 文件中具有:

        (setq mac-command-modifier 'ctrl)

        这让我可以在大多数 osx 应用程序中使用 caps lock 作为命令,并在 emacs 中作为控件使用。对我来说效果很好。

        【讨论】:

          【解决方案8】:

          我真的很喜欢 Kyle Cronin 提供的答案,但我想补充一件事 - 确保选择合适的键盘以使其正常工作。如果您的笔记本电脑中插入了外接键盘,那么还有一个额外的下拉框,您需要为两个键盘(或至少为您的外接键盘)执行此操作。下面的屏幕截图显示了“选择键盘”对话框——我选择了“Joint Mac 键盘”,这是 MacBook 对 GoldTouch 外接键盘的说法——默认是内置键盘。

          一旦我想通了 - 这对我很有用!

          【讨论】:

            【解决方案9】:

            我已经创建了一套相当全面的绑定here 供终端外部使用。

            就个人而言,由于没有正确的控制键,我无法使用 mac 笔记本电脑键盘。

            相反,我已经使用Microsoft Natural Ergonomic Keyboard 4000 超过 7 年了:它真的很胖,Ctrl 和 Alt 键的位置很好,在downloading its drivers 之后,“开始”和“应用程序”键被简单地重新映射到Mac Cmd 键,也很胖,很容易被压住。

            为了避免 emacs 人体工程学问题,我训练自己使用 Ctrl、Alt 和 Cmd,就像我们使用 Shift 一样 - 用与键入实际键的那只手相反的手按下它们。 (也就是说,我只是保持 Caps Lock 不变。)

            【讨论】:

              【解决方案10】:

              这个帖子是 5 年前开始的,没有提到 ns-win.el 或 build --with-ns。以下是截至 2013 年 10 月 Emacs Trunk 中可用的所有键绑定(开箱即用)。当然,您可以创建自己的。就我个人而言,我有一个init.el,其中包含我所有的键绑定,可以通过 OSX 上的 Parallels 与 Windows XP 一起使用,也可以与 OSX 本机一起使用。由于用户可以定义他/她自己的键盘快捷键,我认为不需要在系统偏好设置中重新映射键盘(使用 Apple 美国键盘)除非使用不包含 Command 键的键盘.但是,我会扔掉那些内置了 trackpoint 的 IBM clicky 键盘吗?当然不是。 :) 我带着我的 IBM clicky 键盘进入下一个生活。任何手部拉伤很可能是由不正确的手腕/手臂/肘部位置引起的,而不是由于击中控制与大写锁定。通过练习提高准确性,并在老板的帮助下从你的肩膀上观察你的进展情况——即提高工作效率的一点压力:)

              (define-key global-map [?\s-,] 'customize)
              (define-key global-map [?\s-'] 'next-multiframe-window)
              (define-key global-map [?\s-`] 'other-frame)
              (define-key global-map [?\s-~] 'ns-prev-frame)
              (define-key global-map [?\s--] 'center-line)
              (define-key global-map [?\s-:] 'ispell)
              (define-key global-map [?\s-?] 'info)
              (define-key global-map [?\s-^] 'kill-some-buffers)
              (define-key global-map [?\s-&] 'kill-this-buffer)
              (define-key global-map [?\s-C] 'ns-popup-color-panel)
              (define-key global-map [?\s-D] 'dired)
              (define-key global-map [?\s-E] 'edit-abbrevs)
              (define-key global-map [?\s-L] 'shell-command)
              (define-key global-map [?\s-M] 'manual-entry)
              (define-key global-map [?\s-S] 'ns-write-file-using-panel)
              (define-key global-map [?\s-a] 'mark-whole-buffer)
              (define-key global-map [?\s-c] 'ns-copy-including-secondary)
              (define-key global-map [?\s-d] 'isearch-repeat-backward)
              (define-key global-map [?\s-e] 'isearch-yank-kill)
              (define-key global-map [?\s-f] 'isearch-forward)
              (define-key global-map [?\s-g] 'isearch-repeat-forward)
              (define-key global-map [?\s-h] 'ns-do-hide-emacs)
              (define-key global-map [?\s-H] 'ns-do-hide-others)
              (define-key global-map [?\s-j] 'exchange-point-and-mark)
              (define-key global-map [?\s-k] 'kill-this-buffer)
              (define-key global-map [?\s-l] 'goto-line)
              (define-key global-map [?\s-m] 'iconify-frame)
              (define-key global-map [?\s-n] 'make-frame)
              (define-key global-map [?\s-o] 'ns-open-file-using-panel)
              (define-key global-map [?\s-p] 'ns-print-buffer)
              (define-key global-map [?\s-q] 'save-buffers-kill-emacs)
              (define-key global-map [?\s-s] 'save-buffer)
              (define-key global-map [?\s-t] 'ns-popup-font-panel)
              (define-key global-map [?\s-u] 'revert-buffer)
              (define-key global-map [?\s-v] 'yank)
              (define-key global-map [?\s-w] 'delete-frame)
              (define-key global-map [?\s-x] 'kill-region)
              (define-key global-map [?\s-y] 'ns-paste-secondary)
              (define-key global-map [?\s-z] 'undo)
              (define-key global-map [?\s-|] 'shell-command-on-region)
              (define-key global-map [s-kp-bar] 'shell-command-on-region)
              ;; (as in Terminal.app)
              (define-key global-map [s-right] 'ns-next-frame)
              (define-key global-map [s-left] 'ns-prev-frame)
              
              (define-key global-map [home] 'beginning-of-buffer)
              (define-key global-map [end] 'end-of-buffer)
              (define-key global-map [kp-home] 'beginning-of-buffer)
              (define-key global-map [kp-end] 'end-of-buffer)
              (define-key global-map [kp-prior] 'scroll-down-command)
              (define-key global-map [kp-next] 'scroll-up-command)
              
              ;; Allow shift-clicks to work similarly to under Nextstep.
              (define-key global-map [S-mouse-1] 'mouse-save-then-kill)
              (global-unset-key [S-down-mouse-1])
              

              【讨论】:

                【解决方案11】:

                你的快乐才刚刚开始。其他技巧包括:

                • 使用左右 Shift 键也可以是 ( 和 ) 以便快速键入。
                • 将您的 fn 键或其他键重新映射为“超级”。
                • 控制大写锁定,但只能使用另一个键。它本身就是一种逃避。

                阅读http://stevelosh.com/blog/2012/10/a-modern-space-cadet/ 上的精彩文章以获取更多信息。

                【讨论】:

                • 这太棒了!谢谢!我什至没有想过为大写锁定按钮做那个条件逻辑。好恶心!
                【解决方案12】:

                我在系统偏好设置中设置了 caps lock 来控制,并且我在 init.el 中有以下内容来将命令设置为 meta 并将选项设置为 super:

                (custom-set-variables
                 '(ns-alternate-modifier (quote super))
                 '(ns-command-modifier (quote meta)))
                

                【讨论】:

                  【解决方案13】:

                  我想推荐两个软件 Seil 和 Karabiner。通过简单地安装 Seil 并按照软件中的说明进行操作,您应该能够实现您想要的。根据我的经验,Karabiner 更强大。我有一个日文键盘,其布局与普通键盘不同。我有一些 snippet 将我键盘上的两个额外键重新映射到 F18 和 F19 以供其他用途。您可以使用相同的语法来编辑您的“private.xml”文件以执行更多操作。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2010-12-15
                    • 1970-01-01
                    • 2010-12-12
                    • 2010-11-24
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多