Są chwile, kiedy edytuję pliki (na przykład manifesty marionetkowe), w których chcę wyrównać zawartość bufora w locie. Na przykład wiem, że mogę używać align-regexp
lub align
wyrównywać kod w ten sposób, o ile go wybrałem:
# M-x align-regexp "=>" will line everything up nicely
file { "/etc/foo":
ensure => present,
mode => "0666",
source => "puppet:///modules/example/foo",
}
Ale tak naprawdę chcę, aby stało się to w locie - bez konieczności wybierania regionu lub całego bufora. Czy istnieje pakiet lub tryb, który to zrobi, czy jest to coś, co musiałoby być wbudowane w tryb, który mnie interesuje?
Edycja: Pytałem o Puppet i CFEngine, ponieważ w większości przypadków to właśnie koduję i zdecydowanie preferuję wyrównany tekst. Byłem jednak ciekawy (i nie wyraziłem tego dobrze), czy wyrównanie w locie jest cechą powszechną w trybach Emacsa (głównie w trybach języków programowania), czy też większość ludzi dostosowuje się podczas zapisywania lub w niektórych inny punkt.
indent-region
sięalign-to-equals
i określają tę funkcję jak(defun align-to-equals (begin end) (interactive "r") (align-regexp begin end "\\(\\s-*\\)=" 1 1 nil))
; iemacs-lisp-mode-hook
zpuppet-mode-hook
.Odpowiedzi:
Jeśli chcesz oznaczyć region do automatycznego wyrównania, prawdopodobnie nie jest to zbyt trudne z czymś takim:
Ale jeśli chcesz, aby była w pełni automatyczna, musisz znaleźć sposób, aby scharakteryzować, które regiony chcesz automatycznie wyrównać (i z jakim wyrażeniem regularnym), co jest trudniejsze. Myślę, że możesz podać kilka wyrażeń regularnych, a następnie zeskanować bufor w poszukiwaniu kolejnych wierszy pasujących do jednego z tych wyrażeń regularnych.
źródło
my-auto-align
służy do definiowania tych nakładek (zaznacz regiony, które chcesz wyrównać). Powodem (chyba) Stefana jest ten cały problem, ponieważ (w przeciwieństwie do wcięć), jeśli po prostu spróbujesz wyrównać cały bufor, uzyskasz niepożądane wyniki, więc musisz wyrównać kawałki na raz.Tryb lalek zapewnia
puppet-align-block
. Możesz ustawić automatyczne wywoływanie tej funkcji, np. Dodając jąpost-command-hook
lokalnie (nieprzetestowane):Pamiętaj jednak, że istnieje dobry powód, aby tego nie robić. Nie jest to szczególnie sprytne i zastąpi ręczne wyrównanie, które możesz zrobić w dowolnym miejscu, co zepsuje się szczególnie źle, jeśli automatyczne wyrównanie nie zadziała w przypadku bardziej skomplikowanego kodu Puppet.
Dlatego - mówiąc jako opiekun trybu lalek - odradzam, a jeśli nie używasz tego kodu, nie pomożemy ci ani nie przyjmiemy zgłoszeń błędów.
Ponadto w przypadku dużych bloków zasobów może być powolny, więc prawdopodobnie chcesz użyć bezczynnego timera zamiast
post-command-hook
bezpośrednio.źródło