emacs中的Lisp定位
在哪里可以找到所有Emacs的elisp脚本?我指的不是用户自己开发或安装的脚本,而是已经存在的通用elisp脚本 比如说,emacs中的Lisp定位,emacs,elisp,Emacs,Elisp,在哪里可以找到所有Emacs的elisp脚本?我指的不是用户自己开发或安装的脚本,而是已经存在的通用elisp脚本 比如说, 如果我有一个类似于descripe char或insert file的函数,我如何找到包含这些函数的文件 Ctrl-hf将告诉您函数的解释及其包含位置 如果你想让一个函数自动完成,这里有一个草稿: (defun my-find-lisp-object-file-name (function) "Display the lisp file name of FUNCTIO
如果我有一个类似于
descripe char
或insert file
的函数,我如何找到包含这些函数的文件 Ctrl-hf
将告诉您函数的解释及其包含位置
如果你想让一个函数自动完成,这里有一个草稿:
(defun my-find-lisp-object-file-name (function)
"Display the lisp file name of FUNCTION (a symbol)."
(interactive
(let ((fn (function-called-at-point))
(enable-recursive-minibuffers t)
val)
(setq val (completing-read (if fn
(format "Describe function (default %s): " fn)
"Describe function: ")
obarray 'fboundp t nil nil
(and fn (symbol-name fn))))
(list (if (equal val "")
fn (intern val)))))
(if (null function)
(message "You didn't specify a function")
(setq object-file-name (find-lisp-object-file-name function (symbol-function function)))
(if (eq object-file-name 'C-source)
(message "%s is in %s" function "C source code")
(setq buff (find-function-search-for-symbol function nil object-file-name))
(setq buf-name (buffer-name(car buff)))
(setq buf-pos (cdr buff))
(switch-to-buffer (car buff))
(message "%s is in %s(%s, %d)" function object-file-name buf-name buf-pos))))
我猜
M-x locate library RET RET
可能是一个答案,因为它需要库名而不是函数名。否则,M-x find function other window
不仅会告诉您文件在哪里,而是会打开文件,然后您可以使用M-x pwd
知道您在哪里
还有一件事:您可以执行
C-hv load path RET
来查看Emacs用于查找其库的目录,这样您就可以很好地了解所有绑定的Elisp文件所在的位置。初稿(2014年3月25日):初稿
编辑(2014年3月26日):添加了一个全局设置键
。在最后一条消息中添加了一个car
,以便从按钮文本属性列表中完全提取文件名的路径。在最初和最后的消息中添加了一些颜色。在函数末尾的缓冲区开始处添加了返回光标。添加了查找变量其他窗口
和查找函数其他窗口
的选项。添加了一些条件,以便在没有文件名时不会生成任何消息
这里有一个有趣的小函数,是我突然想到的——如果
*.el
文件显示在*帮助*
缓冲区中,它会显示一条带有文件路径的消息
(全局设置键(kbd“C-h z”)'法律列表描述查找函数变量)
(defun lawlist描述find函数变量()
“描述或查找函数/变量。显示文件名的路径。”
(互动)
(电文)(concat)
(属性“描述”'face'字体锁定关键字face)
" ["
(属性“f”‘face’字体锁定警告面)
“]unction/[”
(属性化“v”‘face’字体锁定警告面)
“]可变|”
(属性化“查找”'face'字体锁定关键字face)
" ["
(属性“F”‘face’字体锁定警告面)
“]unction/[”
(属性化“V”‘face’字体锁定警告面)
“]可变“))
(让我们*(
(选择-f-或-v(读取字符专用))
功能
变量)
(续)
((eq选择-f-或-v?f)
(setq函数(读取(读取字符串“请输入函数名:”))
(描述功能)
(选择窗口(获取缓冲区窗口“*帮助*”))
((eq选择-f-或-v?v)
(setq变量(读取(读取字符串“请输入变量名:”))
(描述变量)
(选择窗口(获取缓冲区窗口“*帮助*”))
((eq选择-f-或-v?f)
(setq函数(读取(读取字符串“请输入函数名:”))
(查找功能其他窗口功能)
(当缓冲区文件名
(消息(属性缓冲区文件名'face'字体锁定警告面)))
((eq选择-f-或-v?v)
(setq变量(读取(读取字符串“请输入变量名:”))
(查找其他窗口变量)
(当缓冲区文件名
(消息(属性缓冲区文件名'face'字体锁定警告面)))
(t
(信息“谢谢,再来!”)
(何时)(及
(相等(缓冲区名称)“*帮助*”)
(省去远足
(转到字符(最大点))
(向后搜索“\\(`*[.]el'\\)“nil t)))
(转到字符(最大点))
(向后搜索“\\(`*[.]el'\\)”零t)
(信息
(财产化
(car(cdr(car(nthcdr 1)(点‘‘‘‘‘‘‘‘‘‘)处的文本属性)
“面”字体锁定(警告面)
(转到字符(最小点)))
如果使用次要模式:
helm
完成界面。
每行的第一列将包含标记,第二列将包含文件。
我的安装的基本Elisp目录有19838个标记,完成的速度足够快lispy转到递归
。解析需要几分钟的时间,导入需要几秒钟的时间
打开完成界面。但它允许交互搜索
Emacs源代码中的所有文件-即89675个标记。
示例搜索:有55个顶级标记包含insert file
spread
大约20个文件。
大多数都是函数,但顶级标记(定义键ctl-x-map“i”'插入文件)
也匹配,无需打开文件即可查看ack
或find/grep
所有lisp文件都位于lisp
目录中
cd-Emacs-24.4/lisp
确认“取消某些功能”
找到-名称“*.el”| xargs grep“defun some function”
是的,它描述函数的功能,但不描述函数的位置。我想知道包含*.el的文件在哪里。@PierreB我不确定你想知道什么,但是当你得到一个函数的文档,比如描述字符
,你可以在*帮助*
缓冲区中得到.el
文件的链接,并得到.el
文件的位置。例如/usr/local/s中的descr text.el