Mac OS X Leopard按键绑定上的Emacs


104

我是Mac用户,因此决定学习Emacs。我读过,为减少手部压力并提高准确性CTRLCAPS LOCK应该更换和键。如何在Leopard中做到这一点?

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

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


4
最好是将其移动到了apple.stackexchange.com
yetanothercoder

Answers:


163

交换CTRL和CAPS锁定

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

替代文字

使用ALT / OPTION作为META

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

替代文字

而已!成为Emacs大师时,您应该做得很好!


8
“将选项用作元键”确实有效,但是这导致我无法键入大括号和竖线“ [] {} |” 等等,因为它们在Option-7上,并且现在在Option上...可以映射到meta。有任何想法吗?
Martin Wickman

1
@wic:这些字符没有自己的键吗?
凯尔·克罗宁

1
在欧洲没有。使用挪威语键盘,它们映射到alt-8和9以及alt +
shift

3
编码时切换布局。然后他们会像应该的那样获得自己的密钥。我是瑞典人,我从没发现在编码时需要键入本机字符。
Per Wiklander 2011年

1
@hhh设置是按键盘进行的,因此请确保已为外部键盘正确设置。但是,是的,一旦你做出改变,就应该到处在OS X
凯尔·克罗宁

47

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

+ -向左移动一个单词
+ -向右移动一个单词
+ 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

OptionCtrl+ FCtrl+一次B移动一个单词而不是一个字符。



3
Ch确实在bash和Mac OS X Cocoa文本框中删除了,但是在emacs中确实有帮助。
asmeurer 2012年

11

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

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

祝好运


6
您可能会遇到一些麻烦-我不记得上一次用户使用大写锁定了。
凯尔·克罗宁

11

我真的很喜欢Kyle Cronin提供的答案,但是我想补充一件事-确保您选择合适的键盘才能正常工作。如果笔记本计算机已插入外部键盘,则还有一个下拉框,您需要对两个键盘(或至少对外部键盘)都这样做。下面的屏幕快照显示了“选择键盘”对话框-我选择了“ Joint Mac Keyboard”,这是MacBook所说的GoldTouch外接键盘的方式-默认是内置键盘。
屏幕快照显示“选择键盘”对话框

一旦我弄清楚了-这对我来说非常有用!


9

如果您通过ssh连接或不在本地计算机上的计算机上使用emacs,则向上翻页/向下翻页按钮会在终端缓冲区中滚动-以我的经验来说,不太有用。

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

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

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

向下翻页

双击“向下翻页”选项进行编辑。将操作更改为“将字符串发送到外壳”,然后输入\ 026作为字符串。保存。

向上翻页

双击“向上翻页”按钮进行编辑。将操作更改为“将字符串发送到外壳”,然后输入\ 033v作为字符串。保存。


7

不知道您是否完全同意在终端上使用Emacs,但是另一种选择是使用Carbon Emacs(我最喜欢的)和Aquamacs(非常类似于Mac)。Carbon Emacs将命令键用于meta,这很好,因为您可以通过按住Control和Command的方式来执行Control-Meta命令,而不是先按Escape键再按控制键序列。

另外,如果您是Emacs的认真用户,我强烈建议您使用适合编程的键盘(即完全可以自行重新编程的键盘)。我使用Kinesis,有点花钱,但它们非常耐用且非常好。


4

就我个人而言,我具有设置大写锁定,使其在系统首选项上的行为类似于命令,然后在我的emacs init.el文件上具有:

(setq mac-command-modifier'ctrl)

这使我可以在大多数osx应用程序中将大写锁定用作命令,并在emacs中用作控制。对我来说效果很好。


4

您的喜悦才刚刚开始。其他技巧包括:

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

阅读http://stevelosh.com/blog/2012/10/a-modern-space-cadet/上的优秀文章,了解更多信息。


太棒了!谢谢!我什至没有想到对capslock按钮执行这种条件逻辑。真恶心!
wle8300 '16

3

该线程开始于5年前,没有提及ns-win.el或构建--with-ns。这是截至2013年10月为止Emacs Trunk中所有可用的(现成的)键绑定。当然,您可以创建自己的键绑定。就个人而言,我的init.el所有键绑定都可以通过OSX上的Parallels与Windows XP一起使用,也可以与OSX本机一起使用。由于用户可以定义他/她自己的键盘快捷键,因此我认为不需要在系统偏好设置中重新映射键盘(使用Apple US键盘),除非使用不包含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])


0

我在这里创建了一套相当全面的绑定供终端之外使用。

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

取而代之的是,我已经使用Microsoft Natural Ergonomic Keyboard 4000超过7年了:它确实很胖,并且放置的Ctrl和Alt键位置正确,并且在下载了其驱动程序后,“开始”和“应用程序”键都被轻松地重新映射到了Mac Cmd键,它也很胖,很容易沮丧。

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


0

我设置了大写锁定来控制系统首选项,并且在init.el中有以下内容将命令设置为meta并将option设置为super:

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

0

我想推荐2个软件 SeilKarabiner。只需安装Seil并按照软件中的说明进行操作,您就可以实现所需的功能。根据我的经验,Karabiner更强大。我有一个日文键盘,其布局与普通键盘不同。我有一些代码片段将键盘上的两个额外键重新映射到F18和F19,以供其他使用。您可以使用相同的语法来编辑“ private.xml”文件以执行更多操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.