Làm cách nào để tự động xóa khoảng trắng theo dõi trong Eclipse?


422

Câu hỏi có hai phần, một trong số đó tôi đã có câu trả lời.

  1. Làm cách nào để tự động xóa khoảng trắng theo dõi khỏi toàn bộ tệp đang được chỉnh sửa ? -> Trả lời: sử dụng plugin AnyEdit , có thể được đặt để thực hiện điều đó trên bất kỳ lưu vào tệp.
  2. Làm cách nào để tự động xóa khoảng trắng theo dõi khỏi các dòng tôi đã thay đổi ? -> Điều này tôi không biết và sẽ đánh giá cao bất kỳ trợ giúp.

97
Tôi rất vui nếu tôi có thể thuyết phục Eclipse ngừng thêm khoảng trắng ở cuối mà tôi không gõ.
divegeek

5
Bạn không cần một plugin. Chỉ cần sử dụng C ++ -> Trình chỉnh sửa -> Lưu hành động. Ngoài ra Chung -> Trình chỉnh sửa -> Trình chỉnh sửa văn bản -> Hiển thị các ký tự khoảng trắng (nhấp vào đó để cài đặt chi tiết) cực kỳ tiện dụng.
Trass3r

3
Hành động lưu mặc định không cắt bớt các khoảng trắng theo sau trong các bình luận Java Doc. Ngoài ra, nó bị giới hạn bởi thực tế là nó chỉ hoạt động trên các tệp Java. Chúng tôi có một hệ thống đánh giá mã đánh dấu tất cả các khoảng trắng ở cuối là lỗi. AnyEdit là vô giá để chăm sóc các khoảng trắng theo dõi cho tất cả các loại tệp. Ngoài ra, có thể hữu ích khi tìm thấy những hạn chế mà công ty bạn có đối với phần mềm phần ba. Plugin AnyEdit có Giấy phép EPL ( opensource.org/licenses/eclipse-1.0.php ) [Từ đây: andrei.gmxhome.de/anyedit/index.html]
Ashutosh Jindal

1
Tôi không thể hiểu tại sao đột nhiên các khoảng trắng ở cuối dòng bị xóa, cho đến khi tôi thấy câu hỏi của bạn và phát hiện ra đó là vì AnyEditPlugin. Cảm ơn!
Tzafrir

Câu trả lời:


142
  1. Xóa khoảng trắng khỏi toàn bộ tệp đang được chỉnh sửa :

Preferences-> Java-> Editors-> Save Actions-> kiểm tra Perform the selected actions on save-> kiểm tra Additional actions-> nhấp Configure..-> chuyển đến Code organizingtab -> kiểm tra Remove trailing whitespace-> chọn All lines.

  1. Chỉ xóa khoảng trắng khỏi các dòng tôi đã thay đổi :

Preferences-> Java-> Editor-> Save Actions-> kiểm tra " Perform the selected actions on save-> kiểm tra Format source code-> chọn Format edited lines.

Lưu ý không cần phải nhấp Configure the formatter settings on the Formatter page- tất cả các kiểu mã tự động bao gồm xóa khoảng trắng theo sau. Ít nhất tôi không thể tìm thấy một cài đặt cho cấu hình Formatter này và nó đã hoạt động tốt cho các Công ước Java, các kiểu Eclipse, Eclipse 2.1 tích hợp, cũng như GoogleStyle .

Khi sử dụng thiết lập này, rõ ràng bạn cũng cần tắt giải pháp cho phần 1 của câu hỏi.

Eclipse version checked: 4.5.2, 4.11

Làm cách nào để xác định định dạng? Tôi có sử dụng liên kết Formatter hoặc nút Configure không?
Vijay Kotari

Tùy chọn này cũng xuất hiện trong PDT cho PHP, bên dưới Lưu hành động.
thaddeusmt

1
@VijayKotari Trả lời đã được chỉnh sửa - không cần xác định định dạng.
Jan Żankowski

350

Tôi giả sử câu hỏi của bạn liên quan đến mã Java. Nếu đó là trường hợp, bạn thực sự không cần thêm bất kỳ bổ trợ nào để thực hiện 1). Bạn chỉ có thể đi tới Tùy chọn -> Java -> Trình chỉnh sửa -> Lưu Hành động và định cấu hình nó để xóa khoảng trắng theo sau .

Bằng âm thanh của nó, bạn cũng muốn biến nó thành một khung cảnh toàn đội, phải không? Để làm cho cuộc sống dễ dàng hơn và tránh phải nhớ thiết lập nó mỗi khi bạn có một không gian làm việc mới, bạn có thể đặt hành động lưu dưới dạng tùy chọn cụ thể của dự án được lưu trữ vào SCM của bạn cùng với mã.

