2009-05-05 15 views
22

Sto appena iniziando a farmi un'idea di emacs, ma sono frustrato dalla tendenza a non rientrare quando premo il tasto Invio. So che se premo C-j lo farà, ma non riesco a entrare in quell'abitudine. Non posso. Ho bisogno di colpire il ritorno, e odio ripetere il tablatura ogni volta.Come faccio a rendere Emacs auto-indent il mio codice C?

Sono entrato nelle opzioni e ho trovato la modalità C hook e la modalità C++ hook, ecc. E hanno definito due keymappings (10 e 13, e ho ricordato che 0A e 0D sono CR/LF perché li ho usati molto in assemblea) - Ho capito dal momento che uno ha detto "(lambda nil (define-key lisp-mode-map [13] (quote newline-and-indent))" e l'altro lo stesso, ma con (quote newline) invece, ho appena messo il -and-indent alla fine e ho pensato che avrebbe funzionato.

Ma non è così: l'ho impostato e salvato, provato, senza risultato. Emacs riavviato, ancora senza successo. Come faccio a indentare il mio codice? È terribilmente folle che emacs richieda una laurea in lisp solo per configurarlo per le tue necessità di base.

Inoltre, come una sorta di domanda secondaria: come si copia e si incolla dagli appunti ? Uccidere/strattonare è comodo e tutto, ma io odio andare edit-> copiare ogni volta che voglio incollarlo da qualche altra parte.

- EDIT -

va bene, ho messo le seguenti righe nel mio .emacs e ha funzionato:

(add-hook 'c-mode-common-hook (lambda() 
     (local-set-key (kbd "RET") 'newline-and-indent)))

grazie per l'aiuto

+4

perché il biasimo sul "grado lisp"? In emacs, è necessario l'opzione (!) Per configurare TUTTO. E con questo in mente, la lisp è stata un'ottima decisione al momento giusto. A seconda dell'era, quando è stato inventato Emacs. I moderni IDE dettano, cosa potresti cambiare e cosa potresti non sapere, quindi potresti decidere, qual è il suo stile di lavoro ... –

+1

un'esagerazione per esprimere la mia frustrazione, sapevo che emacs era programmabile con il lisp (o elisp o altro) ma Non mi aspettavo che fosse un requisito - ho pensato, in modalità finestra potrebbe esserci un frontend per alcune delle impostazioni più semplici. Come indentare quando premi Invio. –

+6

"perché il rant?" Peter, stai seriamente difendendo l'usabilità dell'elis come meccanismo di configurazione? Ciao! – Cheeso

risposta

14

Dai un'occhiata alla emacswiki - autoindent

Come suggerito là, inserire codice seguente nel vostro .emacs

(defun set-newline-and-indent() 
    (local-set-key (kbd "RET") 'newline-and-indent)) 
(add-hook 'c-mode 'set-newline-and-indent) 

È possibile personalizzare la variabile C Predefinito Styl. In emacs vai su Opzioni-> Personalizza Emacs-> Opzione specifica, quindi digita c-default-style e imposta la tua scelta. In questo modo, non è necessario premere TAB. Digita dall'inizio della riga e quando premi ";" , sarà automaticamente rientrato.

Spero che questo aiuti

+0

l'opzione c-default-style mi ha fornito un elenco di lingue dietro le caselle di controllo e, dopo il nome della lingua, il nome è stato digitato di nuovo ... Non capisco come questo faccia chiamare CR newline-and-indent –

+0

variabile imposta lo stile di indentazione; La modalità CC viene utilizzata per diverse lingue simili a C e puoi impostare lo stile di indentazione per ciascuna lingua. Leggi il manuale amichevole per scoprire quali sono gli stili. –

1

Prova [ENTER], (kbd "invio") o (leggi-kbd-macro "invio"), fanno tutti cose leggermente diverse;)

Inoltre, per me copia/incolla solo opere. Puoi provare a eseguire emacs -q e vedere se funziona? Se lo fa, potrebbe essere un problema con il tuo .emacs.

ho anche:

(when window-system 
    ;; use extended compound-text coding for X clipboard 
    (set-selection-coding-system 'compound-text-with-extensions)) 

ma che potrebbe fare qualcosa di diverso;)

0

copia: mossa per iniziare, CTRL-spazio, si muovono alla fine, ALT-W

incollare: CTRL-y

su UNIX: sinistro del mouse per copiare, destra il mouse per incollare

6

In aggiunta agli altri suggerimenti, provare C-c C-a per attivare o disattivare la funzione di auto-ritorno a capo in modo che il modeline legge C/la. Quindi non è nemmeno necessario premere Invio la maggior parte del tempo; invece, quando digiti un punto e virgola o una parentesi graffa, vengono inserite le nuove righe e il codice viene rientrato.A volte è necessario premere Invio e non si ottiene l'autoindentazione (a meno che non si ricolleghi RET, come suggerito in un'altra risposta), ma se si inizia a digitare comunque la riga successiva, si potrebbe notare che viene indentato correttamente quando si digita un po ' carattere di punteggiatura.

per iniziare con il vostro "grado Lisp", tipo C-h i per il browser Info e passare al nodo per "Modalità CC" (che è separata dal nodo per Emacs, tipo d per directory e trovare modalità CC lì) .

17

ho impostato il tasto invio globalmente agire come un new-line-e-intenzione nel mio file ~/.emacs:

(global-set-key "\C-m" 'newline-and-indent) 

funziona per me.

+0

Mi sono imbattuto in questo, perché le risposte accettate non funzionano per me, mentre questo fa. Non so se è perché sto usando Emacs 23 o cosa, ma usando (kbd "RET") mi viene sempre assegnata "Funzione non valida". –

5

Se si desidera far rientrare l'intero file C/C++, basta fare

  1. marchio tutto: CTRL-x h
  2. premere TAB

Che, a proposito, funziona anche per xml, codice python e altri tipi.

0

Il modo più semplice per farlo è utilizzare electric-indent-mode. Se si desidera attivare manualmente, basta fare

M-x electric-indent-mode 

Per abilitarlo automaticamente, dire quanto segue nel .emacs:

(electric-indent-mode) 

Questa sarà l'impostazione predefinita in Emacs 24.4.

Problemi correlati