2010-01-13 1 views
19

Ci sono volte in cui ho uno snippet di codice che voglio postare su un tracker di difetti, wiki, forum, ecc. Ma è profondamente rientrato nel codice. Di solito devo evidenziare lo snippet di codice, premere < shift> - < tab> fino a quando i rientri non sono così male, quindi copiare/incollare e quindi ripristinare il codice. Diventa un po 'doloroso.Frammenti di codice non indentati

C'è uno strumento che può rimuovere le schede di fronte a ciascuna riga? Si noti che non voglio rimuovere tutte le schede da tutte le linee, solo lo stesso numero precedente di schede di ogni riga. Sto pensando che alcune funzioni di Emacs potrebbero farlo.

Ecco un esempio estremo:

Prima:

 
          //This is usually some method in an anonymous inner class' anonymous inner class. 
          @Override 
          public void method(){ 
           doSomething(); 
          } 

Dopo:

 
//This is usually some method in an anonymous inner class' anonymous inner class. 
@Override 
public void method(){ 
    doSomething(); 
} 

Notate come doSomething() ha ancora una sola scheda di fronte ad essa.

+0

@Roger: Grazie per il commento. Ho riformulato la domanda. – User1

risposta

38

rettangolo di selezione è il mio modo preferito di fare questo.

Mettiti all'inizio della prima linea, C-spazio, andare all'ultima riga, e la fine del rientro che si desidera rimuovere e Cxrk (kill rettangolare) . Questo lo fa

+0

Non mi piace questo metodo, poiché lo spazio bianco è il problema da rimuovere solo da spazi bianchi, questo metodo rimuove tutti i caratteri nella regione. –

+0

Questo è il modo in cui l'ho sempre fatto anche io. Ma mi piace la soluzione indent-rigidly @ http://stackoverflow.com/questions/2060442/unindenting-code-snippets/2060803#2060803 –

+1

Ho dovuto leggerlo un paio di volte per capire "vai all'ultima riga e la fine della rientranza ". Ora l'uccisione rettangolare ha senso. Se solo ci fosse una funzione emacs che potrebbe automaticamente uccidere il rettangolo, copia il codice negli appunti, quindi annulla l'uccisione. – User1

-3

In vi, è solo << spostarsi a sinistra di una larghezza di rientro, quindi a 10 righe non trascinate, si farebbe 10<<.

0

Utilizzare un'espressione regolare per rimuovere gli spazi bianchi iniziali.

In Emacs:

C-M-%^<TAB><TAB><TAB><ENTER><ENTER>! 

In Vim:

:%s/^\t\t\t//g 
+0

Rimuove solo le prime 3 schede su ogni riga. Quindi un quarto o quinto trattino diventerebbe un 1 ° o 2 °. Il carattere '^' indica "inizio linea". –

+0

Questo non risponde alla domanda, a meno che tu non stia suggerendo seriamente di copiare il testo da emacs, incollarlo in vim, modificarlo e copiarlo per incollarlo altrove, e questa non sembra una risposta utile. Richiede anche di contare il numero di unindent, e sicuramente c'è un modo migliore. –

+1

Non ho notato il tag 'emacs', quindi la soluzione in vim. Aggiunta di una variante emacs. –

13

Il metodo effettivo per eseguire questa operazione in Emacs è con questa combinazione di tasti.

Selezionare innanzitutto la sezione da cui si desidera rimuovere le schede.

È possibile selezionare l'intero buffer:

CTRL + xh

Oppure, se si desidera solo una regione è sufficiente impostare il marchio CTRL + SPACE dove vuoi iniziare e poi navigare dove vuoi finire.

Quindi rimuovere gli spazi bianchi, per 10 caratteri spazi bianchi fare questo:

CTRL + - CTRL + xTAB


Poiché questo è abbastanza grande, lo analizzerò per te.

1) Innanzitutto si invia il comando negativo-argomento:

(negativo-argomento ARG)

KBD collegamento: CTRL + -

2) fornitura successiva l'argomento numerico , in questo caso il numero 10:

3) Poi noi chiamiamo il trattino-rigidamente comandare

(trattino-rigidamente inizio fine ARG)

kbd scorciatoia: CTRL + xTAB

Allora, cosa stiamo facendo è dare l'argomento di -10 al comando per indentare rigidamente e il risultato è che 10 caratteri di spazi bianchi saranno rimossi dall'inizio di ogni riga che abbiamo selezionato, in questo caso abbiamo selezionato l'intero documento (CTRL + xh), quindi 10 righe di spazi verranno rimosse dall'inizio di ogni riga dell'intero documento.

Se una riga specifica ha meno di 10 spazi bianchi, rimuoverà solo il maggior numero di spazi bianchi, se ci sono più di 10 spazi bianchi, alcuni potrebbero essere lasciati dopo che è finito.

Nel tuo esempio sembra che si dispone di circa 30 spazi bianchi che porta, quindi questo dovrebbe fare il trucco:

CTRL + - CTRL + xTAB

Provare un numero maggiore se si desidera rimuovere altro.

1

Il metodo che uso in kedit (che ha la capacità di fare editing colonna) è quello di segnare il primo carattere della prima colonna e riga con Alt - B, posizionare il mio cursore all'ultima riga e carattere che voglio rimuovere, Alt - B di nuovo e poi Alt - G. È andato e ha ancora tutto il rientro oltre le colonne rimosse.
In SQL Server è più facile, contrassegnare il blocco e premere maiuscole-scheda fino a quando il codice è dove lo voglio.

1

Se si conosce esattamente quante tabulazioni precedono ogni riga (come si indica), è possibile utilizzare un semplice query-replace-regex per sostituire "^\t\t\t...\t" con "".

6

Se le impostazioni di c-style di emacs sono corrette, evidenzia semplicemente lo snippet e premendo C-M-\ lo si indenterà correttamente (se ci si trova in modalità C++).