emacs n00b在这里。
我每周至少遇到一次这个问题,我每个行都有一个函数调用,其参数为一行,但是我想重新格式化,以便所有参数都转到一行,即我想从:
f(
x,
y,
z
);
为:
f(x, y, z);
最好的方法是什么?
答案 0 :(得分:6)
通常,自定义重新格式化要求的一种简单方法是创建一个键盘宏,以通用方式执行所需的编辑。
穿越色情和能力的能力平衡表达式,在区域内搜索和替换,以及缩小和扩大缓冲区都使得这类事情变得非常简单。
然后,您可以为宏指定名称,将其定义输出到您的init文件中,并将其绑定到密钥以供将来使用,所有这些都不需要elisp知识。
C-h i g (emacs) Keyboard Macros
RET
编辑:(对于“Emacs n00bs”无处不在)。
DO 了解如何使用键盘宏。学习曲线非常浅 1 ,从长远来看,他们将获得惊人的红利。
一旦你学会了它们的工作方式,强制自己使用它们:每当遇到问题时,请对自己说“我能用键盘宏做这个吗?”如果您认为答案是肯定的,那么试一试。
如果你没有让自己开始使用它们,你可能不会经常在用例出现时考虑它们;但是,一旦他们成为您工具包中熟悉的部分,您就会发现自己经常使用非常。
1 浅,但可能更长比你想象的要多,因为你逐渐意识到你可以用这些东西实际完成多少。当我发现我并不局限于单个缓冲区时,我自己的清晰时刻就出现了,并且关联/提取/转换来自多个缓冲区的数据是我可以自动轻松的。
当然,宏可以做任何你能做的事情,所以他们的力量会随着你对Emacs的了解而增长。
答案 1 :(得分:2)
嗯,我怀疑这是最好的方法,但我还是写了一个函数。所以这就是:
(defun format-args-column-to-inline()
"Takes a c-style function whose arguments listed one per line and puts them inline."
(interactive)
(beginning-of-line 1)
(re-search-forward "(")
(forward-char -1)
(let ((start (point)))
(save-restriction
(save-excursion
(forward-sexp 1)
(narrow-to-region start (point)))
(while (re-search-forward "$")
(progn
(delete-forward-char 1)
(just-one-space 1))))))
将光标放在第一行的某处并调用该函数。
修改:刚看到你想要的东西略微不同。此函数的输出为f( x, y, z );
[注意参数列表的尾随和前导空间]。