C'è un modo per contrassegnare il testo in emacs e spostarlo a sinistra (rimuovendo gli spazi iniziali) per spazio/granularità Tab?Diminuire il rientro su un paio di righe
Stesso modo che farei su qualche altro editor con Shift + Tab.
C'è un modo per contrassegnare il testo in emacs e spostarlo a sinistra (rimuovendo gli spazi iniziali) per spazio/granularità Tab?Diminuire il rientro su un paio di righe
Stesso modo che farei su qualche altro editor con Shift + Tab.
In genere emacs posiziona le cose in base allo stile corrente quando si preme <TAB>
, quindi naturalmente qui è un po 'diverso. La cosa più vicina che viene in mente è M-\
che fa crollare lo spazio bianco orizzontale attorno al punto. Se si desidera rimuovere un "rettangolo" di spazio prima delle linee, quindi delete-rectangle
potrebbe essere più appropriato, che è possibile eseguire impostando il segno e il punto di spostamento per selezionare il rettangolo e quindi utilizzando C-x r d
.
Sembra che il problema che stai cercando di risolvere sia un rientro non corretto del codice quando stai tagliando/incollando. Puoi risolverlo rindentando automaticamente il testo con qualcosa di simile al seguente.
Nota: Utilizzando un forze argomento prefisso non ri-indentazione (C-u C-y), più c'è la variabile soglia dimensionale.
;; automatically indenting yanked text if in programming-modes
(defvar yank-indent-modes '(emacs-lisp-mode
c-mode c++-mode
tcl-mode sql-mode
perl-mode cperl-mode
java-mode jde-mode
lisp-interaction-mode
LaTeX-mode TeX-mode)
"Modes in which to indent regions that are yanked (or yank-popped)")
(defvar yank-advised-indent-threshold 1000
"Threshold (# chars) over which indentation does not automatically occur.")
(defun yank-advised-indent-function (beg end)
"Do indentation, as long as the region isn't too large."
(if (<= (- end beg) yank-advised-indent-threshold)
(indent-region beg end nil)))
(defadvice yank (after yank-indent activate)
"If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)."
(if (and (not (ad-get-arg 0))
(member major-mode yank-indent-modes))
(let ((transient-mark-mode nil))
(yank-advised-indent-function (region-beginning) (region-end)))))
Sono sicuro che questo codice funzioni bene, ma [auto-indent-mode.el] (https://github.com/mlf176f2/auto-indent-mode.el/) è mantenuto attivamente e ha più funzionalità. Sebbene la soglia sia un'ottima idea. –
@event_jr Non capisco il punto su qualcosa che viene mantenuto attivamente. Ho scritto il codice sopra più di 3 anni fa e non ho avuto bisogno di "mantenerlo", fa la cosa singola che dovrebbe fare abbastanza bene ... –
Lo fa - e molte altre cose per assicurarsi che il codice viene rientrato automaticamente in modo corretto. Più funzionalità significano più ma più possibili interazioni negative con altre modalità. Quindi è importante che l'autore ci stia lavorando attivamente. –
indent-rigidly
) per applicare il rientro alla regione.Questo è molto più complesso di quello S-TAB, ma è secondo me una sorta di ultima istanza nel caso in cui Emacs formattazione non risolve il problema.
MODIFICA: soluzione molto migliore: Shift a region or line in emacs (risposta accettata). Questo è quello che sto attualmente usando in Emacs per cambiare indentazione. ATTENZIONE: riguarda alcuni Emacs Lisp.
Grazie. Cosa succede se voglio aumentare o diminuire il numero di schede (anziché spazi) in rientro di un paio di righe? – Tim
Basta moltiplicare il valore dopo C-u con larghezza tab. –
@Tim un modo migliore è descritto qui - http://stackoverflow.com/questions/3156450/shift-a-region-or-line-in-emacs (risposta accettata) –
Questo potrebbe essere più semplice e visivamente più intuitivo: prima assicurati che cua-mode
sia abilitato (M-x cua-mode
lo attiva). Quindi vai all'inizio della riga e premi C-return
. Viene visualizzato un rettangolo rosso. Ora sposta il cursore verso il basso e verso destra per far crescere il rettangolo secondo necessità. Quindi premere C-d
per eliminarlo. Questo è tutto.
Mi imbatto spesso in questo problema quando la modalità principale non determina alcuna indentazione automatica (o quando si incasina).
C'è molto di più si può fare con i rettangoli di cua-mode, vedere http://trey-jackson.blogspot.com/2008/10/emacs-tip-26-cua-mode-specifically.html
io non sono sicuro di ottenere quello che vuoi dire. Potresti per favore elaborare la tua spiegazione? –
Molte modalità emacs hanno il rientro automatico: quando si preme [tab] in qualsiasi punto della linea, si fa rientrare la riga dove dovrebbe essere. Raramente mi devo preoccupare di indentare manualmente qualsiasi cosa - ho solo lasciato che l'editore facesse il lavoro per me. –
Vorrei poter fare il contrario di ciò che fa "Tab"; ho bisogno di solito quando copio il codice passato posizionato diversamente da un altro file. – sramij