2012-01-21 26 views

Trả lời

12

Đặt này trong emacs của bạn

(defun kill-line-or-region() 
"kill region if active only or kill line normally" 
    (interactive) 
    (if (region-active-p) 
     (call-interactively 'kill-region) 
    (call-interactively 'kill-line))) 

    (global-set-key (kbd "C-k") 'kill-line-or-region) 
+0

Điều này không có tác dụng nếu bạn mở tệp lần đầu tiên và nhãn hiệu không bao giờ được đặt. – asmeurer

+0

OK, giải pháp là không sử dụng '(tương tác" r ")', nhưng chỉ '(tương tác)'. Tôi sẽ chỉnh sửa câu trả lời của bạn. – asmeurer

5

này nghe có vẻ giống như một công việc để được tư vấn!

(defadvice kill-line (around kill-region-if-active activate) 
    (if (and (called-interactively-p) (region-active-p)) 
     (kill-region (region-beginning) (region-end)) 
    ad-do-it)) 

EDIT: Đã thêm called-interactively-p kiểm tra.

+0

hmm .. Tôi thích của bạn. :/ – kindahero

+3

Woooo! Giữ lấy nó! 'kill-line' là một hàm rất nhiều gói sử dụng nội bộ, điều này sẽ thay đổi cách chúng hoạt động, theo cách thực sự tinh tế. Tôi sẽ bỏ tiền vào giải pháp @kindahero, vì nó sẽ làm những gì bạn hỏi mà không có các tác dụng phụ khó chịu. – Lindydancer

+0

OK, vậy làm cách nào để thêm kiểm tra tính tương tác, như đã thêm ở trên? – Sean

0

Đây không thực sự là câu trả lời trực tiếp mà là một số gợi ý.

Bạn có thể bật delete-selection-mode với (delete-selection-mode 1). Sau đó, nếu một khu vực được đánh dấu, khi bạn bắt đầu nhập một số văn bản khu vực sẽ bị xóa. Nhưng trong trường hợp của bạn, bạn chỉ cần sử dụng C-w để cắt vùng hiện tại, điều này sẽ thêm khu vực vào vòng hủy nhưng kill-line cũng sẽ làm điều đó.

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