2013-06-02 31 views
16

Trình định dạng mã CDT có một lựa chọn khá phong phú về các tùy chọn, nhưng dường như không có tính năng nào cho phép nó bỏ qua một khối mã. Tính năng này tồn tại trong mã định dạng Java:Cách tắt trình định dạng mã CDT Eclipse cho một khối mã

// @formatter:off 
... // code that should not be formatted 
// @formatter:on 

Tính năng này tồn tại và tôi chỉ không biết về nó, hoặc không ai biết của bất kỳ phong nha công việc ở quanh?

Trong trường hợp cụ thể của tôi, tôi đang cố gắng xác định cấu trúc dữ liệu (loại enum và mảng chuỗi) mà tôi muốn có bố cục cụ thể.

Trả lời

4

Sử dụng Astyle (Artistic Style) định dạng, nó là cao hơn nhiều so với CDT Eclipse built-in định dạng và có các tính năng bạn cần:

http://astyle.sourceforge.net/astyle.html#_Disable_Formatting

Ví dụ:

#include <iostream> 

int main(int argc, char** argv) 
{ 
// *INDENT-OFF* 
std::cout<<"hello world"<<'\n'; 
// *INDENT-ON* 
} 

Định dạng này sử dụng astyle sẽ không thụt lề mã giữa // INDENT-OFF và // INDENT-ON nhưng nó cũng sẽ vô hiệu hóa bất kỳ định dạng nào khác fe atures astyle, giống như khoảng cách của các lệnh trong trường hợp này.

Tôi tự sử dụng cấu hình này làm công cụ bên ngoài. Vấn đề duy nhất, các công cụ bên ngoài không có phím nóng, nhưng có một phím nóng để "Chạy công cụ bên ngoài được khởi chạy lần cuối" và nếu bạn chỉ sử dụng một công cụ bên ngoài, nó hoạt động giống nhau.

Thông tin chi tiết về cấu hình (linux):

Astyle:

Bạn có thể nhận được nó một cách dễ dàng từ kho phân phối của bạn hoặc thông qua trang web chính thức.

Để thiết lập một tập tin cấu hình với các thiết lập định dạng:

http://astyle.sourceforge.net/astyle.html#_Options_File

tôi sử dụng biến thư mục nhà, chỉ cần tạo một.astylerc tại của bạn $ HOME, mỏ chứa:

--suffix=none 
--style=allman 
--indent=tab=4 
--max-code-length=70 
--close-templates 
--keep-one-line-blocks 
--break-elseifs 
--break-closing-brackets 
--align-reference=type 
--align-pointer=type 
--indent-classes 
--indent-modifiers 
--indent-switches 
--indent-cases 
--indent-labels 
--indent-col1-comments 
--min-conditional-indent=0 
--pad-oper 
--pad-header 
--unpad-paren 

Eclipse:

"Run" menu -> Công cụ bên ngoài -> Công cụ bên ngoài Configurations ... Thêm một "Chương trình" mới và trong cấu hình cửa sổ:

  • Location:/usr/bin/Astyle (sử dụng whereis hoặc xác định vị trí để kiểm tra này)

  • Working Directory: $ {} project_loc

  • Arguments: $ {} selected_resource_loc

Trong cùng một cửa sổ, tab mới:

  • nguồn Tick Refresh sau khi hoàn thành.

  • Tick "Nguồn chọn"

Cùng cửa sổ, tab chung:

  • hiển thị trong menu yêu thích, Tick "Công cụ bên ngoài"
+0

Tôi hoàn toàn quên về astyle! Tôi sẽ chấp nhận câu trả lời này nếu bạn thêm một số ví dụ sử dụng từ đây: http://astyle.sourceforge.net/astyle.html#_Disable_Formatting – Freerobots

+0

Được rồi, tôi sẽ cung cấp một số lời khuyên khi thiết lập: khi bạn thêm đây là một công cụ bên ngoài trong nhật thực, sử dụng "$ {resource_loc}" trong phần Đối số để định cấu hình nó để định dạng tệp hiện đang mở. – Freerobots

+0

Có '// * INDENT-OFF *' hoạt động cho bất kỳ ai không? Trong astyle v2.03 của nó chỉ bị bỏ qua. – veio

0

Tôi đoán tôi có thể gắn chúng trong một tệp có phần mở rộng bị bỏ qua bởi trình định dạng và bao gồm tệp này khi thích hợp. Tôi đã thử điều này và nó hoạt động - cấu trúc dữ liệu được chọn lên chỉ mục (tức là công việc tự động hoàn thành). Tuy nhiên, nó sẽ là tốt đẹp để có một tương đương với cú pháp Java "@ format: ...".

+0

Một nhược điểm khác của phương pháp này là việc tái cấu trúc (đổi tên cụ thể) không hoạt động. Ngoài ra, thay đổi cấu trúc dữ liệu dường như không được tự động chọn, do đó yêu cầu một chu kỳ sạch và xây dựng lại. – Freerobots

0

Theo như tôi biết câu trả lời đơn giản là không, tính năng như vậy không tồn tại. Tuy nhiên, bạn có thể triển khai tính năng như vậy bằng cách sử dụng SDK. Hãy coi chừng rằng trong kinh nghiệm của tôi, tài liệu là rất không đầy đủ và rất khó để tìm một nhà phát triển Eclipse, những người sẵn lòng giúp bạn điền vào các lỗ hổng. Nhưng vì tính năng tồn tại trong trình định dạng Java và nó là một sản phẩm nguồn mở, có lẽ bạn có thể chuyển qua logic tới trình định dạng C++.

Bạn cũng có thể tránh định dạng toàn bộ tệp và thay vào đó chỉ định dạng theo lựa chọn.

1

Nếu bạn đang sử dụng OS X hoặc Linux (Tôi chưa chọn Windows nhưng có thể được hỗ trợ), thay vào đó bạn có thể sử dụng clang-format và .

clang-format là một tiện ích định dạng được cung cấp với Clang, và nó hỗ trợ bật/tắt ý kiến ​​// clang-format on// clang-format off trong C/C++/ObjC mã. Một giới thiệu để xây dựng Clang và các công cụ tiện ích của nó có thể được tìm thấy ở đây. http://clang.llvm.org/get_started.html Bạn không cần cài đặt toàn bộ các tệp ClangLLVM trên hệ thống của mình. Bởi vì clang-format là một chương trình độc lập hoạt động mà không cần Clang. Các nhận xét bật/tắt không được hỗ trợ trong các phiên bản cũ, vì vậy hãy sử dụng phiên bản 3.7 (có sẵn từ SVN vào tháng 2 năm 2015).

là một plugin Eclipse cho phép chúng tôi sử dụng clang-format từ CDT Eclipse. https://github.com/wangzw/cppstyle

FYI. Đây là yêu cầu tính năng tương tự trong CDT Bugzilla. Chức năng này có thể được hỗ trợ chính thức trong tương lai, nhưng sử dụng clang-format hoặc Astyle có vẻ là giải pháp tốt hơn vào lúc này. https://bugs.eclipse.org/bugs/show_bug.cgi?id=453926

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