我是emacs的新手用户,目前我正在尝试为python设置工作环境。我正在使用绳索,但遇到了以下情况:虽然rope的“Find occurences”命令工作正常,但其结果放在一个无模式缓冲区中,要访问它们,我必须复制文件名。
缓冲区内容为here
据我所知,关闭功能到我想要的(即在点击它或按RET后在给定行上打开文件)由编译模式提供。但是,事实上,启用编译模式只会导致文件名突出显示。
如果我没有正确处理,要处理行我需要将项目提供给compilation-error-regexp-alist,就像在以下代码段中完成一样(来自emacs wiki
(require 'compile)
(let ((symbol 'compilation-ledger)
(pattern '("^Error: \"\\([^\"\n]+?\\)\", line \\([0-9]+\\):" 1 2)))
(cond ((eval-when-compile (boundp 'compilation-error-regexp-systems-list))
;; xemacs21
(add-to-list 'compilation-error-regexp-alist-alist
(list symbol pattern))
(compilation-build-compilation-error-regexp-alist))
((eval-when-compile (boundp 'compilation-error-regexp-alist-alist))
;; emacs22 up
(add-to-list 'compilation-error-regexp-alist symbol)
(add-to-list 'compilation-error-regexp-alist-alist
(cons symbol pattern)))
(t
;; emacs21
(add-to-list 'compilation-error-regexp-alist pattern))))
我应该如何修改它以使其与我的缓冲区一起使用?
是否有更好/更快的替代品?
答案 0 :(得分:4)
通常,在缓冲区中显示文件名称时打开文件的最快方法是
M-x ffap
(M-x find-file-at-point
的缩写)
如果要自动打开文件,可以定义自己的功能:
(defun open-file-at-point ()
(interactive)
(let ((file (ffap-file-at-point)))
(if file
(find-file file)
(error "No file at point"))))
并且可能将其绑定到带有
的键(global-set-key (kbd "C-<return>") 'open-file-at-point)
如果您想使用compilation-mode
,则必须向compilation-error-regexp-alist(-alist)
添加匹配的正则表达式。对于您的示例,以下似乎有效:
(add-to-list
'compilation-error-regexp-alist
'python-file-name)
(add-to-list
'compilation-error-regexp-alist-alist
(list
'python-file-name
(concat "\\(?1:.*?\\)" ;; file name
" : " ;; seperator
"\\(?2:[[:digit:]]+\\)") ;; line number
1 2)) ;; subexpr 1 is the file name, subexp 2 is the line number