2009-02-27 14 views
12

Edito mis respuestas y preguntas de StackOverflow con ViewSourceWith y Emacs. A menudo, incluyo el código y StackOverflow formatting rules dicen que debe estar indentado por cuatro espacios para ser reconocido como . Hacerlo a mano o incluso con macros es doloroso.Uso de Emacs para sangrar (cambio 4) código

Busqué en las publicaciones anteriores de SO pero no encontré nada.

A partir del modo de Python, escribió:

(defun text-shift-region (start end count) 
    "Indent lines from START to END by COUNT spaces." 
    (save-excursion 
(goto-char end) 
(beginning-of-line) 
(setq end (point)) 
(goto-char start) 
(beginning-of-line) 
(setq start (point)) 
(indent-rigidly start end count))) 

(defun text-shift-region-right (start end &optional count) 
    "Shift region of code to the right 
    Stolen from python-mode. 
    The lines from the line containing the start of the current region up 
    to (but not including) the line containing the end of the region are 
    shifted to the right, by `text-indent-offset' columns. 

    If a prefix argument is given, the region is instead shifted by that 
    many columns. With no active region, indent only the current line." 
    (interactive 
    (let ((p (point)) 
    (m (mark)) 
    (arg current-prefix-arg)) 
(if m 
    (list (min p m) (max p m) arg) 
    (list p (save-excursion (forward-line 1) (point)) arg)))) 
    (text-shift-region start end (prefix-numeric-value 
       (or count text-indent-offset))) 
) 

;; Code in StackOverflow must be marked by four spaces at the 
;; beginning of the line 
(setq text-indent-offset 4) 
(global-set-key "\C-c>" 'text-shift-region-right) 

Parece que funciona pero la bienvenida consejos, alternativas, informes de errores, etc.

+0

Esto no es una pregunta ... –

+0

Es, espero obtener alternativas a mi solución cocinada rápidamente, o para recibir parches interesantes. – bortzmeyer

+0

Además, parece que puede ayudar a algunas personas, así que lo uso como una forma de ver si hay suficiente interés para solicitar una documentación en alguna parte. – bortzmeyer

Respuesta

14

C-x TAB ejecuta indent-rigidly. Dado un argumento numérico de cuatro, hará lo que usted desee. Alternativamente, utilice < pre> < código> para introducir su código (consulte el primer párrafo de Markdown Editing Help).

Editar: su declaración interactiva sería mejor escribir:

(interactive "r 
p") 
+0

C-x TAB requiere que se marque la región. El código del modo Python, que robé, funciona en la región, si hay una, o en la línea actual. – bortzmeyer

+0

Quieres decir activo. Normalmente, sangrar una sola línea por 4 realmente no garantiza una unión específica. C-a ESPACIO ESPACIAL SPACE SPACE. – kmkaplan

+0

Bueno, todavía prefiero mi método, pero estas dos soluciones también son agradables. Aceptado. – bortzmeyer

1

Su código se ve bien para mí. Creo que no es necesario volver a configurar end en text-shift-region, pero aparte de eso, se ve bien.

11

Otra forma sencilla de hacerlo es utilizar la poderosa capacidad de edición rectangular de emacs: establecer su región a partir del inicio de la primera línea y terminando en el comienzo de la última línea que desea sangrar (nota: la que tiene estar en el principio de la línea, ya que no desea reemplazar el texto existente!), y luego hacer

C-x r t (string-rectangle) 

a continuación, sólo entran 4 espacios cuando se le solicite. Voila! No es necesario hackear lisp adicional. Esto también le da flexibilidad para insertar otras cosas al lado de los espacios al comienzo o en cualquier parte del medio de un grupo de líneas.

+2

Un comando aún más simple es Cx ro, rectángulo abierto, suponiendo que la primera o la última línea de la región tienen al menos cuatro caracteres: coloque cualquiera de los extremos de la región cuatro caracteres en la línea y el otro al principio de la línea, y escriba Cx r o. –

8

El uso de C-x TAB para sangrar rígidamente (como se menciona en otra respuesta) es la manera más fácil. Simplemente marque la región que desea sangrar y presione C-u C-x TAB. Como el prefijo predeterminado para C-u es 4, esto debería hacer exactamente lo que usted desea.

1

En python-mode, puede marcar una región (C-space, mover el cursor) y presionar C-c > para sangrar 4 espacios.

Cuestiones relacionadas