我正在尝试配置 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 循环示例命令中(虚构的,因为我从未见过它,如果它存在的话) - 在这种情况下,您真的会从中受益。