Để thực hiện điều đó, nhấp chuột phải vào dự án của bạn và đi đến Thuộc tính -> Trình soạn thảo Java -> Lưu hành động . Từ đó bạn có thể kích hoạt các cài đặt cụ thể của dự án và định cấu hình nó để xóa khoảng trắng ở cuối (trong số những thứ hữu ích khác).

NB : Tùy chọn này đã bị xóa trong Eclipse Kepler (4.3) và các bản phát hành sau.

NB # 2: Tùy chọn dường như đã trở lại trong Eclipse Luna -Luna Service Release 1a (4.4.1)


2
Cảm ơn, gcastro - nó dễ hơn AnyEdit. Thật không may, toàn bộ tập tin đang được chỉnh sửa .. vẫn không biết làm thế nào chỉ với những dòng tôi đã thay đổi - có vẻ như bây giờ có lẽ là không thể.
Jan Żankowski

7
Tốt cho Java; tốt cho C / C ++; nhưng không phải cho Python trong PyDev.
Craig McQueen

14
Đối với Python ở PyDev, tôi đã đưa ra yêu cầu tính năng cho việc này. Xem: sourceforge.net/tracker/ Kẻ
Craig McQueen

5
FYI ... Cùng một khái niệm cho PHP. Tùy chọn -> PHP -> Trình chỉnh sửa -> Lưu hành động.
seanmrafferty

1
Tôi không biết điều này có từng hoạt động không, nhưng dường như nó không hoạt động trong phiên bản mới nhất của Eclipse (Kepler). Bạn chỉ có thể chạy trình định dạng trên các dòng đã chỉnh sửa, nhưng việc cắt xén khoảng trắng bị giới hạn ở tất cả các dòng hoặc bỏ qua các dòng trống - thực sự gây khó chịu.
Thor84no

73

Bạn không cần bất kỳ plugin nào để làm như vậy. Ví dụ: nếu bạn mã JAVA, bạn có thể xóa các khoảng trắng theo dõi cấu hình các hành động lưu:

Nhật thực 3.6

Preferences-> Java-> Editors-> Save Actions-> Kiểm tra Perform the selected actions on save-> Kiểm tra Additional actions-> Nhấp vào Configure..nút.

Trong Code organizingtab, kiểm traRemove trailing whitespace


4
Đây là câu trả lời đầu tiên đặc biệt khuyên bạn nên tìm trong phần "Hành động bổ sung" cho "Xóa khoảng trắng theo dõi". Cảm ơn.
DavidRR

7
cái này chỉ hoạt động với các tập tin .java, tôi thường làm việc với hàng tá mức độ
Eildosa

Hoạt động cho Eclipse 4.12
Matilda Smbed

46

PyDev có thể làm điều đó bằng Ctrl+ Shift+ Fnếu bạn có tùy chọn định dạng mã được đặt để làm điều đó hoặc bởi during saving:

Eclipse-> Window-> Preferences-> PyDev-> Editor-> Code Style-> Code Formatter:

Tôi sử dụng ít nhất là:

  • Định dạng tự động trước khi lưu
  • Đường viền bên phải?
  • Thêm dòng mới vào cuối tập tin

5
Điều này không bao gồm câu hỏi tước không gian chỉ từ các dòng đã chỉnh sửa. Đây cũng là một tính năng nguy hiểm vì nó chạy tất cả các tùy chọn Trình định dạng mã và tùy chọn không được kiểm tra không giống như "bỏ qua / không sử dụng". ví dụ: nếu "Sử dụng dấu cách sau dấu phẩy" không được chọn, Trình định dạng mã sẽ xóa các khoảng trắng đó thay vì bỏ qua tùy chọn.
JC Bông

7
Có một tùy chọn mới trong PyDev Code Formatter: Khi lưu, chỉ áp dụng định dạng trong các dòng thay đổi.
warvariuc

2
-1 vì đã đưa ra một câu trả lời quá chung chung, câu hỏi chỉ là về khoảng trắng; cho phép định dạng mã tự động có nghĩa là các cam kết nguồn của bạn sẽ bắt đầu có những thứ không có trong đó, gây ra một lịch sử lộn xộn vì các xác nhận chứa những thứ không liên quan đến tiêu đề cam kết.
Erik Kaplun


19

Bạn có thể ánh xạ một khóa trong Eclipse để xóa thủ công các khoảng trắng trong toàn bộ tệp, nhưng chỉ theo yêu cầu thay vì tự động lưu. (Ưu tiên / Khóa và sau đó ánh xạ một bộ khóa vào Tệp / Xóa khoảng trắng lưu trữ) Điều này có thể hữu ích nếu bạn muốn vệ sinh tất cả các tệp mới, nhưng giữ nguyên mã kế thừa.

