tutorial mac commands emacs

commands - emacs ubuntu



Avanzando al comienzo de una línea de código: Emacs (5)

De forma predeterminada, Meta-m ejecuta una back-to-indentation que, de acuerdo con back-to-indentation , "Moverá el punto al primer carácter que no sea de espacio en blanco en esta línea".

Yo uso emacs para el desarrollo y muy a menudo necesito moverme al comienzo de una línea ( Ca ). Sin embargo, si la línea está sangrada, me gustaría moverme al punto donde comienza el código.

Por lo tanto, al navegar código: ( ) for x in xy|z: Al escribir Ca obtenemos esto: |( ) for x in xyz: Pero en cambio, me gustaría esto: ( ) |for x in xyz:

Aquí | indica el cursor y () indica espacios o pestañas.

¿Cómo puedo hacer que esto suceda?


El idioma común entre IDE moderno es moverse en el primer / último espacio no blanco en la segunda pulsación:

(defun my--smart-beginning-of-line () "Move point to `beginning-of-line''. If repeat command it cycle position between `back-to-indentation'' and `beginning-of-line''." (interactive "^") (if (and (eq last-command ''my--smart-beginning-of-line) (= (line-beginning-position) (point))) (back-to-indentation) (beginning-of-line))) (defun my--smart-end-of-line () "Move point to `end-of-line''. If repeat command it cycle position between last non-whitespace and `end-of-line''." (interactive "^") (if (and (eq last-command ''my--smart-end-of-line) (= (line-end-position) (point))) (skip-syntax-backward " " (line-beginning-position)) (end-of-line))) (global-set-key [home] ''my--smart-beginning-of-line) (global-set-key [end] ''my--smart-end-of-line)

En primer lugar, este código se mueve al comienzo / fin real, aparece un nuevo comportamiento en las siguientes pulsaciones. ¡Así que cualquier vieja macros de teclado funcionará como se espera!


Hago el mismo truco de alternar como Trey, pero prefiriendo la sangría en lugar de al principio de la línea. Se necesita un poco más de código porque no conozco la función "al comienzo de la sangría".

(defun smart-line-beginning () "Move point to the beginning of text on the current line; if that is already the current position of point, then move it to the beginning of the line." (interactive) (let ((pt (point))) (beginning-of-line-text) (when (eq pt (point)) (beginning-of-line))))

Esto probablemente le permitirá continuar usando Ctrl - a y hacer que haga lo que quiera con más frecuencia, al mismo tiempo que puede obtener fácilmente el comportamiento incorporado.


Una forma favorita para mí para manejar esto es hacer que Ca cambie entre el principio de la línea y el comienzo del código. Puedes hacerlo con esta función:

(defun beginning-of-line-or-indentation () "move to beginning of line, or indentation" (interactive) (if (bolp) (back-to-indentation) (beginning-of-line)))

Y agrega el enlace apropiado a tu mapa de modo favorito:

(eval-after-load "cc-mode" ''(define-key c-mode-base-map (kbd "C-a") ''beginning-of-line-or-indentation))


Meta - m