Emacs:混合命令和参数的界面

Emacs:混合命令和参数的界面

我正在尝试配置 Emacs 的方法,让我能够减少输入次数,但通过利用编程中您一遍又一遍地或多或少地执行(输入)相同内容的事实来实现相同的目标。我需要这个是出于医学原因,但也因为它总体上有意义。

我设想的 Emacs 界面基本上是命令与参数的混合。我只举一个例子,你马上就会明白。

好吧,你不必那么敏锐就能看出,在 C 语言中,for 循环“小于某值,加一”是很常见的。所以我想我应该写这样的东西:

(defun C-for-loop-new-int-less-inc (var start stop)
  "Shortcut for putting a C for loop at point.
   Note: There are some specifics to i."
  (interactive "sVariable: \nnStarts at: \nnLess than: ")
  (insert
   (format "for (int %s = %d; %s < %d; %s++) {\n\n}"
           var start var stop var) )
  (previous-line)
  (c-indent-line-or-region) )

并减少打字:

(defalias 'fnili 'C-for-loop-new-int-less-inc)

现在,M-x fnili RET i RET 0 RET 10 RET应该得到你

for (int i = 0; i < 10; i++) {

}

光标位于第二行,有缩进。

虽然这是一个改进,但我怎样才能像这样启动命令:

fnii0l10i

这样,所有RET-wait-reorient 周期都会消失,而您只需编写整个命令一次,并且它始终可见。

现在,我现在可以编写一个函数,它接受一个字符串,然后解析它,但如果 Emacs 已经支持我所寻求的这样的接口,我就不会这样做。

编辑

那么,“模板设施”就是这个名称吗?

我不认为是这样难做。如果您希望整个 C 语言都如此,并且所有可能的曲折,那么我同意。但要识别一些耗时的情况(例如 switch-case、头文件中的防护)并实现这些情况,这将是一个有用的功能。

当然,如果工作已经完成,我不会从头开始做(正如我所说:),所以我肯定会查看您的链接。

但是......我认为我的例子太复杂了,所以它掩盖了实际的问题,即关于界面的问题:不要RET为每个参数点击并获取一个空行,而是将其全部放在一个命令行上。

一个更简单的例子:除了M-x man RET irssi RET,我该怎么办M-x man"irssi" RET?在这个例子中,它并不是真正有益(也许稍微有益),因为它只是一个单一的论点,并且没有什么复杂的东西(你需要记住),而且你很少会犯一个必须犯的错误。 “回溯”以纠正。但是,在原始帖子中的 for 循环示例命令中(虚构的,因为我从未见过它,如果它存在的话) - 在这种情况下,您真的会从中受益。

答案1

真正有用的模板工具很难设计,并且需要大量的代码。我建议寻找现有的东西,并可能根据您的需求进行调整,而不是从头开始构建它。

Emacs 维基列出了一些包。主要候选人是:

相关内容