4

假设我想创建一个新文档,并快速循环浏览一个列表。如果只是为了一个“词”,我认为应该有一个通用的方法来做到这一点。

例如:

"blue orange red yellow black white"

有谁知道我创建时如何循环浏览这些项目:

\begin{orange}

...并且我想按一个键循环浏览此列表,用列表中的下一个项目替换橙色(然后在相反方向执行此过程不会很难)?

我用宏尝试了许多不同的想法(将列表放在文档的顶部,并进行了一大堆 i-search),但这并没有削减它。

我愿意将列表放入 elisp 文件中,尽管我不知道如何在 elisp 中使用该变量,比如 LaTeX 文档 (.tex)。

4

2 回答 2

2

好吧,这可能是可能的,但取决于您愿意付出多少努力来编写 eLisp 代码以使其工作。仅通过一些配置选项是不可能的。我会考虑通过向其添加新源来扩展自动完成功能,例如:

(defvar tex-tag-ac-sources
  '((init . tex-tag-ac-init)
    (requires . 0)
    (candidates . tex-tag-ac-candidates)
    (document . tex-tag-ac-documentation)
    (match . tex-tag-completion-filter)
    (prefix . tex-tag-ac-prefix-matcher)
    (symbol . "s"))
  "The source generator for autocompletion needed for interaction 
with auto-complete")

其中tex-tag-ac-candidatestex-tag-ac-documentation和是执行自动补全的函数tex-tag-completion-filtertex-tag-ac-prefix-matcher即,当自动完成过程针对指定前缀开始时调用一次 init 函数。它被称为无参数。候选者是负责显示过滤后的候选者列表的函数,它被称为无参数,您将在过滤器函数中过滤候选者,它使用到目前为止收集的前缀和到目前为止的候选者列表来调用。最后,在文件的文本上调用 matcher 函数以查看是否需要完成。因此,如果它返回t,则调用 init ,然后在您键入时循环通过 filter-candidates。

虽然这有点涉及......你肯定会完成你想要的任何事情。显然,如果源代码中的这些函数是您定义的,那么,如果您愿意,您可以动态读取完成参数或以某种方式动态生成它们。

啊,您可以通过以下方式将源添加到自动完成:

(auto-complete (list tex-tag-ac-sources))

如果在每次通话的基础上进行,或者

(setq ac-sources (list tex-tag-ac-sources <other sources>))

您可以在此处找到更多信息:http: //cx4a.org/software/auto-complete/manual.html#Using_Source

于 2012-08-04T07:54:41.897 回答
1

编辑:我将宏翻译成一个函数。

这是我做到的一种方式。我创建了一个名为“list.list”的文件,其中保存了我的“列表”。我在那里保存了 Beamer 的 LaTeX 模板。我这样插入它们:

Antibes Bergen Berkeley Berlin ..... Antibes

请注意,您应该始终将第一个条目放入两次以允许它循环。

这是代码:

(defun cycle-list-word ()
  (interactive)
   (right-word)
   (backward-kill-word 1)
   (find-file "/emacs-24.1/list.list")
   (search-forward (substring-no-properties (car kill-ring)) nil t)
   (right-word)
   (backward-kill-word 1)
   (bury-buffer)
   (yank)
)
于 2012-08-31T14:31:41.537 回答