Cu Mxalign-regexp
RET\(\s-*\) =
RET1
RET0
RETn
(nb c'è uno spazio dopo il '=', ma non è molto evidente.)
Vale a dire ...
Utilizzare un argomento prefisso per indicare a align-regexp
di chiedere più parametri di quanti ne faccia per impostazione predefinita.
Vedi C-h falign-regexp
e C-h valign-rules-list
per i dettagli, ma in breve:
\(\s-*\)
è il 'gruppo' di default per la cancellazione/espansione. Aggiungiamo il nostro modello alla fine di questo: '='. (Si noti che \s-
è sintassi regexp di Emacs per spazi bianchi.)
1
si riferisce semplicemente al gruppo 1 tra parentesi (come sopra). Questo è l'impostazione predefinita.
0
per la spaziatura da utilizzare tra le due parti della linea. Di default questo è 1 ed è il motivo per cui sei finito con uno spazio aggiuntivo.
n
per non allineare eventuali corrispondenze di pattern successivi dopo il primo in ogni riga.
Edit: In realtà, il Q & A si è legato a quasi identici, e funziona bene per me su Emacs 23.2.1, quindi questo è un duplicato, ma per continuare e rispondere alla aspetto chiave vincolante:
È possibile associare quella (o qualsiasi) sequenza tramite i macro della tastiera. Ecco il risultato finale, che probabilmente puoi aggiungere al tuo file di init, anche se ti consiglio di seguire tu stesso il processo. Usa quello che ti piace al posto di C-c a
per la chiave. C-c (letter)
e F5-F9 sono riservati agli utenti finali per associare a loro piacimento, quindi uno di questi sarà sicuro di essere danneggiato dalla mappa dei tasti di una modalità.
(global-set-key (kbd "C-c a") (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([21 134217848 97 108 105 103 110 45 114 101 103 101 120 112 return 32 61 32 return return backspace 48 return 110] 0 "%d")) arg)))
ho fatto da:
- selezione del testo.
- F3 per avviare la registrazione.
- esecuzione del
align-regexp
come sopra (facendo attenzione a digitare tutto testualmente, e non utilizzare la cronologia minibuffer o lo yanking).
- F4 per interrompere la registrazione.
- C-x C-k n
align-single-equals
RET per dare un nome alla macro
- M-x
insert-kbd-macro
RETalign-single-equals
RET per ottenere la lisca.
- Avvolgere l'espressione
(lambda)
con (global-set-key)
per collegarlo. (Anche se si potrebbe anche utilizzare il codice (fset 'align-single-equals ...)
come previsto, e quindi associare la chiave di quel simbolo.
Se si commette un errore durante la registrazione di una macro complicata, non preoccupatevi — Emacs fornisce davvero un buon editor di macro che puoi usare per correggere eventuali errori dopo aver terminato la registrazione (basta digitare Cx Ck e), quindi non è necessario essere perfetti
modifica 2: può anche aggiungere un esempio di funzione, come da commenti
(defun my-align-single-equals()
"Align on a single equals sign (with a space either side)."
(interactive)
(align-regexp
(region-beginning) (region-end)
"\\(\\s-*\\) = " 1 0 nil))
(global-set-key (kbd "C-c a") 'my-align-single-equals)
Grazie. Sono stato in grado di utilizzare la tua soluzione ma ho creato una funzione invece di una macro, poiché è più leggibile per me. – Karl
Beh, questo è ancora meglio :) Una funzione è decisamente preferibile se sei felice di scrivere in chiaro, ma i macro sono molto utili se non lo sei. – phils
un po 'in ritardo per la festa, ma il modo canonico per risolverlo è aggiungere una regola a "align-rules-list" invece di scrivere la propria funzione. –