Cu Mxalign-regexp
RET\(\s-*\) =
RET1
RET0
RETn
(nb istnieje przestrzeń po '=', ale to nie jest bardzo oczywiste.)
Co oznacza ...
Użyj argumentu prefiksu, aby powiedzieć align-regexp
, aby poprosić o więcej parametrów niż domyślnie.
Patrz CH Falign-regexp
i CH valign-rules-list
do szczegółów, ale w skrócie
\(\s-*\)
jest domyślnym „grupa” do usuwania/ekspansji. Dodajemy nasz wzór do końca tego: '='. (Zauważ, że \s-
jest składnią regexp Emacsa dla białych znaków.)
1
odnosi się po prostu do nawiasowanej grupy 1 (jak wyżej). To jest domyślne.
0
dla odstępu używanego między dwiema częściami linii. Domyślnie jest to 1 i właśnie dlatego otrzymujesz dodatkowe miejsce.
n
, aby nie wyrównywać żadnych późniejszych dopasowań wzorców po pierwszym w każdym wierszu.
edit: Faktycznie, Q & Â związana jest blisko identyczne, i działa dobrze dla mnie na Emacsa 23.2.1, więc jest duplikat, ale nadal i odpowiedzieć na kluczowe aspekty wiążące:
Możesz powiązać tę (lub dowolną) sekwencję za pomocą makr klawiatury. Oto wynik końcowy, który prawdopodobnie możesz dodać do pliku init, chociaż zalecam, aby samemu przejść przez ten proces. Użyj tego, co chcesz zamiast klucza w celu uzyskania numeru C-c a
. C-c (letter)
i F5-F9 są zarezerwowane dla użytkowników końcowych, aby wiązali się, jak im się podoba, więc jeden z nich będzie bezpieczny przed byciem spętanym przez mapę klawiszy trybu.
(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)))
Zrobiłem to przez:
- zaznaczając tekst.
- F3, aby rozpocząć nagrywanie.
- wykonanie
align-regexp
jak wyżej (uważając, aby wpisać wszystko dosłownie, a nie używać historii minibuffer lub szarpanie).
- F4, aby zatrzymać nagrywanie.
- C-X-C, K n
align-single-equals
RET otrzymując makro nazwę
- M-X
insert-kbd-macro
retalign-single-equals
ret GET LISP.
- Zawijanie wyrażenia
(lambda)
za pomocą (global-set-key)
w celu powiązania go. (Chociaż można też użyć kodu (fset 'align-single-equals ...)
przewidziane, a następnie wiążą klucz do tego symbolu.
Jeśli pomylisz się podczas nagrywania skomplikowaną makro, nie denerwować — Emacs zapewnia naprawdę dobry edytor makro, które można użyć, aby naprawić wszelkie błędy po zakończeniu nagrywania (wpisz Cx Ck e), więc nie muszą być idealne
edit 2:. może również dodać przykład funkcja, zgodnie z komentarzami:
(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)
Dzięki. Byłem w stanie użyć twojego rozwiązania, ale stworzyłem funkcję zamiast makra, ponieważ jest dla mnie bardziej czytelna. – Karl
Cóż, to jeszcze lepiej :) Funkcja jest zdecydowanie lepsza, jeśli jesteś zadowolony z pisania selp, ale makra są bardzo przydatne, jeśli nie. – phils
trochę spóźniony na imprezę, ale kanonicznym sposobem rozwiązania tego problemu jest dodanie reguły do "align-rules-list" zamiast pisania własnej funkcji. –