emacs: làm thế nào để thụt lề / vùng không xác định của mã python bằng 4 dấu cách?


60

Tôi có một vùng mã trăn được chọn trong emacs. Các cách hiệu quả nhất để thụt lề và không ràng buộc mỗi dòng trong đó bằng 4 khoảng trắng là gì?

Lý tưởng nhất là tôi muốn một cái gì đó không nhạy cảm với bối cảnh (ví dụ: nó sẽ cho phép tôi thụt lề trong các tài liệu mà việc thụt lề không liên quan đến cú pháp python).

Dòng chế độ của tôi hiển thị (Python). Tìm kiếm trên web tôi đã tìm thấy rất nhiều cuộc thảo luận về việc sử dụng python-modethay vì python, nhưng tôi chỉ bắt đầu sử dụng emacs vài ngày trước vì vậy tôi cảnh giác thay đổi mặc định trước khi tôi có cơ hội hiểu và họ. Nếu thay đổi thành python-modelựa chọn tốt nhất, tôi rất vui lòng chấp nhận đó là câu trả lời.

Những gì tôi đã thử (từ hướng dẫn):

  • <TAB> không có tác dụng
  • C-M-\ không có tác dụng
  • C-x <TAB> (thụt lề một cách cứng nhắc) thụt lề mỗi dòng theo một cột (và bỏ chọn vùng)
  • M-i thụt lề một dòng đầu tiên bằng một tab (độ dài 8 dấu cách)
  • C-M-q - "CMq không xác định"

Cách duy nhất tôi tìm thấy là sử dụng regex-thay thế, nhưng đó là một số lượng tổ hợp phím khủng khiếp cho một nhiệm vụ đơn giản như vậy.

Câu trả lời:


69

Giả sử rằng biến python-indentlà 4:

M-x python-shift-right (C-c >)
M-x python-shift-left  (C-c <)

5
Tôi phải làm python-indent-shift-left.
nnyby

17

indent-rigidlylấy một đối số tiền tố cho biết mức độ thụt lề là bao nhiêu, do đó C-u 42 C-x TABthụt lề bằng 42 cột và vì đối số tiền tố mặc định là 4, C-u C-x TABthụt lề bằng 4 cột.

Nếu bạn muốn chọn lại vùng, hãy thực hiện C-x C-xsau đó.


8

Sử dụng lệnh thụt lề cứng nhắc với tiền tố số.

C-u 4 M-x indent-rigidlyđể thụt lề khu vực bởi bốn không gian, C-u -4 M-x indent-rigidlyđể loại bỏ bốn không gian.


4

Cx Cx đánh dấu mã và sau đó Mx thụt lề cho chế độ tab

Đó là tiết kiệm nếu bạn đã nhấn tab cho mỗi dòng.


3

Bạn cũng có thể sử dụng chế độ cột.

Chọn các dòng trong chế độ cột, sau đó thêm bốn khoảng trắng cho tất cả chúng cùng một lúc:

  1. Chuyển đến cột 1 của dòng đầu tiên bạn muốn thụt lề.
  2. C-<space> để đánh dấu
  3. di chuyển điểm xuống dòng cuối cùng (ở trong cột một)
  4. C-x r tđể vào chế độ cột (hoặc C-<RET>nếu bạn có chế độ CUA)
  5. <space><space><space><space><RET>

Bạn có thể thực hiện một thao tác tương tự để xóa bốn khoảng trắng - chỉ cần bao gồm 4 cột trong vùng được đánh dấu của bạn (bước 2-3) và nhấn <DEL>


3

Cập nhật giải pháp của Chen ở trên, hiện tại (đã được thử nghiệm trên Emacs 24.4.1), các lệnh đã được đổi tên. Vì vậy, giả sử bạn muốn thụt lề theo biến python-indent, các lệnh là python-indent-shift-left và python-indent-shift-right. Bạn có thể:

  1. phát hành chúng bằng cách gõ M-x python-indent-shift-righthoặcM-x python-indent-shift-left

  2. sử dụng các phím tắt chế độ python mặc định C-c >C-c <

  3. bắt bẻ họ Ví dụ, trên bàn phím có nút windows tôi sử dụng:

    (global-set-key (kbd "s-s") 'python-indent-shift-left) 
    (global-set-key (kbd "s-d") 'python-indent-shift-right)
    


0

Cả hai S-<LEFT>S-<RIGHT> hoạt động tốt trong Pythonchế độ chính. Điều này đặc biệt thuận tiện trong Chế độ Cua , nơi C-cC-xhành vi thay đổi thành sao chép / cắt khi một vùng được chọn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.