Một chiến lược khác là kích hoạt hiển thị trực quan khoảng trắng, vì vậy ít nhất bạn sẽ biết khi bạn thêm một số khoảng trắng ở cuối. Theo như tôi biết, không có cách nào để chỉ hiển thị khoảng trắng ở cuối, nhưng tôi sẽ rất vui khi được chứng minh là sai.


Cảm ơn bạn rất nhiều vì câu trả lời này! Cho đến nay, đó là cách duy nhất mà tôi đã tìm thấy cho plugin Aptana.
Igor Zinov'yev

11

Tóm lại, đối với những trình soạn thảo không hỗ trợ loại bỏ khoảng trắng ở cuối (ví dụ: trình soạn thảo XML), bạn có thể xóa nó khỏi tất cả các dòng bằng cách tìm và thay thế, bật biểu thức chính quy, sau đó tìm "[\ ​​t] + $ "và thay thế nó bằng" "(để trống). Có lẽ có một regex tốt hơn để làm điều đó nhưng nó hoạt động với tôi mà không cần phải cài đặt AnyEdit.


9

Tôi cũng sẽ nói AnyEdit. Nó không cung cấp chức năng cụ thể này. Tuy nhiên, nếu bạn và nhóm của bạn sử dụng các tính năng AnyEdit tại mỗi hành động lưu, thì khi bạn mở tệp, nó không được có bất kỳ khoảng trắng ở cuối nào.

Vì vậy, nếu bạn sửa đổi tệp này và nếu bạn thêm khoảng trắng theo dõi mới, thì trong quá trình lưu, AnyEdit sẽ chỉ xóa các khoảng trắng mới này, vì chúng là khoảng trắng duy nhất trong tệp này.

Nếu, vì một số lý do, bạn cần giữ các khoảng trắng ở các dòng không được sửa đổi bởi bạn, thì tôi không có câu trả lời cho bạn và tôi không chắc loại tính năng này tồn tại trong bất kỳ plugin Eclipse nào ...


4
Có, tôi muốn giữ các khoảng trắng trên các dòng không bị sửa đổi bởi tôi .. Đây là hành vi mặc định của Intellij Idea (xóa các khoảng trắng trên các dòng của tôi, giữ chúng trên các dòng khác) và tôi muốn có được điều đó trong Eclipse . Cảm ơn câu trả lời.
Jan Żankowski



4

Có một cách thực sự dễ dàng để làm điều này với sed, công cụ dòng lệnh Unix. Bạn có thể có thể tạo một macro trong Eclipse để chạy cái này:

sed -i 's/[[:space:]]*$//' <filename>

4

Như @Malvineous đã nói, Nó không chuyên nghiệp mà chỉ sử dụng phương pháp Tìm / Thay thế để xóa không gian dấu (bên dưới bao gồm tab U + 0009 và khoảng trắng U + 0020).
Chỉ cần nhấn Ctrl + F (hoặc lệnh + F)

  1. Tìm thấy [\t ][\t ]*$
  2. Thay thế bằng chuỗi trống
  3. Sử dụng biểu thức chính quy
  4. Thay thế tất cả

thêm:
Để xóa không gian hàng đầu, hãy tìm ^[\t ][\t ]*thay vì [\t ][\t ]*$
Để xóa các dòng trống, hãy tìm^\s*$\r?\n


1
Làm thế nào về [\t ]+$thay vì [\t ][\t ]*$?
Jonah Graham

1

Tôi không biết về bất kỳ giải pháp nào cho phần thứ hai của câu hỏi của bạn. Lý do là không rõ làm thế nào để xác định tôi đã thay đổi . Thay đổi khi nào? Chỉ giữa 2 lần lưu hoặc giữa các lần xác nhận ... Về cơ bản - hãy quên nó đi.

Tôi giả sử bạn muốn tuân theo một số hướng dẫn, nhưng không chạm vào phần còn lại của mã. Nhưng hướng dẫn nên được sử dụng tổng thể, và không cho các vết cắn và miếng. Vì vậy, đề xuất của tôi là - thay đổi tất cả mã theo hướng dẫn: đó là hoạt động một lần, nhưng hãy đảm bảo rằng tất cả các nhà phát triển của bạn có cùng một plugin (AnyEdit) với cùng cài đặt cho dự án.


7
Vì nó là một hành động lưu, nó sẽ là các dòng thay đổi giữa các lần lưu. Eclipse đã theo dõi các dòng này để đánh dấu trong thanh bên.
starblue

0

Tôi đã sử dụng lệnh này cho git: git config --global core.whitespace cr-at-eol

Nó loại bỏ các ^Mký tự đang theo dõi.

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.