Es gibt Zeiten, in denen ich Dateien bearbeite (z. B. Puppet-Manifeste), in denen ich den Pufferinhalt spontan ausrichten möchte. Ich weiß zum Beispiel, dass ich Code wie diesen verwenden align-regexp
oder align
ausrichten kann, solange ich ihn ausgewählt habe:
# M-x align-regexp "=>" will line everything up nicely
file { "/etc/foo":
ensure => present,
mode => "0666",
source => "puppet:///modules/example/foo",
}
Aber was ich wirklich will , ist , damit dies geschieht hat im Fluge - ohne eine Region oder den gesamten Puffer auswählen zu müssen. Gibt es ein Paket oder einen Modus, die dies tun, oder müsste dies in den Modus eingebaut werden, der mich interessiert?
Bearbeiten: Ich habe nach Puppet und CFEngine gefragt, da ich das in diesen Tagen meistens codiere und ausgerichteten Text sehr bevorzuge. Ich war jedoch auch neugierig (und habe dies nicht gut ausgedrückt) zu wissen, ob die Direktausrichtung eine in Emacs-Modi übliche Funktion ist (hauptsächlich in Modi für Programmiersprachen) oder ob sich die meisten Leute beim Speichern oder bei manchen ausrichten anderer Punkt.
indent-region
mitalign-to-equals
und definieren Sie diese Funktion als(defun align-to-equals (begin end) (interactive "r") (align-regexp begin end "\\(\\s-*\\)=" 1 1 nil))
; undemacs-lisp-mode-hook
mitpuppet-mode-hook
.Antworten:
Wenn Sie eine Region für die automatische Ausrichtung markieren möchten, ist es wahrscheinlich nicht allzu schwierig, mit etwas wie Folgendem umzugehen:
Wenn es jedoch vollautomatisch sein soll, müssen Sie einen Weg finden, um zu charakterisieren, welche Regionen Sie automatisch ausrichten möchten (und mit welchem regulären Ausdruck), was schwieriger ist. Ich vermute, Sie könnten einige reguläre Ausdrücke bereitstellen und dann den Puffer nach aufeinanderfolgenden Zeilen durchsuchen, die mit einem dieser regulären Ausdrücke übereinstimmen.
quelle
my-auto-align
werden diese Überlagerungen definiert (markieren Sie die Bereiche, die ausgerichtet werden sollen). Der Grund, warum Stefan (glaube ich) all diese Probleme durchmacht, ist, dass (anders als beim Einrücken), wenn Sie nur versuchen, den gesamten Puffer auszurichten, unerwünschte Ergebnisse erzielt werden, sodass Sie die Teile nacheinander ausrichten müssen.Marionettenmodus bietet
puppet-align-block
. Sie können veranlassen, dass diese Funktion automatisch aufgerufen wird, z. B. indem Sie siepost-command-hook
lokal hinzufügen (ungetestet):Beachten Sie jedoch, dass es einen guten Grund gibt, dies nicht zu tun. Es ist nicht besonders clever und überschreibt jede manuelle Ausrichtung, die Sie irgendwo vornehmen, was besonders schlimm ist, wenn die automatische Ausrichtung für etwas gewundenen Puppet-Code nicht funktioniert.
Daher empfehle ich, als Betreuer des Puppet-Modus, dagegen zu sprechen, und wir werden Ihnen nicht helfen oder Fehlerberichte akzeptieren, wenn Sie diesen Code verwenden.
Außerdem kann es bei großen Ressourcenblöcken langsam sein, sodass Sie wahrscheinlich einen Leerlaufzeitgeber anstelle von
post-command-hook
direkt verwenden möchten .quelle