分享 Emacs 按键之乾坤大挪移

zw963 · 2012年03月31日 · 最后由 liuw 回复于 2012年09月24日 · 22674 次阅读

发我之前博客上的一篇老贴, 原本准备贴到 emacer.com, 我通过邮件发送了这篇文章的 org-mode 源码给了管理员, 可是一直没动静, 邮件问了两次, 也没给我明确答复. 直到大概八个月之后, 我收到了他的一封邮件, 告诉我这个这个文章太简单了, 不符合条件, 我晕~~

这里再重新贴一次. 主要是这篇帖子在快捷键方面的表达了我的 Emacs 配置的一些基本理念吧.现在很多方面比当时已经复杂很多很多了. 不过快捷键的部分仍然是通用的. 而这一部分也 (应该) 是初次接触 Emacs 的新人最希望了解的部分吧.

而且一两天准备上传我的全套 Emacs 配置, 先读一读这个, 肯定容易上手的多, 就当提前做个铺垫吧

因为 org-mode 转化到 markdown-mode, 太费劲儿, 所以简单的编辑了下, 先凑合合看. 看不懂也没关系, 你真正看代码, 就知道定制自己的 Emacs 有多简单了. (你甚至不需要任何 lisp 知识, 就可以几乎实现一切.

Emacs 按键之乾坤大挪移

引子

使用 Emacs 不知不觉已经半年多了.最初 Emacs 进入我的视野,还是因为 VI 的缘故.

一再听说 VI 作为 UNIX 下的一大神器如何如何, 一直心向往之! 2011 年春节过完年那会儿开始,下决心一定要熟练的使用 VI, 我甚至专门打印了 VI 的按键图, 并贴在电脑面前的墙上, 当时就抱着本 O'reilly 出版的 Learning the vi and Vim Editors 啃个大半个月, 结果除了会用 HJKL(还不太熟), 完全没有感觉, 使用 VI, 给我的感觉就是: 总是想起不来该按那个键 (这可能是所有 Vi 新人的感受吧), 完全不着调. 也许是在 Windows 下混太久了, 手部肌肉无法适应这种操作方式, 我想很重要的一个原因,受 Windows 的组合快捷键体系影响太深了吧. 因此当时也就没有坚持下来, 结果导致 VI 半途而废吧. 不过没有这个半途而废, 也就没有现在这篇帖子了.

但是现在我知道, 其实还有一个更重要的原因: 而且

当时,抱着 VI 铁打不换的心理,想试试 Emacs 到底是什么样子的. 结果大家都知道了, 一发不可收拾, 从我开始尝试 Emacs 那天起, 我没有一天不鼓捣一会儿 Emacs, 从最简单的显示设置, 到开始尝试自定义按键,再到后来的 org-mode, GTD, ido, w3m, plantuml 等等,兴趣越来越浓厚,不可自拔的陷入了 Emacs 的洪流中, 在不断的尝试过程中, 我深深感受到了自由的力量,以及 Emacs 的高度可定制及博大精深 (虽然我还很菜,甚至 LISP 也只是刚刚入门).

说了这么多, 其实我只是想从不同的角度来表达自己的一个观点:

VI 及 Emacs 给人的感觉是那样的完全不同, Vi 的操作方式可以用千篇一律来形容, 如果你无法高效率的驾驭它, 你会感觉到深受约束. 他的学习曲线是那样的陡峭, 以至于大多数人都会在面对 Vim 的时候最终望而却步. 而 Emacs 与 Vim 是那么的不同, 以至于每个人都会有一个属于自己的, 完全不一样的 Emacs.

所以我认为, 网上流传的, 这个世界上只有两种编辑器, 一个叫做 Vi, 另一个叫做 Emacs(包括 textmate 等, 都算), 这个说法我是很认同的.

以至于我认为, 两者一定有一个更适合你, 更极端点说, 如果你一开始就深深的喜欢其中一个, 那另一个必定非常不习惯, 很难适应.所以,我建议,有兴趣的朋友不妨两个都试过后, 再来选择吧.

对于我来说: 应该是骨子里的性格决定了最终我选择了 Emacs.

不过, 而作为一个程序员而言, Emacs 的包容万象 (emacs wiki 几乎有你想到的一切解决方案) 以及一体式操作界面, 很显然是更好的选择. 而 VI 则更似乎适合于在纯文本终端(text-terminal) 下编辑系统脚本, 是 linux 下系统管理员的最佳选择. (不过自从有了 emacs daemon, Emacs 启动慢这顶帽子, 彻底被摘去了. 所有文件都是秒开~~ 我觉得除了特殊的情况下 (例如某些嵌入式系统) 无法运行 Emacs, 其他情况下, Emacs 一点也不比 VI 差这一点, 这篇文章你看到后面就知道.)

为什么要重新定义快捷键

以上一大堆废话,是菜鸟讲给菜鸟听的, 老鸟可以无视之.下面言归正传.

正如标题所述,这篇文章主要是讲 Emacs 的快捷键设置.

我想很多新手一定和我一样,刚开始使用 Emacs,很多快捷键很不适应. Emacs 的默认快捷键布局也的确有很多不和谐的地方,以下列出一些我认为很不好的地方.

  • 太多的键了 Ctrl,长时间使用会使左手的小手指很不舒服.据说 Emacs 发明那会儿的键盘,Ctrl 键的位置其实在现在键盘 Alt 键的位置, 那明显用 Alt 比用 Ctrl 输入,一点都不奇怪了.

  • 某个组合键对于东方人种的小手来说,间距貌似有点远.

  • 对于我这种习惯于使用键盘左侧功能键的用户 (多数都是吧?) 有些键不是一般的绕.....

而我重新设定大量快捷键所遵循的标准如下:

  1. 四个手指尽量不离开或者少离开键盘标准位置.

  2. 因为我经常在纯文本终端下使用 Emacs, 需要保证快捷键在图形 Terminal 下和 console 下的文本终端下, 常用组合键都尽可能一致.

  3. 保证在所有平台 (WIN32,X,Console) 按键的一致性.

  4. 尽量少用 Ctrl, 多用 Alt. (__备注:自从将 Ctrl 换到 Capslock 位置之后, 用 Ctrl 更多了, 即回归了 Emacs 的标准使用方式)

以下所讲的快捷键主要是根据个人的喜好,针对默认快捷键做了大幅的修改. 个人认为, 至少在两点上对于新手来说上手的确应该比默认容易的多, 而且, 键位更加合理, 有效. 适合长时间写作.

假设你已经掌握了以下知识

  • 你可以熟练的盲打.并且知道标准盲打你的手指该放的位置.

  • 这篇文章中,用到的功能键前缀约定.

| 简写 | 表达的组合键 | |------+-------------------------------------------------------------------------------------| | C-c | 表示 Ctrl-c, 指按下 Control 同时再按下 c, 如果是 C-c C-f, 表示按下 Ctrl 不放, 先按 c, 再按 f | |------+-------------------------------------------------------------------------------------| | M-c | 表示 Meta-c, Meta 就是键盘上的 Alt 键 | |------+-------------------------------------------------------------------------------------| | C-C | 表示 Ctrl-大写的 C, 即 Ctrl-Shift-c |

  • 修改建个人配置文件

如果你运行过 Emacs,在你的家目录一定会存在一个.emacs.d 目录. 首先使用你熟悉的编辑器, VI 也好, nano, ed, cat 也行, 无论什么办法, 在.emacs.d 目录下创建两个文件

  • ~/.emacs.d/init.el, 内容如下:

;;; init.el --- Where all the magic begins        # => ; 在lisp中表示注释.

(if (file-exists-p "~/.emacs.d/.emacs") (load "~/.emacs.d/.emacs")) # => 如果存在~/.emacs.d/.emacs, 则调用它.

;;; init.el ends here







  • ~/.emacs.d/.emacs, 内容如下:
;; -*-Emacs-Lisp-*-

;; 你如果按下M-RET, 其实相当于按下了C-j.
(define-key key-translation-map [(meta ?\r)] [(control j)])
(define-key key-translation-map [(meta return)] [(control j)])
;; 你如果按下C-j, 其实相当于按下了C-S-j, 有特殊用途.
(define-key key-translation-map [(control j)] [(control J)])
(define-key key-translation-map [(control l)] [(control L)])

;; 下面这两个键模拟Vi的光标不动屏幕动效果, 我很喜欢, 几乎总在使用.
(global-set-key [(meta n)] 'window-move-up)        
(global-set-key [(meta p)] 'window-move-DOWN)
;; 同上, 但是是另一个buffer窗口上下移动. 常常查看帮助用这个.
(global-set-key [(control N)] 'other-window-move-down)
(global-set-key [(control P)] 'other-window-move-up)

;; C-l 向右移动一个字符, C-j向左移动一个字符.
(global-set-key [(Control l)] 'forward-char) 
(global-set-key [(Control j)] 'backward-char)

;; M-l 向右移动一个单词, M-j向左移动一个单词.
(global-set-key [(meta l)] 'forward-word)
(global-set-key [(meta j)] 'backward-word)

;; 上下翻页, M-v, M-q.
(global-set-key [(meta v)] 'scroll-up)
(global-set-key [(meta q)] 'scroll-down)

;; 行首, 设定mark以及行尾.
(global-set-key [(meta \1)] 'move-beginning-of-line)
(global-set-key [(meta \2)] 'set-mark-command) 
(global-set-key [(meta \3)] 'move-end-of-line)

;; 切换buffer, 由默认的C-x b换成了C-x n.
(global-set-key [(control x) (n)] 'switch-to-buffer)

;; 演示了如何定义一个新的按键前缀. 这里定义了M-c作为按键前缀.
(define-prefix-command 'meta-c-map)
(global-set-key [(meta c)] 'meta-c-map)

;; 演示了如何在一个模式下(这里是isearch模式), 定义快捷键. 退出isearch-mode, 所有按键失效.
(add-hook 'isearch-mode-hook
'(lambda ()
(define-key isearch-mode-map [(meta n)] 'isearch-repeat-forward)
(define-key isearch-mode-map [(meta p)] 'isearch-repeat-backward)
(define-key isearch-mode-map [(control r)] 'isearch-query-replace)
(define-key isearch-mode-map [(meta 5)] 'isearch-query-replace-regexp)
(define-key isearch-mode-map [(meta f)] 'isearch-yank-word-or-char)
(define-key isearch-mode-map [(meta y)] 'isearch-yank-kill)
(define-key isearch-mode-map [(meta k)] 'isearch-yank-line)
(define-key isearch-mode-map [(hyper l)] 'isearch-yank-char)
(define-key isearch-mode-map [(hyper j)] 'isearch-delete-char)
(define-key isearch-mode-map [(meta o)] 'isearch-occur)
(define-key isearch-mode-map [(meta w)] 'isearch-forward-word)
(define-key isearch-mode-map [(meta s)] 'isearch-repeat-forward)
))

;; ------------------------------下面是上面用到的函数定义------------------------------

(defun window-move-up (&optional arg)
"Current window move-up 2 lines."
(interactive "P")
(if arg
(scroll-up arg)
(scroll-up 2)))

(defun window-move-down (&optional arg)
"Current window move-down 3 lines."
(interactive "P")
(if arg
(scroll-down arg)
(scroll-down 3)))

(defun other-window-move-up (&optional arg)
"Other window move-up 1 lines."
(interactive "p")
(scroll-other-window arg))

(defun other-window-move-down (&optional arg)
"Other window move-down 2 lines."
(interactive "P")
(if arg
(scroll-other-window-down arg)
(scroll-other-window-down 2)))
#+end_src





有了以上两个文件,你就可以使用 Emacs 开始基本的工作了.

光标移动相关的快捷键

功能 默认快捷键 改动后的快捷键 函数
向右移动一个字符 C-f C-l forward-char
------------------+------------+----------------+---------------
向右移动一个单词 M-f M-l forward-word
------------------+------------+----------------+---------------
向左移动一个字符 C-b C-j backward-char
------------------+------------+----------------+---------------
向左移动一个单词 M-b M-j backward-word
------------------+------------+----------------+---------------
  • 其实对于多数人来说, C-f 和 C-b 还好了, 不难受, 不过 C-f 对于手小一点的使用者, 的确时间长了有点累, 而 C-b, 因为我自己使用笔记本电脑, 而且我不用鼠标,主要使用键盘中间的指点杆, 按下 b 键的时候, 总是碰小红帽, 不是很舒服, 改成这两个快捷键以后,彻底释放了左手,左手只需要管一个 Ctrl, 而右手单手操作 C-n, C-p, C-j, C-l.也许有些使用者会说,C-j 和 C-;不是更好么? 使用起来感觉更像 VIM 了.我最初也是这样设定的, 不过后来到文本终端下, 发现 C-;是无效的按键, 所以选择了 C-l.

  • 因为 C-j 与 C-l 在很多 Emacs 的模式下都进行了重定义,为了一劳永逸,我使用了一个技巧,就是将 C-l,C-j 使用 key-translation-map 重新定义了这两个键的 keymap, 这两个键在任何模式都映射到 C-L, C-J, 然后对 C-L, C-J 再重新定义为左右移动的快捷键. 而默认的 C-j(linux, 通常用于换行), 我直接映射到了alt+回车, 如果你希望像之前 C-j 那样换行, 不得不按下alt-回车,否则 只可能是向左移动一个字符.

窗口移动快捷键

功能 默认快捷键 改动后的快捷键 函数
向下翻页 C-v M-v scroll-up
------------------------------+------------+----------------+------------------
向上翻页 M-v M-q scroll-down
------------------------------+------------+----------------+------------------
光标位置不变,内容向上移动 2 行 C-u 2 C-v M-N window-move-up
------------------------------+------------+----------------+------------------
光标位置不变,内容向下移动 3 行 C-u 3 M-v M-P window-move-down
------------------------------+------------+----------------+------------------
  • 基于对称才合理的理论, 左手按下 M-v,M-q 正好对应于右手 M-n, M-p, 而 M-N, M-P, 主要用于操作另一窗口的上下移动, 后面两个我自己重写的函数,其实就是命令不同形式的打包而已, 具体效果很难说清, 如果你用过 VIM, 类似于^Y 与^E 了, 你可以照着默认键试试就明白了.
功能 默认快捷键 改动后的快捷键 函数
设定标记 C-空格 M-2 set-mark-command
------------+------------+----------------+------------------------
移动到行首 C-a M-1 move-beginning-of-line
------------+------------+----------------+------------------------
移动到行尾 C-e M-3 Move-end-of-line
------------+------------+----------------+------------------------
标记单词 [email protected] M-f mark-word
  • 地球人都知道,C-space 在 WIN32 下是不可用的. 也许你会说,还有 [email protected]可以用呀!, 相信我,[email protected]不管你双手怎么按, 都是别扭. M-2 就不一样了.你不妨像我一样, 大拇指按着左边的 Alt,然后中指或无名指按下 2 键,是不是很简单? 例如, 打算标记从光标到行尾, M-2, 3,也就是按着 Alt 不放,按下 2,3 就可以了, 到行首自然就是 M-2, M-1 喽.

高级功能,isearch 模式快捷键的重新设定

首先说明,一下快捷键都是只在 isearch 模式下有效.要随时注意模式条上 isearsh 的标记.

功能 快捷键 函数
搜索下一个结果 M-n repeat-forward
-------------------------------------------+---------+--------------------------
搜索前一个结果 M-p repeat-backward
-------------------------------------------+---------+--------------------------
正则替换 M-5 query-replace-regexp
-------------------------------------------+---------+--------------------------
将光标到行尾作为搜索内容 C-k isearch-yank-line
-------------------------------------------+---------+--------------------------
剪切板作为搜索内容 C-y isearch-yank-kill
-------------------------------------------+---------+--------------------------
向左或向右 (选择/取消) 单个字符作为搜索内容 C-l/C-j isearch-yank/delete-char
-------------------------------------------+---------+--------------------------
向左或向右 (选择/取消) 单个单词作为搜索内容 M-l/M-j
-------------------------------------------+---------+--------------------------
显示 occur 视图 C-o isearch-occur
-------------------------------------------+---------+--------------------------
单词搜索 M-w isearch-word
-------------------------------------------+---------+--------------------------
  • 默认的快捷键搜索, 感觉很是绕手, 还好, 我们使用的 Emacs. 只有你想不到, 没有做不到.

  • 下面把我使用 isearch 的流程按照图片的形式显示出来.会更直观.用好 M-n M-p,会使搜索更有效率. isearch 快捷搜索示意图:

    小结

还有两句有必要说下: #+begin_src emacs-lisp (define-prefix-command 'meta-c-map) (global-set-key [(meta c)] 'meta-c-map) #+end_src

以上表示,定义 M-c 作为新的按键序列前缀.这样,我们可以方便定义 M-c a M-c b 等等, 我新定义了这个 M-c 前缀,主要是把跟编程有关的命令都单独定义在这个按键序列中, 你也可以自己这样做.当然,不一定非要 M-c.谁说 M-o 不可以?

以上只是简单的介绍了一下这半年来本人有关 Emacs 快捷键的心得体会.

当然本人对快捷键的改动及新增远远不止这些,但是以上代码这些足够给 Emacs 新手足够的提示, 去自己修改属于自己的按键序列.

有什么不合适或不对的地方,欢迎指正.有任何建议,欢迎提出!

匿名 #1 2012年03月31日

这东西强大了,占楼支持 zhuxi

M-c不好按,推荐M-s,在 home row 大拇指按住 alt 其它手指不用动,本身键位上只在某些 mode 里 bind 到 search history forward,但一般我们只会用到 search history backward

匿名 #3 2012年03月31日

其实还有很多人 Vim,Emacs 双休。本人 Eclipse + Vrapper 天天用(工作),Emacs 夜夜用(业余)。

匿名 #4 2012年03月31日

不动光标滚动屏幕非常棒,在 Vim 经常使用

#4 楼 @hbin 嗯, M-p,M-p,C-n,C-p 我用的特别频繁. 事实上, 我把我可以遇到的所有模式的 m-p,m-n 都改为不动光标滚动屏幕. 反正 Emacs 里面那种不统一的部分, 我能换的全换了, 只要定义好了, 某个键几乎在所有模式下都是类似的功能.

#4 楼 @hbin 我也准备偷走,不过 M-n M-p好像容易冲突

默认的 M-r 也可以光标不动,屏幕在 top, middle, bottom 三个位置切换,不过我把这个键给 bind 到word-backward-kill

#6 楼 @doitian

没有的. 基本上大多数模式, 这两个键都是留给用户自己定义的. 偶尔有些怪怪的模式, 会使用 m-n,m-p 其中之一. 改过来就是了. 只有极少的模式, 会使用 m-n,m-p 作为翻页,换行之类的. 例如 e-shell, 我把 meta-n,p 和 ctrl-n,p 换过来就是了. 实在不行,原来 M-n, M-p 你可以用上下箭头代替嘛.

#9 楼 @doitian

meta-backspace, 不就是 backward-delete-word, 这不是有点多余么.

backward 方式最有用的是 upcase.

我输入 Ruby 内的常量, 从来不按 Capslock, (Capslock 让我换成 Ctrl 了), 从来都是哗哗写完一堆, 然后连续按下几个 M-u, 光标之前的英文就变成大写了. M-U 我绑成了 backward-capitalize-word.

#10 楼 @zw963 M-r按得快,M-u绑定在输入下划线, M-l绑定成输入连字符,有 prefix 的时候还是会调用原来的 upcase 和 downcase

匿名 #13 2012年03月31日

#5 楼 @zw963 #6 楼 @doitian M-n M-p 已经被我映射为 Vim 的 * 和 # 我还要试试该绑定哪个才好

#13 楼 @hbin

只要适合自己就好. 不过稍后你要试用我的脚本, 可以整体参考下我的那个 my-customize-keybinding.el, 别的就不说了. 但是在快捷键方面, 我觉得自己还是有一整套哲学的. 彼此之间不冲突, 也很少有彼此矛盾的地方. 绝对比 Emacs 默认要很好多.

事实上这篇文章里讲的设置, 只是我快捷键里面的九牛一毛.

刚刚又查了下我到底定义了多少快捷键:

file = File.read("/root/.emacs.d/plugins/my-customize-keybinding.el")
p file.scan("define-key").count             # => 230
p file.scan("global-set-key").count         # => 134

匿名 #15 2012年03月31日

#11 楼 @zw963 为什么不用 Shift?

#14 楼 @zw963 跟 Xah Lee 的 binding 有得比了

#15 楼 @hbin

个人习惯问题吧. 最初是因为, Shift 在文本终端下, 是无效的. 我刚刚跨入 linux 那会儿, 还不知道怎么启动图形界面呢. 那会儿已经用 Emacs 很熟了. 所以, 很少使用 Shift. 到目前为止, 唯一用 Shift 的地方, 就是查看帮助的时候, Shift+Meta+n, Shift+meta+p, 滚动另一个 buffer, 而不用把光标切换到另一个窗口.

其他的有些命令, 因为怕冲突的缘故, 例如 C-l, 我直接就自动映射成 C-S-l 了. 这样保证任何模式, C-l 都是移动键. (最初其实我是映射到 Super L 了. 后来觉得 Super 啥的搞的挺复杂, 别人也不好懂, 就换成大写了.), 既然已经这样 map 了. 我肯定无法再定义 Shift 相关的键了.

事实上根本用不到 Shift 吧. C-c 前缀里面还有大把快捷键没占用呢. 我又弄出来个 M-c 前缀 (基本上没用几个), 另外还有 C-v,C-f 前缀.(分别是 VC 控制和 rinari 专用).

实在想不出来用 Shift 的地方. 事实上 shift 也不方便啊. 左手按着 Capslock,再按 Shift 很难受. 而右手,我手指几乎从来不离开 J,K,L. 顶过 Shift-tab 的时候用一下右边的 Shift.

#11 楼 @zw963 我是加了个 yasnippet, 文件末不要有换行

# name: UPCASE # key: uc # -- ${1:>$(upcase yas/text)}$0

#15 楼 @hbin

事实上到现在位置, 还有两个很好用的快捷键, 还闲着呢. 不知道该在那里用.

一个是 Alt+Tab, (C-M-i) 还有一个 C-\

这两个对我来说, 都是很顺手的.

匿名 #20 2012年04月01日

#19 楼 @zw963 =.= Alt+Tab 不是系统的切换窗口么;C-\ 有点远,暂时对它没有想法。

#18 楼 @doitian 哈. 兄弟很有创意呀. 我都没想到.

我的这个应该比你方便一些吧.

我把我的也分享下:

用到这个插件 (其实就是一个宏) http://www.emacswiki.org/cgi-bin/wiki/download/sequential-command.el

(defun backward-upcase-word ()
  (interactive)
  (upcase-word (- (1+ (seq-count)))))

(defun backward-capitalize-word ()
  (interactive)
  (capitalize-word (- (1+ (seq-count)))))

(defun backward-downcase-word ()
  (interactive)
  (downcase-word (- (1+ (seq-count)))))

(defun backward-mark-word ()
  (interactive)
  (mark-word (- (1+ (seq-count)))))

我估计其他编辑器不见得有类似功能吧. 呵呵.

匿名 #22 2012年04月01日

#19 楼 @zw963 如果你没有使用 Alt+Tab 的话,你暂时留着吧,等我后面配置出来后,会给你一个很好的绑定建议的。

#20 楼 @hbin

我指的是 Ctrl+Meta+i. 如果你用 Capslock 作为 Ctrl, 你不知道这个键有多舒服. 我也是留着看将来有什么用处. 在 linux 下, alt+tab 和 meta+tab 是两回事儿. 我照样可以用 alt+tab 切换啊

Ctrl+Meta+i 这个快捷键默认绑定的是: 单词拼写检查, 和 M-$ 一样的功能. 纯粹给废了. 而且我几乎不用.

#21 楼 @zw963 seq-count 是个好东西

看起来我除了会用 emacs 写两行代码其他啥也不会

#25 楼 @doitian

可发挥的余地大大地~

事实上我早就想过通过类似方式来实现, 只不过一搜, 已经有人搞定了. 直接拿来主义了.

#26 楼 @yedingding

别灰心, 我和你水平差不多. 只不过用多了 熟了点.

一个笑话:

使用 vi?那该多么麻烦呀? 如果你真决定这样, 需要做好以下准备:

1.获得一条任意品种的鱼,长度大于 12 英寸就行 2.冰冻一晚上 3.把它放到电脑前,运行 vi 4.抓住鱼的尾巴不停的往你头上砸,直到你决定用 EMACS。

没过多久, vi 的拥护者们开始回击,其中一个建议把这一行加到他的步骤中去:

在第 1 步之前键入 emacs,这样在第 4 步结束时 emacs 才可能加载完成。

匿名 #29 2012年04月01日

#28 楼 @zw963 Emacs 的启动确实够慢的,不知 zhuxi 有没什么提速的办法

@ruchee

  • 使用 Emacs server,不退出就不存在启动慢的问题了
  • byte-compile 你的 el 文件
  • profile 你的 Emacs 配置文件
  • 若是知道哪个包加载比较慢的话,还可以针对包进行 profiling

你能不能出个视频讲解下。。。我感觉那样会更好。。。

#27 楼 @zw963 用的不多,六七年,哈

#29 楼 @ruchee

那只是个笑话~~

你不知道现在 Emacs23 支持 daemon 方式么? 你要是在 Win 下, 可以用 Emacs server.

速度和飞一样. 秒开.

事实上我现在已经很习惯打开一堆 Emacs 窗口 (而不是想最初, 一个窗口, 通过 ido 来切换)

#32 楼 @yedingding

都六七年了, 前辈哦, 看不懂我们说的么?

#30 楼 @liuw

除了启动 daemon, 其他都是浮云. 我几乎不字节编译. 尤其是自己编写的 el, 否则出了错, 调试窗口你只能看到一堆乱码.

我启动大概需要七八秒吧. 不过只是开机时启动一次而已. 又有什么受不了的.

#34 楼 @zw963 只会用来写写代码,其他事情有其他的工具

@zw963

我启动是 2 秒之内,但是我没有什么自定义的东西。另外,其实我不喜欢 Emacs server,我更习惯把一些用不到的东西去掉。

@liuw @zw963 由于长期用 Emacs, 这几天左手的小手指有点不舒服,我刚才在 Lion 里把 capslock 与 ctrl 键交换了顺序。

#38 楼 @liuhui998

用一句改编自流行语的话: 既然出来用Emacs, 迟早要换Capslock 的, 哈哈.

@zw963 你换了没有呀 btw, 你现在在用什么 键盘

#40 楼 @liuhui998

我当然早就换了, 我连交换脚本都不知道在社区贴了多少次了. 哎!

#41 楼 @zw963 我在 mac 下,直接在配置里改一下就 OK , 整个系统都改了。

@zw963 @liuw 我有一个问题想请教一下 我现在把 ctrl 换到 capslock 后,现在在打 erb 的代码时总常得有点不爽 因为 ctrl 和 shift 离的太近,有时按了 ctrl+e / ctrl+e 再 shift + '/9/0/5 输标点时 左手的小手指就不舒服

不知道各位是怎么解决的,谢谢

@liuhui998 其实我一般用 Python 的 XD。按键太多不如用 kdb macro 或者直接写个函数绑定到某个 Fn 吧。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号