2

ここに emacs n00b があります。

私は少なくとも週に一度この問題に直面しています.1行に1つずつ引数を持つ関数呼び出しがありますが、すべての引数が1行になるように再フォーマットしたいと思います.

f(
  x,
  y,
  z
);

に:

f(x, y, z);

それを行う最良の方法は何ですか?

4

2 に答える 2

6

一般に、カスタムの再フォーマット要件に対する簡単なアプローチは、必要な編集を一般的な方法で行うキーボード マクロを作成することです。

sexp とバランスの取れた式の間を移動する、領域内で検索して置換する、バッファーを狭めたり広げたりするなどの機能はすべて、この種のことを非常に簡単にします。

次に、マクロに名前を付け、その定義を init ファイルに出力し、後で使用できるようにキーにバインドします。すべて elisp の知識は必要ありません。

C-hig (emacs) Keyboard Macros RET

編集:(どこでも「Emacs n00bs」用)。

キーボード マクロの使用方法を学習してください学習曲線はかなり浅く1、長期的には驚くべき利益をもたらします。

それらがどのように機能するかを学んだら、それらを使用するように強制します。問題が発生するたびに、「キーボード マクロでこれを実行できますか?」答えが「はい」と思われる場合は、試してみてください。

最初からそれらを使用しないと、ユースケースが発生したときにそれらについて考えることはおそらくないでしょう。しかし、それらがツール キットの一部であると、非常に定期的に使用していることに気付くでしょう。

1浅はかですが、思ったよりも長いかもしれません。実際にどれだけのことを達成できるかが次第にわかるようになります。私自身が明確になったのは、単一のバッファーに限定されていないことに気がついたときでした。複数のバッファーからのデータの相関/抽出/変換は、簡単に自動化できるものでした。

そしてもちろん、マクロはあなたができることなら何でもできるので、Emacs についてのあなた自身の知識があればその力は大きくなります。

于 2013-05-29T23:00:51.917 に答える
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 );[引数リストの末尾と先頭のスペースに注意してください] です。

于 2013-05-29T22:56:05.367 に答える