如何在emacs上的缩进之间切换?

时间:2013-05-29 21:21:48

标签: emacs

emacs n00b在这里。

我每周至少遇到一次这个问题,我每个行都有一个函数调用,其参数为一行,但是我想重新格式化,以便所有参数都转到一行,即我想从:

f(
  x,
  y,
  z
);

为:

f(x, y, z);

最好的方法是什么?

2 个答案:

答案 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 ); [注意参数列表的尾随和前导空间]。