在Lisp模式下扩展时选择函数注释

时间:2013-01-25 20:45:33

标签: function emacs comments selection

我正在使用绑定到的键盘快捷键:

er/expand-region, which is an interactive Lisp function in `expand-region-core.el'.

扩大该地区。

例如,当我想选择一个函数并移动它时。

我的问题是,如果我想选择任何功能,比如说:

;; some comment related to the function
(defn foo [x]
  ...)

我不能“扩展”包括“;;一些评论”。只要我扩展了多个函数(没有注释),它就会消耗完整的缓冲区。

虽然我希望它首先扩展为包含函数和注释,然后是完整的缓冲区。

这让我很烦心,以至于我暂时将其作为一种解决方法:

(defn foo [x]
  ;; some comment
  ...)

如何修改er / expand-region(或其他函数),以便在扩展到完整函数之后扩展函数上方的注释,然后扩展到整个缓冲区?

2 个答案:

答案 0 :(得分:3)

来自包装扩展区域的创建者Magnar Sveen,取自他的github

  

示例:

     

假设您希望expand-region也标记段落和页面   文本模式。顺便说一句,Emacs已经带有mark-paragraph和   标记页。要将其添加到try-list,请执行以下操作:

 (defun er/add-text-mode-expansions ()   (make-variable-buffer-local
 'er/try-expand-list)   (setq er/try-expand-list (append
                             er/try-expand-list
                             '(mark-paragraph
                               mark-page))))
  

(add-hook'text-mode-hook'er / add-text-mode-expansions)

     

将其添加到   它自己的文件,并将其添加到expand-region.el文件中      “模式特定的扩展”

     

警告:错误编写的扩展可能会降低扩展区域的速度   大幅提升。记得在开始穿越之前快速退出   整个文档寻找标记的结构。

我想说你可以将“er / mark-paragraph”添加到扩展区域列表中,应该这样做。

答案 1 :(得分:1)

按照用户 Dualinity的建议,我将以下内容添加到 clojure-mode-expansions.el (当然可以用于除Clojure之外的其他模式):

;; added this line at the beginning of the file
(require 'org-mode-expansions)

然后我将行er / mark-paragraph添加到er/add-clojure-mode-expansions方法内的展开列表中:

(defun er/add-clojure-mode-expansions ()
  "Adds clojure-specific expansions for buffers in clojure-mode"
  (set (make-local-variable 'er/try-expand-list) (append
                                                  er/try-expand-list
                                                  '(er/mark-clj-word
                                                    er/mark-clj-regexp-literal
                                                    er/mark-paragraph ; added this line
                                                    er/mark-clj-function-literal))))

我重新启动了Emacs(不太确定需要什么,以确保它被考虑在内,所以我重新启动了整个事情。)

就是这样:现在扩展也会选择“外部”功能评论。