|
| 1 | +#+TITLE: 快速定位Emacs_Lisp源代码 |
| 2 | +#+AUTHOR: lujun9972 |
| 3 | +#+OPTIONS: ^:{} |
| 4 | + |
| 5 | +使用Emacs的过程中,经常会要查看各种库,函数或变量定义的源代码. 一般的方法是使用C-h f(describe-function), C-h v (describe-variable) 和 C-h k (describe-key) 这些命令来跳转到源代码的位置. |
| 6 | + |
| 7 | +现在让我们试着优化这一流程 |
| 8 | + |
| 9 | +* find-func |
| 10 | + |
| 11 | + find-func是Emacs内建的一个库, 它提供了很多有用的命令来帮助我们快速定位源代码的位置. 下面简单介绍一下: |
| 12 | + |
| 13 | + * find-library命令 |
| 14 | + |
| 15 | + 可以使用M-x find-library定位库的源代码. 假设你想要定位到ido的源代码处,可以执行: |
| 16 | + #+BEGIN_EXAMPLE |
| 17 | + M-x find-library RET ido RET |
| 18 | + #+END_EXAMPLE |
| 19 | + |
| 20 | + 推荐将该命令绑定到快捷键C-h C-l |
| 21 | + #+BEGIN_SRC emacs-lisp |
| 22 | + (define-key 'help-command (kbd "C-l") 'find-library) |
| 23 | + #+END_SRC |
| 24 | + |
| 25 | + * find-function命令 |
| 26 | + |
| 27 | + 使用M-x find-function来定位到某个函数的源代码处. 例如 |
| 28 | + #+BEGIN_EXAMPLE |
| 29 | + M-x find-function RET find-function RET |
| 30 | + #+END_EXAMPLE |
| 31 | + |
| 32 | + 推荐将该函数绑定到C-h C-f |
| 33 | + #+BEGIN_SRC emacs-lisp |
| 34 | + (define-key 'help-command (kbd "C-f") 'find-function) |
| 35 | + #+END_SRC |
| 36 | + |
| 37 | + * find-function-on-key |
| 38 | + |
| 39 | + 可以使用M-x find-function-on-key来查找快捷键所代表的命令的源代码. 下面的例子展示了如何查找绑定到C-a快捷键的命令(beginning-of-line)的源代码: |
| 40 | + #+BEGIN_EXAMPLE |
| 41 | + M-x find-function-on-key RET C-a |
| 42 | + #+END_EXAMPLE |
| 43 | + |
| 44 | + 推荐将该命令绑定到C-h C-k |
| 45 | + #+BEGIN_SRC emacs-lisp |
| 46 | + (define-key 'help-command (kbd "C-k") 'find-function-on-key) |
| 47 | + #+END_SRC |
| 48 | + |
| 49 | + * find-variable |
| 50 | + |
| 51 | + 可以使用M-x find-variable来查找定义变量的源代码. |
| 52 | + #+BEGIN_EXAMPLE |
| 53 | + M-x find-variable RET large-file-warning-threshold RET |
| 54 | + #+END_EXAMPLE |
| 55 | + |
| 56 | + 推荐将该命令绑定到C-h C-v |
| 57 | + #+BEGIN_SRC emacs-lisp |
| 58 | + (define-key 'help-command (kbd "C-v") 'find-variable) |
| 59 | + #+END_SRC |
| 60 | + |
| 61 | + 除了上面所列函数,find-func库还提供了其他有用的命令,比如find-function-at-point和find-variable-at-point. |
| 62 | + |
| 63 | + 若你不喜欢上面推荐的快捷键,可以考虑直接使用find-function-setup-keys代替. 它默认定义了C-x F,C-x V,C-x K等快捷键. |
| 64 | + |
| 65 | +* elisp-slime-nav |
| 66 | + |
| 67 | + 另一个很酷的浏览Elisp源代码(和文档)的库是第三方的elisp-slime-nav. 安装这个库后,可以用下面的代码启用它: |
| 68 | + #+BEGIN_SRC emacs-lisp |
| 69 | + (require 'elisp-slime-nav) |
| 70 | + (dolist (hook '(emacs-lisp-mode-hook ielm-mode-hook)) |
| 71 | + (add-hook hook 'elisp-slime-nav-mode)) |
| 72 | + #+END_SRC |
| 73 | + |
| 74 | + 一旦启用了elisp-slime-nav-mode,就可以使用`M-.`来跳转到光标所在函数或变量的定义处. 然后还可以使用`M-,`跳回来. 还可以使用C-c C-d(或者C-c C-d d)来查看光标所在的object的文档描述. |
0 commit comments