Emacs thụt lề bằng cách sử dụng Tab


8

Có cách nào để tạo mã thụt lề Emacs chỉ bằng các tab trên toàn cầu và không phải khoảng trắng. Tôi biết lệnh tabify. Tôi thích thụt lề tự động để sử dụng các tab hơn là hỗn hợp các tab và khoảng trắng như cấu hình mặc định.

Câu trả lời:


7

Vâng, để thụt lề với các tab, bạn sẽ muốn đảm bảo rằng indent-tabs-modet(đó là giá trị mặc định). Nhưng để chỉ nhận các tab, bạn cần điều chỉnh chế độ thực hiện thụt lề sao cho mọi dòng được thụt vào bởi nhiều bội số của bạn tab-width(mặc định 8). Ví dụ: ở chế độ C, bạn có thể thử cài đặt c-basic-offsetthành 8.

Hoặc, bạn có thể giảm tab-widthgiá trị của mình xuống một giá trị nhỏ hơn để Emacs không cần sử dụng khoảng trắng để đạt được từng mức thụt. Nhưng nếu bạn làm điều đó, mọi người khác phải làm việc với mã của bạn (và sử dụng các tab 8 ký tự tiêu chuẩn) sẽ bị làm phiền.

Tôi mong bạn xem xét lại. Cá nhân, tôi thấy làm việc với mã được thụt vào các tab gây khó chịu, đặc biệt nếu chúng không xuất hiện là 8 tab không gian. (Điều tồi tệ nhất là mã trong đó một số dòng sử dụng khoảng trắng, một số dòng sử dụng các tab và rõ ràng đó không phải là 8 tab không gian.) Chúng ta hãy ủng hộ và chỉ (setq indent-tabs-mode nil).


Tôi sẽ đánh dấu câu hỏi này cho chiều rộng của tab thiết lập paragragh thứ hai và bình luận không trộn lẫn các tab và khoảng trắng. Nhưng nếu độ rộng tab của bạn được đặt, việc chỉnh sửa thụt lề sẽ dễ dàng hơn nhiều với một tab cho từng cấp thay vì một số khoảng trắng
user151019

Tôi nghĩ rằng đoạn thứ ba của bạn nói chung là hữu ích, nhưng thường thì chúng ta không thể kiểm soát phong cách thụt lề của tác giả ban đầu, ví dụ, người mà chúng ta đang gửi yêu cầu kéo / hợp nhất. Tôi có sở thích của tôi, họ có của họ. Tôi nghĩ thật đáng trân trọng khi sử dụng phong cách thụt đầu dòng của họ ở mức hợp lý, vì vậy đôi khi sự lựa chọn không phải là của chúng tôi .
r2evans

7

Emacs đi kèm với một số kiểu được xác định trước cho thụt đầu C hoặc bạn có thể tự viết nếu không phù hợp với nhu cầu của bạn. Trong số các kiểu tiêu chuẩn , có vẻ như bạn đang tìm kiếm linux(kiểu được sử dụng trong nguồn nhân Linux), có thụt lề 8 cột và sử dụng các ký tự tab có chiều rộng 8.

Bạn có thể đặt các cài đặt này thành kiểu mặc định cho C bằng cách đặt cài đặt này vào .emacs:

(setq c-default-style "linux")
(defun my-c-mode-hook ()
  (setq indent-tabs-mode t)
  (setq tab-width 8))
(add-hook 'c-mode-hook 'my-c-mode-hook)

Tuy nhiên, hãy đảm bảo rằng bạn không sử dụng các cài đặt này khi cộng tác với người khác với các tùy chọn khác nhau. Đặc biệt, sử dụng các tab sẽ làm cho bạn enemines. Nếu một tệp cụ thể được giữ theo một kiểu cụ thể, bạn có thể sử dụng các biến tệp để đảm bảo rằng tất cả những người chỉnh sửa tệp trong Emacs đều sử dụng cùng một cài đặt:

/*
 * Local Variables:
 * c-file-style: "linux"
 * indent-tabs-mode: t
 * tab-width: 8
 * End:
 */

Nếu bạn có cả một dự án với các tệp C được thụt lề tương tự, hãy sử dụng các biến thư mục thay vì làm ô nhiễm mọi tệp. Tạo một tệp được gọi .dir-locals.elvới nội dung như sau:

((c-mode . ((c-file-style . "linux")
            (indent-tabs-mode . t)
            (tab-width . 8))))

1

Các tab làm phiền tôi, nhưng tôi phải tìm ra cách làm cho các emac chỉ sử dụng các tab để thụt lề để tôi có thể làm việc với mã của người khác. Đây là những gì làm việc cho tôi:

(defun tmp/change-indent ()
  (interactive)
  (setq indent-tabs-mode t)
  (setq tab-width 2))

Tôi nhận thấy rằng trước khi làm rối mọi thứ, khi tôi nhấn phím tab, nó sẽ tự động thụt lề bởi 2 cột. Đặt "độ rộng tab" để khớp với 2 cột được cho phép emacs sử dụng các tab khi thực hiện định dạng tự động. Tôi đã làm việc ở chế độ nxml, nhưng tôi nghĩ nó sẽ hoạt động với mọi chế độ.


Đẹp. Điều này đã làm phiền tôi quá. Không trực quan khi phải đặt chiều rộng của tab khớp với độ lệch cột. Làm tốt lắm. Tôi đã sử dụng ý tưởng này trong chế độ c ++
Sean Lynch
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.