Củ Mxalign-regexp
RET\(\s-*\) =
RET1
RET0
RETn
(NB có một không gian sau khi '=', nhưng nó không phải là rất rõ ràng.)
Đó là để nói ...
Sử dụng đối số tiền tố để yêu cầu align-regexp
yêu cầu bạn cung cấp nhiều thông số hơn mặc định.
Xem C-h falign-regexp
và C-h valign-rules-list
để biết chi tiết, nhưng trong ngắn hạn:
\(\s-*\)
là mặc định 'nhóm' để xóa/mở rộng. Chúng tôi nối thêm mẫu của chúng tôi vào cuối: '='. (Lưu ý rằng \s-
là cú pháp regexp Emacs cho khoảng trống.)
1
chỉ đơn giản là tham chiếu đến nhóm được lồng dấu 1 (như trên). Đây là mặc định.
0
cho khoảng cách để sử dụng giữa hai phần của dòng. Theo mặc định, đây là 1 và là lý do bạn kết thúc bằng một khoảng trống bổ sung.
n
để không căn chỉnh bất kỳ kết quả mẫu nào sau đó sau lần khớp đầu tiên trong mỗi dòng.
chỉnh sửa: Thực ra, Q & Một bạn liên kết với gần giống hệt nhau, và hoạt động tốt đối với tôi trên Emacs 23.2.1, vì vậy đây là một bản sao, nhưng để tiếp tục và trả lời các khía cạnh quan trọng ràng buộc:
Bạn có thể ràng buộc chuỗi (hoặc bất kỳ) nào đó thông qua các macro bàn phím. Đây là kết quả cuối cùng, mà bạn có thể chỉ cần thêm vào tệp init của bạn, mặc dù tôi khuyên bạn nên tự mình thực hiện quá trình này. Sử dụng bất cứ điều gì bạn thích thay cho C-c a
cho khóa. C-c (letter)
và F5-F9 được dành riêng cho người dùng cuối để ràng buộc theo ý muốn của họ, vì vậy một trong số đó sẽ được an toàn khỏi bị che khuất bởi sơ đồ bàn phím của chế độ.
(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)))
tôi đã làm điều đó bằng cách:
- chọn văn bản.
- F3 để bắt đầu quay.
- thực hiện các
align-regexp
như trên (cẩn thận để nhập mọi thứ nguyên văn, và không sử dụng lịch sử của minibuffer hoặc yanking).
- F4 để ngừng ghi.
- C-x C-k n
align-single-equals
RET để cung cấp cho các vĩ mô một tên
- M-x
insert-kbd-macro
RETalign-single-equals
RET để có được lisp.
- Bao gồm biểu thức
(lambda)
với (global-set-key)
để liên kết. (Mặc dù bạn cũng có thể sử dụng mã (fset 'align-single-equals ...)
theo quy định, và sau đó gắn chìa khóa dẫn đến biểu tượng đó.
Nếu bạn thực hiện một sai lầm khi ghi macro phức tạp, không băn khoăn — Emacs cung cấp một thực sự trình chỉnh sửa macro tốt mà bạn có thể sử dụng để sửa bất kỳ lỗi nào sau khi bạn kết thúc ghi âm (chỉ cần nhập Cx Ck e), vì vậy bạn không cần phải hoàn hảo.
chỉnh sửa 2: Có thể thêm ví dụ về chức năng, theo nhận xét.
(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)
Cảm ơn. Tôi đã có thể sử dụng giải pháp của bạn nhưng tạo ra một chức năng thay vì một vĩ mô, vì nó dễ đọc hơn cho tôi. – Karl
Vâng, điều đó thậm chí còn tốt hơn :) Một chức năng chắc chắn là thích hợp hơn nếu bạn đang viết lisp, nhưng các macro rất tiện dụng nếu bạn không. – phils
một chút muộn cho bữa tiệc, nhưng cách kinh điển để giải quyết điều này là thêm quy tắc vào 'align-rules-list' thay vì viết chức năng của riêng bạn. –