2009-02-27 44 views
12

Tôi chỉnh sửa câu trả lời và câu hỏi StackOverflow của mình với ViewSourceWith và Emacs. Thông thường, tôi bao gồm mã và StackOverflow formatting rules nói rằng nó phải được thụt vào bởi bốn dấu cách để được nhận dạng là như vậy. Làm điều đó bằng tay hoặc ngay cả với macro là đau đớn.Sử dụng Emacs để thụt lề (shift 4) mã

Tôi đã tìm kiếm trong các bài đăng trước của SO nhưng không tìm thấy gì.

Bắt đầu từ chế độ Python, tôi đã viết:

(defun text-shift-region (start end count) 
    "Indent lines from START to END by COUNT spaces." 
    (save-excursion 
(goto-char end) 
(beginning-of-line) 
(setq end (point)) 
(goto-char start) 
(beginning-of-line) 
(setq start (point)) 
(indent-rigidly start end count))) 

(defun text-shift-region-right (start end &optional count) 
    "Shift region of code to the right 
    Stolen from python-mode. 
    The lines from the line containing the start of the current region up 
    to (but not including) the line containing the end of the region are 
    shifted to the right, by `text-indent-offset' columns. 

    If a prefix argument is given, the region is instead shifted by that 
    many columns. With no active region, indent only the current line." 
    (interactive 
    (let ((p (point)) 
    (m (mark)) 
    (arg current-prefix-arg)) 
(if m 
    (list (min p m) (max p m) arg) 
    (list p (save-excursion (forward-line 1) (point)) arg)))) 
    (text-shift-region start end (prefix-numeric-value 
       (or count text-indent-offset))) 
) 

;; Code in StackOverflow must be marked by four spaces at the 
;; beginning of the line 
(setq text-indent-offset 4) 
(global-set-key "\C-c>" 'text-shift-region-right) 

Có vẻ như để làm việc nhưng tôi hoan nghênh lời khuyên, giải pháp thay thế, báo cáo lỗi, , vv

+0

Đây không phải là một câu hỏi ... –

+0

Đó là, tôi hy vọng sẽ nhận được giải pháp thay thế cho giải pháp nấu nhanh chóng của tôi hoặc để nhận các bản vá lỗi thú vị. – bortzmeyer

+0

Ngoài ra, có vẻ như nó có thể giúp một số người vì vậy tôi sử dụng điều này như một cách để xem liệu có đủ sự quan tâm để yêu cầu một tài liệu ở đâu đó không. – bortzmeyer

Trả lời

14

C-x TAB chạy indent-rigidly. Cho một đối số bằng số bốn nó sẽ làm những gì bạn muốn. Hoặc sử dụng < trước> < mã> để giới thiệu mã của bạn (xem đoạn đầu tiên của Markdown Editing Help).

Edit: khai tương tác của bạn sẽ tốt hơn được viết:

(interactive "r 
p") 
+0

C-x TAB yêu cầu khu vực được đánh dấu. Mã chế độ Python, mà tôi đã lấy trộm, hoạt động trên khu vực, nếu có, hoặc trên dòng hiện tại. – bortzmeyer

+0

Bạn có nghĩa là hoạt động. Thông thường thụt vào một dòng duy nhất bằng 4 không thực sự đảm bảo một ràng buộc cụ thể. C-a SPACE SPACE SPACE SPACE. – kmkaplan

+0

Vâng, tôi vẫn thích phương pháp của tôi nhưng hai giải pháp này là tốt đẹp quá. Đã chấp nhận. – bortzmeyer

1

Mã của bạn có vẻ tốt đẹp đối với tôi. Tôi nghĩ rằng việc thiết lập lại end trong text-shift-region là không cần thiết, nhưng ngoài điều đó, có vẻ ổn.

11

Một cách dễ dàng khác là sử dụng khả năng chỉnh sửa hình chữ nhật mạnh mẽ của emacs: đặt khu vực của bạn bắt đầu từ đầu dòng đầu tiên và kết thúc ở đầu dòng cuối cùng bạn muốn thụt lề (lưu ý: số để ở đầu dòng vì bạn không muốn thay thế văn bản hiện có của mình!), sau đó thực hiện

C-x r t (string-rectangle) 

Sau đó, chỉ cần nhập 4 dấu cách như được nhắc. Thì đấy! Không cần phải có thêm hack hacking. Điều này bổ sung cho phép bạn linh hoạt chèn các thứ khác bên cạnh các khoảng trống vào đầu hoặc bất kỳ vị trí nào giữa một loạt các dòng.

+2

Lệnh đơn giản hơn là Cx ro, hình chữ nhật mở, giả định rằng dòng đầu tiên hoặc dòng cuối cùng của khu vực dài ít nhất bốn ký tự: vị trí hoặc kết thúc của bốn ký tự trong dòng và ký tự còn lại ở đầu của dòng, và gõ Cx r o. –

8

Sử dụng C-x TAB để thụt lề (như đã đề cập trong câu trả lời khác) là cách dễ nhất. Chỉ cần đánh dấu khu vực bạn muốn thụt lề và nhấn C-u C-x TAB. Là tiền tố mặc định cho C-u là 4, điều này nên làm chính xác những gì bạn muốn.

1

Trong python-mode, bạn có thể đánh dấu một khu vực (C-space, di chuyển con trỏ) và nhấn C-c > để thụt lề 4 dấu cách.

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