2011-08-02 10 views
22

Quiero sangrar y toda la región n espacios a la derecha o a la izquierda. Puedo hacer esto en algunos modos con C-c> y C-c <, pero me gustaría hacer esto en general.¿Cómo sangrado n espacios en emacs?

Si necesito cambiar mis .emacs para hacer esto eficiente (con un atajo de teclado como el anterior) está bien.

+6

¿Qué pasa con los estrechos votos? Las preguntas de How-do-I-do-foo para emacs han estado en SO por años, y la necesidad de algunas personas de mezclar todo no cambia eso. –

+1

Estado [discutido en meta en repetidas ocasiones] (http://meta.stackoverflow.com/search?q=emacs), también (aunque con pocas conclusiones). Lo mejor del lote es probablemente [¿Podemos tomar una decisión sobre las preguntas de Emacs en SO?] (Http://meta.stackexchange.com/q/79659/2509) donde la respuesta principal concluye que pertenecen a Stack Overflow. – dmckee

+2

Sí, es un poco frustrante, pero dudo que veamos ninguna política al respecto. La recomendación que vi fue que, debido a que no existe un solo sitio claro al que pertenezcan todos (y la idea de un sitio SE específico de Emacs fue aparentemente rechazada), generalmente deberían dejarse donde el usuario original los puso. – phils

Respuesta

9

creo que la paz de la siguiente código puede ayudarle a:

;; Shift the selected region right if distance is positive, left if 
;; negative 

(defun shift-region (distance) 
    (let ((mark (mark))) 
    (save-excursion 
     (indent-rigidly (region-beginning) (region-end) distance) 
     (push-mark mark t t) 
     ;; Tell the command loop not to deactivate the mark 
     ;; for transient mark mode 
     (setq deactivate-mark nil)))) 

(defun shift-right() 
    (interactive) 
    (shift-region 1)) 

(defun shift-left() 
    (interactive) 
    (shift-region -1)) 

;; Bind (shift-right) and (shift-left) function to your favorite keys. I use 
;; the following so that Ctrl-Shift-Right Arrow moves selected text one 
;; column to the right, Ctrl-Shift-Left Arrow moves selected text one 
;; column to the left: 

(global-set-key [C-S-right] 'shift-right) 
(global-set-key [C-S-left] 'shift-left) 

Puede reemplazar el (shift-region 1) y la (shift-region 1) por el valor que desee.

EDIT: Como se puede ver, mi función envuelve guión rígidamente-:

guión-rígida es una función Lisp compilado interactiva en `indent.el'.

Está obligado a C-x TAB.

(indent-rígidamente START ARG END)

sangría todas las líneas que comienzan en la región de lado por columnas ARG. Llamado desde un programa, toma tres argumentos, START, END y ARG. Usted puede eliminar toda la sangría de una región dando un gran negativo ARG.

8

También son útiles los rectangle commands que operan en rectángulos de texto en lugar de líneas de texto.

Por ejemplo, después de marcar una región rectangular,

C-x r o insertos espacio en blanco para llenar la región rectangular (cambiando efectivamente código a la derecha) C-x r k mata la región rectangular (cambiando efectivamente código a la izquierda)

12

La parte clave de la respuesta de Sandro es la llamada al indent-rigidly.

C-x TAB (translated from C-x <tab>) runs the command indent-rigidly, 
which is an interactive compiled Lisp function in `indent.el'. 

It is bound to C-x TAB. 

(indent-rigidly start end arg) 

Indent all lines starting in the region sideways by arg columns. 
Called from a program, takes three arguments, start, end and arg. 
You can remove all indentation from a region by giving a large negative arg. 

Así, región de marcas, introduzca arg numérico, pulse C-x TAB.

26

Lo que funciona para mí es: seleccionar una región y luego C-u <number of spaces> C-x TAB

actualización

@Eric Podríamos definir una función y se unen a un teclado atajo, por ejemplo, C-x C-TAB. Intenta agregar esto a tu configuración de emacs.

(defun insert-tabs (n) 
    "Inserts N number of tabs" 
    (interactive "nNumber of tabs: ") 
    (dotimes (i n) 
    (indent-for-tab-command))) 

(global-set-key [?\C-x \C-tab] 'insert-tabs) 
+0

Esto funciona muy bien, pero no puedo recordarlo. ¿Algún consejo? (Aparte de marcar esta página.) –

+0

@EricWilson Hola Eric, actualicé la respuesta con otra sugerencia. – armandino

+0

Bonita función, pero lo que realmente me gustaría sería una pista sintética de los comandos que se ejecutan. ¿'C-u' significa algo en sí mismo? –

0

Use cua-mode.

M-x cua-mode a activa, C-RET para seleccionar la primera columna de toda la región, y el espacio tipo, por último, esc tres veces para escapar, hecho ~

Cuestiones relacionadas