2009-06-12 10 views
25

Quando sto provando a incollare del codice dal browser in Emacs, esso indurrà automaticamente il codice, c'è un modo per fermare Emacs dall'indentazione temporanea come : set paste in vim?Qualsiasi comando Emacs come paste-mode in vim?

+5

Stai incollando in un terminale? Questo non dovrebbe accadere se si incolla nella GUI Emacs che ottiene l'incolla "direttamente"; quando stai incollando il terminale è come digitare tutti questi caratteri uno per uno. – ShreevatsaR

+1

Ciò si verifica in tutte le modalità/buffer? O solo alcuni? Hai provato a incollare in Emacs quando avvii emacs senza le tue personalizzazioni (ala 'emacs -q')? –

+0

Non sapevo di "incolla", grazie! – andrewdotn

risposta

23

Il modo più semplice con emacs24 è:

M-x electric-indent-mode RET 

che disattiva l'indentazione automatica.

Incolla la tua cosa.

renable

M-x electric-indent-mode RET 

O semplicemente M-x UP-Arrow ;-)

+0

Mi piacerebbe poter aggiungere un hook in modo che quando si incolla, questo viene automaticamente disabilitato e quindi riattivato. Qualcuno ha qualche idea? – ohruunuruus

+0

Penso che potreste avere la vostra chiave che sovrascrive Cc e chiamare una funzione che esegue questa operazione, chiama l'incolla da CUA o altri https://www.emacswiki.org/emacs/CuaMode – Maresh

-1

Si potrebbe provare

c-toggle-syntactic-indentation 
+0

c-toggle-syTtactic-indentation – PanCrit

+0

Grazie per aver catturato l'errore di battitura. Fisso. – mamboking

13

Passare nel buffer *scratch* (o anche solo per qualche tampone inesistente, ma sarà in modo fondamentale, che non deve fare alcun autoindentazione meno che non si hanno in qualche modo configurato per farlo), digitare C-SPC per avviare la regione, incollare il testo, digitare C-w per tagliarlo in Emacs, tornare al buffer originale, digitare C-y da incollare.

+0

Questa è una buona soluzione, anche se non * abbastanza * la stessa cosa. Ad esempio, noto che questo fornisce ancora un avviso per parentesi non corrispondenti, quando si incolla nel testo (in un'istanza di Emacs basata sul terminale) che ha uno smiley. (':)') Sarebbe bello avere una sorta di "modalità" (usando quel termine molto liberamente) che spegne tutte queste cose (perché possono rendere l'incollaggio molto lungo, se è una grossa fetta di testo). Tuttavia, questo aggira alcuni aspetti, almeno - e risolve chiaramente il problema principale del richiedente originale. – lindes

+0

Questo non funziona per molti input. Il motivo è che quando si incolla il testo codificato di windows/dos, \ r \ n forza l'aspetto di una scheda. Passa il file su Windows per unire le terminazioni di linea, se possibile, e si ferma – easytiger

+0

Incollare nel buffer zero rimuove tutti i rientri per me. Vorrei conservare il rientro che era originariamente presente nel testo copiato. La soluzione che disabilita i lavori in modalità indent elettrico. – ishmael

3

Una soluzione rapida per Python è quello di incollare in un blocco """ ... """.

2

comando yank come prefisso C-uC-y restituirebbe senza indentazione. Funziona con Emacs 25.

+0

@Bae felice che il mio commento abbia aiutato, quindi Ho fatto una risposta da questo. – 4e6