2012-06-16 17 views
10

A volte desidero che i commenti temporanei siano completamente giustificati a sinistra su una riga (//) o un blocco di righe /* */. Tuttavia, CC Mode sostituisce questo indentando automaticamente la seconda chiave. In generale, mi piace il rientro automatico per le parole chiave, ecc., Ma preferirei che fosse disabilitato per i commenti. (Aggiornamento:. Cioè Voglio disattivare il modo commento rientro è innescato dai c-cottura elettrica-combinazioni di tasti, ma i commenti dovrebbe comunque rientrare normalmente othewise)In emacs, come disabilitare il rientro automatico dei commenti in C/C++?

Ho provato a mettere queste righe in .emacs, ma non impedisce il comportamento.

(c-electric-slash nil) 
(c-electric-star nil) 

risposta

8

Risposta breve:

(eval-after-load 'cc-mode 
    '(progn 
    (define-key c-mode-base-map "/" 'self-insert-command) 
    (define-key c-mode-base-map "*" 'self-insert-command))) 

Ecco come vado circa iT:

Scopri la funzione legata alla /: C-h k /

Dice "/ esegue il comando c-electric-slash, che è una funzione Lisp integrata interattiva in 'cc-cmds.el'".

(Se non vedi il link al cc-cmds.el, allora non si hanno i sorgenti elisp installati. Supponendo che non sei su Windows, è possibile utilizzare il gestore di pacchetti del sistema per installare il pacchetto emacs-el e provare di nuovo.)

Seguire questo collegamento per aprire cc-cmds.el. La ricerca di c-electric-slash non trova altro che la definizione della funzione, quindi le chiavi non sono associate in questo file. Ricerca in cc-mode.el da questa directory rivela:

(define-key c-mode-base-map "/" 'c-electric-slash) 

Ora sappiamo il nome della "mappa della tastiera", in cui eseguire l'override del / combinazione di tasti.

Se si aggiunge qualcosa di simile al file init, probabilmente otterrete un errore all'avvio:

(define-key c-mode-base-map "/" 'self-insert-command) 

... perché il file di inizializzazione viene caricato prima cc-mode.el è, e c-mode-base-map non è definito. Quindi usiamo eval-after-load (come in cima alla mia risposta). Il primo argomento, 'cc-mode, deve corrispondere all'istruzione provide alla fine di cc-mode.el. Se non sai cosa significa il progn, fai C-h f progn.

Se ti piace questo stile di apprendimento/scoperta di Emacs, potresti prendere in considerazione la lettura del mio "How to learn Emacs".

+0

Brillante! Che bella spiegazione! .. e funziona anche :) :) Grazie ... e io ' –

+0

Suggerimento: Aggiorna questo per usare 'with-eval-after-load' –

+0

Per quello che vale, ho avuto problemi con questo problema durante la creazione di una modalità principale derivata da' c-mode'. aggiungendo le due linee 'define-key' alla definizione della keymap della mia modalità (e cambiando' c-mode-base-map' al nome della mia mappa locale), sono stato in grado di eliminare questo comportamento. – ohruunuruus

0

suggerisco di guardare ai c-indent-comment-alist & c-indent-comments-syntactically-p variabili. Vedere ulteriori informazioni in aiuto per questo variabili (C-h v) e nelle sezioni "Customizing Indentation" e "Style Variables" del manuale CC-mode

+0

Non ho ancora letto tutto (per non parlare del nuovo gergo di emacs), ma ho la sensazione che il tuo suggerimento cambi *** quanto è indentato.Non voglio cambiare il comportamento dell'indentazione: voglio che le righe di commento indentino normalmente nella maggior parte delle situazioni, ma non voglio * (c-electric-slash * e * (c-electric-star * per dettare che la rientranza si verifica *** quando vengono premuti *** '/' o '*' Forse è semplice come re-legare i tasti '/' e '*' dalle funzioni * electric * a 'self-insert-command' , ma solo per * CC Mode * (questo è il bit che non so come fare) –

Problemi correlati