2010-07-01 6 views
10

Tôi đang tìm cách để thay đổi văn bản sang phải hoặc sang trái bằng cách n không gian. Một chức năng tương tự như trong vim << hoặc >>. Nó sẽ hoạt động trên một khu vực hoặc nếu không có vùng nào được chọn trên một dòng hiện tại và không di chuyển con trỏ từ vị trí hiện tại của nó.Thay đổi một khu vực hoặc dòng trong các emacs

Giải pháp từ EmacsWiki không hoạt động tốt như M-x indent-rigidly vì nó phần nào ghi nhớ vùng cuối cùng được sử dụng và thay đổi vùng đó thay thế. Gần nhất có vẻ là một trong những here nhưng tôi đã không quản lý để làm cho nó hoạt động. Tôi không phải là một nhà phát triển lisp nên rất khó để sửa đổi mã. Tôi sẽ đánh giá cao sự giúp đỡ nào.

Cảm ơn!

Trả lời

6

Có thể thao tác này theo cách bạn muốn.

 
(defun shift-text (distance) 
    (if (use-region-p) 
     (let ((mark (mark))) 
     (save-excursion 
      (indent-rigidly (region-beginning) 
          (region-end) 
          distance) 
      (push-mark mark t t) 
      (setq deactivate-mark nil))) 
    (indent-rigidly (line-beginning-position) 
        (line-end-position) 
        distance))) 

(defun shift-right (count) 
    (interactive "p") 
    (shift-text count)) 

(defun shift-left (count) 
    (interactive "p") 
    (shift-text (- count))) 
+0

Tuyệt vời! Đó chính xác là những gì tôi đang tìm kiếm! Cảm ơn rất nhiều. Bạn không muốn đặt nó vào EmacsWiki? – fikovnik

5

Để đạt được điều này tôi thường làm một thủ thuật:

  • kích hoạt chế độ CUA
  • đi đến đầu dòng
  • C-RET, bây giờ nếu bạn di chuyển con trỏ bạn sẽ thấy một hình chữ nhật vùng màu đỏ
  • Di chuyển con trỏ xuống các dòng và nhập khoảng trắng cho đến khi bạn đã có được dịch chuyển đúng.

Điều này cũng có thể được thực hiện theo cách nào đó (theo cùng một cách).

EDIT: Tôi vừa đọc bài viết trong wiki emacs, nó là cùng một giải pháp ngoại trừ chế độ CUA vô cùng mạnh hơn lựa chọn rectanguar "phổ biến" (vì nó là trực quan).

+2

Bạn có thể bật tiện ích chỉnh sửa hình chữ nhật tuyệt vời của CUA riêng biệt với các tính năng khác của nó bằng '(cua-selection-mode t)'. Với điều kiện bạn không có 'C-RET' bị ràng buộc với thứ gì đó khác, bạn có thể đặt nó vào tệp init của bạn và nó sẽ không xung đột với bất cứ thứ gì. – phils

+1

Ghi chú nhanh về cách sử dụng cơ bản cho các đường dịch chuyển: 'C-RET' + chuyển động của con trỏ để chỉ định hình chữ nhật,' RET' sang các góc vòng, nhập chèn trước/sau hình chữ nhật, 'C-RET' để thoát. Xem ghi chú bên dưới "Hỗ trợ hình chữ nhật CUA" trong cua-base.el để biết chi tiết đầy đủ về chế độ phụ này cung cấp hoặc đọc http://trey-jackson.blogspot.com/2008/10/emacs-tip-26- cua-mode-specific.html – phils

+0

Tôi có một lời thú nhận. Tôi sử dụng chế độ CUA. –

31

Bạn có thể chọn khu vực sau đó C-u C-x <tab> sẽ thay đổi 4 dấu cách. Bạn có thể nhập một số sau khi C-u thay đổi 4 thành bất kỳ thứ gì khác.

+0

Một mẹo khác: số sau khi 'C-u' có thể âm, trong trường hợp này vùng sẽ được dịch sang trái thay vì sang phải. –