Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 在Lisp模式下展开时选择函数注释_Function_Emacs_Comments_Selection - Fatal编程技术网

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

Function 在Lisp模式下展开时选择函数注释,function,emacs,comments,selection,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] ...) 我不能“扩展”到包括;一些评论。一旦我扩展的函数超过了这个值(没有注释),它

我正在使用绑定到以下位置的键盘快捷键:

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(或另一个函数),以便在扩展到完整函数后,在扩展到整个缓冲区之前扩展函数上方的注释?

来自包扩展区域的创建者Magnar Sveen,摘自他的:

例如:

假设您希望扩展区域以同时标记中的段落和页面 文本模式。顺便说一句,Emacs已经带有标记段落和 标记页面。要将其添加到“尝试”列表,请执行以下操作:

(添加钩子“文本模式钩子”er/添加文本模式扩展)

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

警告:写得不好的扩展可能会减慢扩展区域的速度 戏剧性地请记住,在开始穿越该区域之前,请快速退出 查找要标记的构造的整个文档

我想说,您可以将“er/mark段落”添加到扩展区域列表中,这样就可以了。

按照用户Duality的建议,我在clojure-mode-expansions.el中添加了以下内容(当然可以在clojure以外的其他模式中添加):

然后,我在
er/add clojure mode expansions
方法中的展开列表中添加了行er/mark段落:

(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(不太确定需要什么来确保它被考虑在内,所以我重新启动了整个过程)


就是这样:现在扩展也会选择“外部”函数注释。

看起来不错,非常感谢:它可能会让我开始,但是。。。我还真的不太擅长elisp。如何找到展开区域列表并尝试向其中添加er/标记段落?请查看
展开区域.el
。我相信这是一个学习英语的好机会。Magnar在这里发表了很多评论,如果你有问题,请随时在这里提问!它正在工作,非常感谢,+1。。。我也在用详细的步骤回答我自己的问题,以防有人想这样做。干得好!你在Clojure模式下需要它吗?我想这对我们两人来说都是非常好的学习:)@duality:理想情况下,我在使用这种注释的所有模式中都需要它,但到目前为止,这主要是Clojure和一些elisp(也可能是Java中的//注释)。但这让我开始了,因为我现在主要做Clojure:)
;; added this line at the beginning of the file
(require 'org-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))))