2009-04-07 23 views
21

Trong Emacs, làm thế nào tôi có thể thực thi chiều dài dòng tối đa, ví dụ 80 ký tự? Tôi muốn nó chèn ngắt dòng thích hợp trong mã của tôi, giống như fill-paragraph cho văn bản, nếu có thể, với việc chèn chính xác phần thứ hai của dòng.Làm cách nào để thực thi độ dài dòng tối đa trong các Emac?

Dưới đây là một ví dụ nhỏ:

LongNameType<PrettyLong, AlsoLong> doSomethingWithLongFunctionName(int a, int b); 
foo(); 

Nếu tôi thực sự làm fill-paragraph nó trở thành:

LongNameType<PrettyLong, AlsoLong> 
doSomethingWithLongFunctionName(int a, int b); foo(); 

trong khi tôi muốn này:

LongNameType<PrettyLong, AlsoLong> 
    doSomethingWithLongFunctionName(int a, int b); 
foo(); 
+0

Ý tưởng tuyệt vời! 1, tôi luôn cố gắng duy trì 100 char/line trong VS để tôi có thể nhìn thấy mã của tôi một cách nhất quán với cùng kích thước cửa sổ. Công cụ để tự động hóa điều này sẽ được mát mẻ. – AaronLS

Trả lời

0

Không thực sự là một emacser, nhưng điều gì sẽ xảy ra nếu bạn bật auto-fill-mode khi đang ở trong c++-mode?

C++ chế độ sẽ cho bạn auto-indent, và tự động điền-mode mang đến cho bạn dòng gói ....

+0

Ví dụ tôi đưa ra đã ở chế độ C++ - ... – Frank

1

tôi sử dụng modeline-posn gói. Nó làm nổi bật số cột trong mô hình nếu nó lớn hơn giá trị được chỉ định.

5

điền vào đoạn và tự động điền chế độ cố ý không bao bọc mã. Có quá nhiều cách để làm điều đó và nó có thể làm cho nó sai. Họ sẽ đóng góp ý kiến, nhưng điều đó không giúp bạn ở đây.

Cách duy nhất tôi đã từng thực hiện để đặt rõ ràng nơi tôi muốn văn bản bị hỏng. Sau đó, các thụt lề tự động nên đặt các dòng bị hỏng ở đúng nơi.

Bạn đang cố gắng chỉnh lại một lượng lớn mã hiện có? Hoặc cố gắng tự động điền vào mã bạn đang viết bây giờ?

+0

Nhưng tôi mong đợi chế độ C++ - để xác định lại đoạn mã điền để nó thực sự làm điều đúng cho C++. Đó không phải là khó hơn so với phần còn lại của việc thực hiện chế độ C++. Có, lý tưởng tôi muốn thay đổi mã hoàn chỉnh của mình. Nhưng cũng có, tôi muốn nó cho mã mới mà tôi đang viết trong Emacs. – Frank

+0

Tôi nghĩ rằng nó khó hơn, bởi vì có nhiều cách khác để phá vỡ một dòng hơn là có thụt lề. Nhiều lần phá vỡ tại cột 80 cột (hoặc bao giờ) không phải là lựa chọn tốt nhất để đặt ra mã (bạn có phá vỡ sau mỗi đối số ví dụ trong một danh sách dài các đối số) không. –

+0

Tôi nghĩ rằng bạn chỉ cần phá vỡ sau dấu phẩy cuối cùng trước khi giới hạn. Có thể có một số ngoại lệ cho điều này, nhưng đó phải là quy tắc chính. – Frank

5

Có một số number of packages cảnh báo bạn về giới hạn độ dài của dòng. Cá nhân, tôi sử dụng wide-column, thay đổi màu con trỏ tùy thuộc vào cột hiện tại của nó.

+0

Nó không trả lời câu hỏi.Xin vui lòng cung cấp giải pháp expilicit để thực thi chèn newline (phá vỡ dòng) khi nó đạt đến x, nếu không thì không nhầm lẫn mọi người. – iantonuk

+0

@bedbad Không ai "trả lời câu hỏi", bởi vì (rõ ràng) giải pháp không (chưa) tồn tại trong Emacs. Tuy nhiên, mỗi câu trả lời đã cố gắng để cung cấp cho Frank một cái gì đó mà có thể làm việc để giúp anh ta. Vui lòng thêm phản hồi mang tính xây dựng - chúng tôi là một cộng đồng xây dựng mọi người, thay vì rách chúng. Tôi nghi ngờ bất cứ ai đã "nhầm lẫn" bởi câu trả lời của tôi (hoặc các câu trả lời khác) bởi vì không ai cung cấp một câu trả lời mà lừa dối mọi người. –

+0

Tôi không nghĩ câu trả lời của bạn có liên quan gì đến câu hỏi. Bạn có nghĩa vụ phải trả lời một câu hỏi không phải là một cái gì đó "mà có thể làm việc cho một số người" trong câu hỏi SO, bởi vì nó tồn tại cho nhiều người tìm kiếm câu trả lời. Ngay cả khi bạn giúp 1 bạn nhầm lẫn cả một nhóm người – iantonuk

1

Bạn nên kiểm tra một trong nhiều thư viện "đường thẳng đứng" cho Emacs. Một số giữ một đường thẳng đứng trên toàn bộ bộ đệm tại mọi thời điểm (không thực sự là những gì bạn muốn) nhưng các thư viện khác đặt điểm nổi bật dọc trên cột cố định mọi lúc, không thực sự là thứ bạn muốn, nhưng bạn có thể thấy ngay khi bạn nên được gói dòng.

0

Hãy thử

'(c-max-one-liner-length 80) 

'(fill-column 80) 
'(c-ignore-auto-fill (quote (string cpp))) 

Hy vọng nó giúp.

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