2009-02-27 12 views
12

Modifica le mie risposte StackOverflow e domande con ViewSourceWith ed Emacs. Spesso, includo il codice e StackOverflow formatting rules affermano che deve essere rientrato da quattro spazi per essere riconosciuto come tale. Farlo a mano o anche con i macro è doloroso.Utilizzo di Emacs per il rientro (passaggio 4) codice

Ho cercato nei post precedenti di SO ma non ho trovato nulla.

A partire dalla modalità di Python, ho scritto:

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

Sembra funzionare, ma sono lieto consigli, alternative, segnalazioni di bug, ecc

+0

Questa non è una domanda ... –

+0

Spero di ottenere alternative alla mia soluzione rapida o di ricevere patch interessanti. – bortzmeyer

+0

Inoltre, sembra che possa aiutare alcune persone quindi lo uso come un modo per vedere se c'è abbastanza interesse da chiedere una documentazione da qualche parte. – bortzmeyer

risposta

14

C-x TAB corre indent-rigidly. Dato un argomento numerico di quattro, farà ciò che vuoi. In alternativa, utilizzare < codice> < per introdurre il codice (vedere il primo paragrafo di Markdown Editing Help).

Edit: la vostra dichiarazione interattivo sarebbe meglio essere scritto:

(interactive "r 
p") 
+0

C-x TAB richiede che la regione sia contrassegnata. Il codice in modalità Python, che ho rubato, funziona sulla regione, se ce n'è uno, o sulla linea corrente. – bortzmeyer

+0

Vuoi dire attivo. Normalmente il rientro di una singola riga per 4 non garantisce un legame specifico. C-a SPAZIO SPAZIO SPAZIO. – kmkaplan

+0

Beh, preferisco ancora il mio metodo, ma anche queste due soluzioni sono belle. Accettato. – bortzmeyer

1

il codice sia bene a me. Penso che la reimpostazione di end in text-shift-region non sia necessaria, ma a parte questo, sembra a posto.

11

Un altro modo semplice per utilizzare la potente capacità di modifica rettangolare di emacs: imposta la tua regione a partire dall'inizio della prima riga e termina all'inizio dell'ultima riga che desideri indentare (nota: la ha di essere all'inizio della riga dal momento che non desidera sostituire il testo esistente!), quindi fare

C-x r t (string-rectangle) 

poi basta inserire 4 spazi come richiesto. Ecco! Non è necessario alcun tipo di hacking extra. Ciò ti dà anche la possibilità di inserire altre cose accanto agli spazi all'inizio o in mezzo a un gruppo di linee.

+2

Un comando ancora più semplice è Cx ro, rettangolo aperto, presupponendo che la prima o l'ultima riga della regione abbia almeno quattro caratteri: posiziona l'estremità della regione di quattro caratteri nella riga e l'altra all'inizio della riga della linea e digitare Cx r o. –

8

Utilizzare C-x TAB per indentare rigidamente (come indicato in un'altra risposta) è il modo più semplice. Contrassegna semplicemente la regione che vuoi far rientrare e premi C-u C-x TAB. Poiché il prefisso predefinito per C-u è 4, questo dovrebbe fare esattamente quello che vuoi.

1

In python-mode, è possibile contrassegnare una regione (C-space, spostare il cursore) e premere C-c > per indentare 4 spazi.

Problemi correlati