2011-09-20 31 views
8

Trình soạn thảo duy nhất mà tôi từng sử dụng hỗ trợ điều này (tôi chắc chắn là rất nhiều, tuy nhiên) là Sublime Text 2, nhưng hy vọng các emacs cũng có một thủ thuật. Một số lớp tôi làm việc trên đó có một cú pháp khá khai báo trông sạch hơn nếu nguồn được giữ cột. Vấn đề xuất hiện khi một hàng mới tăng độ dài của một cột lên một khoảng trống hoặc hai không gian ... sau đó bạn phải làm việc thông qua mỗi hàng sắp xếp lại nó.Emacs: căn chỉnh văn bản, nhưng không phải toàn bộ dòng?

Một ảnh chụp màn hình có thể làm rõ những gì tôi nhận được tại địa chỉ:

Columnized text out of alignment

Ở đây tôi đã thêm một hàng trong đó một nếu cột của nó kéo dài hơn nữa so với các cột khác, vì vậy tôi muốn sắp xếp lại tất cả. Thông thường tôi chỉ cần lặp lại các ngón tay quanh các mũi tên và thanh khoảng trắng cho đến khi tôi sắp xếp lại mọi thứ theo từng hàng, nhưng sẽ tốt nếu có cách chỉ chọn một vùng hình chữ nhật và lực văn bản các vùng không nằm trong khoảng trắng của khu vực đó sẽ rơi vào căn chỉnh.

Điều này có khả thi không?

+3

Hah! ___ trình soạn thảo nào x, Emacs có thể làm x? Trừ khi X là thanh cuộn ngang, thì câu trả lời có thể là có. ;) –

Trả lời

21

Thay vì sử dụng hình chữ nhật, bạn có thể sử dụng align-regexp. Chọn khu vực này sau đó làm:

C-u M-x align-regexp RET ,\(\s-*\) RET 1 RET 1 RET y

Nếu bạn làm điều này rất nhiều, làm cho một chức năng:

(defun my-align-after-commas (beg end) 
    (interactive "r") 
    (align-regexp beg end ",\\(\\s-*\\)" 1 1 t)) 

Sau đó chọn khu vực và Mx của tôi-align-sau dấu phẩy

+0

Đó là một mẹo nhỏ gọn! –

+0

'-' trong regexp là gì? – lmichelbacher

+1

'\ s-' có nghĩa là khoảng trống trong Emacs regexp (nó thực sự là một lớp cú pháp, xem hướng dẫn nếu bạn thực sự quan tâm) – scottfrazer

4

Emacs cho phép bạn chọn các khu vực hình chữ nhật và nó cho phép bạn chỉnh sửa toàn bộ các cột. Để xóa một khu vực hình chữ nhật, đặt dấu ở một góc, trỏ vào điểm khác và sau đó là M-x kill-rectangle. Bạn có thể thêm một hình chữ nhật của khoảng trắng bằng cách đánh dấu nó theo cùng một cách, và sau đó M-x open-rectangle.

Đây chỉ là cách mà I biết cách thực hiện việc này; không nghi ngờ gì khác, có thể là cách tốt hơn.

+0

Cảm ơn bạn đã phản hồi. Tôi muốn chuyển cột (trong trường hợp này) một khoảng trống sang bên phải, không xóa nó. Khi tôi đặt dấu (giả sử bạn có nghĩa là C-không gian) sau đó di chuyển các điểm đến góc khác, có vẻ như để chọn toàn bộ dòng giữa nhãn hiệu và điểm? – d11wtq

+0

Rất tiếc, đã bỏ lỡ nội dung chỉnh sửa của bạn khi tôi đang nhập, hãy xem điều gì xảy ra, cảm ơn! :) – d11wtq

+0

Tuyệt vời, cảm ơn! :) – d11wtq

5

Ngoài ra còn có columnize library có thể biến đổi điều này:

(defvar enform-keywords-statements 
    '("AT END" "AT START" "CLOSE" "DECLARE" "DELINK" "DICTIONARY"  
    "EXIT" "FIND" "FOOTING" "LINK" "LIST" "OPEN" "PARAM" "SET"    
    "SUBFOOTING" "SUBTITLE" "TITLE") 
    "List of ENFORM statement keywords. Used to create the `font-lock-keywords' table.") 

vào đây:

(defvar enform-keywords-statements 
    '("AT END"  "AT START" "CLOSE"  "DECLARE"  "DELINK"  
    "DICTIONARY" "EXIT"  "FIND"  "FOOTING"  "LINK"   
    "LIST"  "OPEN"  "PARAM"  "SET"   "SUBFOOTING" 
    "SUBTITLE" "TITLE"  ) 
    "List of ENFORM statement keywords. Used to create the `font-lock-keywords' table.") 

Bạn chọn khu vực bạn muốn sắp xếp và sau đó M-x columnize-text.

trang EmacsWiki về vấn đề này và những người khác:
http://www.emacswiki.org/emacs/CategoryAlignment

Các vấn đề liên quan