¿Cómo cambiar el punto a la línea anterior después de que se ingresó un }?

Estoy trabajando con emacs24 con modo cc, quiero saber cómo hacer que mi emacs sea más "inteligente". Después de escribir un }, insertará automáticamente una nueva línea y una sangría como excepción. Quiero saber cómo cambiar el punto a la línea anterior. Por ejemplo, cuando defino una función, ahora mi comportamiento de emacs es:

void f()
{
}
//point

"//punto" es la posición del cursor después de ingresar }. Pero lo que quiero es esto:

void f()
{
    //point
}

Espero que la posición del cursor pueda cambiar a la línea anterior y sangrar automáticamente. Sé que emacs puede hacer esto, pero no sé cómo hacerlo, ¿quién puede ayudarme?

preguntado el 01 de julio de 12 a las 08:07

4 Respuestas

Creo que estas detrás de estos.. C-M-u, C-M-d, C-M-f y C-M-b

Practica un poco... Son algo globales y se comportan contextualmente en casi todos los modos...

ACTUALIZACIÓN:

ohh... Parece que quieres colocar el cursor automáticamente... en realidad, en términos más generales, Emacs te ayudará a no escribir } en absoluto. Me refiero a que emacs puede insertar un paran de cierre automáticamente.

Hay un modo de par eléctrico incorporado

autopair.el de terceros

Respondido 01 Jul 12, 09:07

No confío en nada eléctrico, así que escribí esta función.

(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)))

Respondido 04 Jul 12, 09:07

Eche un vistazo a los sistemas de plantillas como yasnippet: http://www.emacswiki.org/emacs/CategoryTemplates

Respondido 04 Jul 12, 12:07

modo de sangría automática tal vez lo que quieres!

Respondido 09 Jul 12, 02:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.