1

私はccモードでemacs24を使用しています.emacsをより「賢く」する方法を知りたいです。} を入力すると、新しい行が自動的に挿入され、例外としてインデントされます。ポイントを前の行に切り替える方法を知りたいです。たとえば、関数を定義すると、emacs の動作は次のようになります。

void f()
{
}
//point

「//point」は}入力後のカーソル位置です。しかし、私はこれが欲しいです:

void f()
{
    //point
}

カーソルの位置が前の行に切り替わり、インデントが自動的に行われることを願っています。emacs がこれを実行できることは知っていますが、その方法がわかりません。誰が私を助けてくれますか?

4

4 に答える 4

1

私はあなたがこれらの後にいると思います.. C-M-u、、そしてC-M-dC-M-fC-M-b

少し練習してください...それらは一種のグローバルであり、ほとんどすべてのモードでコンテキスト的に動作します。

アップデート:

ああ..カーソルを自動的に配置したいようです..実際、より一般的には、Emacsは}まったく入力しないのに役立ちます。つまり、emacsは自動的にクロージングパランを挿入できます。

1つの電気ペアモードが組み込まれています

サードパーティのautopair.el

于 2012-07-01T08:23:51.323 に答える
0

yasnippet のようなテンプレート システムを見てみましょう: http://www.emacswiki.org/emacs/CategoryTemplates

于 2012-07-04T11:02:59.087 に答える
0

私は電気的なものは何も信用していないので、この関数を書きました。

(defconst insert-logical-brackets-logical-bracket-begin "{")
(defconst insert-logical-brackets-logical-bracket-end "}")
(defconst insert-logical-brackets-default-style 0)
(make-variable-buffer-local 'logical-bracket-begin)
(make-variable-buffer-local 'logical-bracket-end)
(make-variable-buffer-local 'insert-logical-brackets-default-style)
(defun insert-logical-brackets(&optional style)
  "If STYLE = 0(default, according to `insert-logical-brackets-default-style' value), make a newline before opening bracket, if line is not empty. Make a newline after closing bracket, if there is something after this bracket. Make two newlines in the middle.
If STYLE = 1, don't make newlines before opening a bracket(one of c styles).
If STYLE = 2, don't make newlines before opening and after closing bracket.
If STYLE = 3, allways make all newlines.
If STYLE is not nil, don't make newlines between brackets(still makes before/after lines)."
  (interactive "P")
  (when (eq style nil)
    (setq style insert-logical-brackets-default-style))
  (funcall indent-line-function)
  (unless (or (eq 1 style) (eq 2 style))
    (when (or (/= (point) (save-excursion (back-to-indentation) (point))) (eq 3 style))
      (newline)
      (funcall indent-line-function)))
  (unless (and (integerp style) (= 2 style))
    (when (or (not (looking-at "\n")) (eq 3 style))
      (newline)
      (funcall indent-line-function)
      (forward-line -1)
      (goto-char (point-at-eol))))
  (insert logical-bracket-begin)
  (funcall indent-line-function)
  (let ((return-point (point)))
    (when (or (not style) (or (eq 0 style) (eq 1 style) (eq 2 style) (eq 3 style)))
      (newline)
      (funcall indent-line-function)
      (setq return-point (point))
      (newline))
    (insert logical-bracket-end)
    (funcall indent-line-function)
    (goto-char return-point)))
于 2012-07-04T08:55:06.027 に答える
0

auto-indent-mode多分あなたが望むものでしょう!

于 2012-07-09T01:03:24.577 に答える