有时我使用 来调整 emacs 中的文本C-u 70 M-x fill-region
。
我希望我的.emacs
文件中有一个带有参数的函数,以便我可以使用快捷方式调用该函数,而不必执行C-u 70 fill-region
.我有 2 个快捷方式,一个使用默认的 70,另一个要求参数。
我对 emacs 编程很陌生,但我已经使用 emacs 一段时间了。如果有解决方案,您能解释一下如何做到这一点吗?
答案1
如果您为函数添加前缀,则C-h f
可以阅读它的文档。如果你这样做,fill-region
除其他外,它会显示:
The `fill-column' variable controls the width.
如果你检查有关 Fill 命令的 Emacs 手册你可以阅读:
填充的最大线宽由缓冲区局部变量指定
fill-column
。默认值(参见 当地人) 为 70。在当前缓冲区中设置的最简单方法fill-column
是使用命令C-x f
(set-fill-column
)。对于数字参数,它使用它作为新的填充列。正如C-u
参数一样,它设置fill-column
为点的当前水平位置。
这解释了如何C-u 70 M-x fill-region
工作。它还表明可以通过设置填充宽度C-x f
。因此,可能没有必要编写一个要求参数的函数,即您可以使用C-x f
andfill-region
代替。
如果您仍然想要新函数来执行此操作,您可以使用以下命令:
(defun fill-region-ask-width (fill-width)
"Asks for a width and fills the region to it"
(interactive "nFill region to column: ")
(fill-region-width fill-width))
(defun fill-region-width-70 ()
"Fills the region with width 70"
(interactive)
(fill-region-width 70))
(defun fill-region-width (fill-width)
"Fills the region with the given width"
(set-fill-column fill-width)
(fill-region (region-beginning) (region-end)))
这些功能由它们的解释文档字符串但这里还有一些注意事项:
fill-region-ask-width
接受一个通过询问用户获得的参数,并将该数字视为整数 (n
) 并将其传递给fill-region-prompt-width
。fill-region-width-70
只是有一个传递给 的硬编码数字fill-region-prompt-width
。fill-region-width
是一个辅助函数,用于模块化其他两个函数的共同点。它未定义为交互式,因此无法通过 调用M-x
。它设置fill-column
为给定的参数并填充区域`。
要了解如何编写 Emacs 函数并将它们绑定到键,请参阅学习 Elisp For Emacs:第 4-2 课 - 向 Emacs 添加自定义函数。