Indentazione di Emacs tramite le schede


8

Esiste un modo per rendere il codice di rientro di Emacs usando solo le schede a livello globale e non gli spazi. Conosco il comando tabify. Preferirei il rientro automatico per utilizzare le schede anziché una combinazione di schede e spazi come fa la configurazione predefinita.

Risposte:


7

Bene, per rientrare con le schede, ti consigliamo di assicurarti che indent-tabs-modesia t(che è il valore predefinito). Ma per ottenere solo le schede, dovresti regolare la modalità che sta facendo il rientro in modo tale che ogni riga sia rientrata da un multiplo del tuo tab-width(valore predefinito 8). Ad esempio, in modalità C, è possibile provare a impostare c-basic-offset8.

Oppure, potresti ridurre il tab-widthvalore a un valore inferiore, in modo che Emacs non debba utilizzare gli spazi per raggiungere ogni livello di rientro. Ma se lo fai, tutti gli altri che devono lavorare sul tuo codice (e usa i punti di tabulazione standard di 8 caratteri) si arrabbieranno.

Ti esorto a riconsiderare. Personalmente, trovo fastidioso lavorare sul codice indentato con le schede, specialmente se non sembrano essere 8 schede spaziali. (Il peggio è il codice in cui alcune linee usano gli spazi, alcune linee usano le schede e chiaramente non sono 8 le schede degli spazi.) Facciamo a tutti un favore e solo (setq indent-tabs-mode nil).


Vorrei sottolineare questa domanda per la seconda larghezza delle tab delle impostazioni del paragragh e il commento non mescola tab e spazi. Ma se la larghezza della scheda è impostata, la modifica del rientro è molto più semplice con una scheda per ogni livello anziché diversi spazi
user151019

Penso che il tuo terzo paragrafo sia generalmente utile, ma spesso non riusciamo a controllare lo stile di rientro dell'autore originale, ad esempio, a cui stiamo inviando richieste pull / merge. Ho le mie preferenze, hanno le loro. Penso che sia rispettoso usare il loro stile di rientro a un livello ragionevole, quindi a volte la scelta non è nostra .
r2evans,

7

Emacs viene fornito con diversi stili predefiniti per il rientro in C, oppure puoi scrivere il tuo se nessuno soddisfa i tuoi bisogni. Tra gli stili standard , sembra che tu stia cercando linux(lo stile usato nel sorgente del kernel Linux), che ha rientri di 8 colonne e usa caratteri di tabulazione di larghezza 8.

Puoi rendere queste impostazioni il tuo stile predefinito per C inserendolo nel tuo .emacs:

(setq c-default-style "linux")
(defun my-c-mode-hook ()
  (setq indent-tabs-mode t)
  (setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)

Assicurati di non usare queste impostazioni quando collabori con altre persone con preferenze diverse. In particolare, l'uso delle schede ti farà clistere. Se un determinato file deve essere mantenuto in uno stile particolare, puoi utilizzare le variabili del file per assicurarti che tutti coloro che modificano il file in Emacs utilizzino le stesse impostazioni:

/*
 * Local Variables:
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * End:
 */

Se si dispone di un intero progetto con file C con rientro simile, utilizzare le variabili di directory anziché inquinare tutti i file. Crea un file chiamato .dir-locals.elcon contenuti come il seguente:

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))

1

Le schede mi infastidiscono, ma ho dovuto capire come fare in modo che emacs usasse solo le schede per rientrare in modo da poter lavorare sul codice di qualcun altro. Ecco cosa ha funzionato per me:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

Ho notato che prima di scherzare con qualsiasi cosa, quando ho premuto il tasto Tab, è rientrato automaticamente da 2 colonne. L'impostazione di "larghezza della scheda" in modo che corrisponda all'offset di 2 colonne ha permesso a emacs di utilizzare le schede durante la formattazione automatica. Stavo lavorando in modalità nxml, ma penso che dovrebbe funzionare per qualsiasi modalità.


Bello. Anche questo mi ha infastidito. Non è intuitivo dover impostare la larghezza della scheda in modo che corrisponda all'offset della colonna. Buon lavoro. Ho usato questa idea in modalità c ++
Sean Lynch il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.