Jak automatycznie usunąć końcowe białe znaki w Eclipse?


422

Pytanie składa się z dwóch części, na które już mam odpowiedź.

  1. Jak automatycznie usunąć końcowe białe znaki z całego edytowanego pliku ? -> Odpowiedź: użyj wtyczki AnyEdit , którą można ustawić tak, aby robiła to przy każdym zapisie do pliku.
  2. Jak automatycznie usunąć końcowe białe znaki tylko z linii, które zmieniłem ? -> Tego nie wiem i doceniłbym każdą pomoc.

97
Byłbym szczęśliwy, gdybym tylko mógł przekonać Eclipse, aby przestał dodawać końcowe białe znaki, których nie wpisałem.
divegeek

5
Nie potrzebujesz wtyczki. Wystarczy użyć C ++ -> Edytor -> Zapisz akcje. Również Ogólne -> Edytory -> Edytory tekstu -> Pokaż znaki białych znaków (kliknij na niego, aby wyświetlić szczegółowe ustawienia) jest niezwykle przydatne.
Trass3r

3
Domyślna akcja zapisu nie przycina końcowych białych znaków w komentarzach Java Doc. Jest również ograniczony faktem, że działa tylko na plikach Java. Mamy system sprawdzania kodu, który oznacza wszystkie końcowe białe znaki jako błędy. AnyEdit jest nieoceniony, aby zadbać o końcowe białe znaki dla wszystkich typów plików. Przydatne może być również określenie ograniczeń, jakie ma Twoja firma w zakresie oprogramowania stron trzecich. Wtyczka AnyEdit ma licencję EPL ( opensource.org/licenses/eclipse-1.0.php ) [stąd: andrei.gmxhome.de/anyedit/index.html]
Ashutosh Jindal

1
Nie mogłem zrozumieć, dlaczego nagle białe spacje na końcu linii zostały usunięte, dopóki nie zobaczyłem twojego pytania i nie dowiedziałem się, że to ze względu na AnyEditPlugin. Dzięki!
Tzafrir

Odpowiedzi:


142
  1. Usuwanie białych znaków z całego edytowanego pliku :

Preferences-> Java-> Editors-> Save Actions-> sprawdź Perform the selected actions on save-> sprawdź Additional actions-> kliknij Configure..-> przejdź do Code organizingzakładki -> sprawdź Remove trailing whitespace-> wybierz All lines.

  1. Usuwanie białych znaków tylko z linii, które zmieniłem :

Preferences-> Java-> Editor-> Save Actions-> sprawdź " Perform the selected actions on save-> sprawdź Format source code-> wybierz Format edited lines.

Pamiętaj, że nie trzeba klikać Configure the formatter settings on the Formatter page- wszystkie style kodu automatycznie obejmują usuwanie końcowych białych znaków. Przynajmniej nie mogłem znaleźć ustawienia dla tego w konfiguracji Formatera i zadziałało to od razu dla wbudowanych konwencji Java, Eclipse, Eclipse 2.1, a także GoogleStyle .

Korzystając z tego zestawu, oczywiście musisz również wyłączyć rozwiązanie w części 1 pytania.

Eclipse version checked: 4.5.2, 4.11

Jak zdefiniować format? Czy używam linku Formatter lub przycisku Konfiguruj?
Vijay Kotari,

Ta opcja pojawia się również w PDT dla PHP, w obszarze Zapisz akcje.
thaddeusmt

1
@VijayKotari Odpowiedź została edytowana - nie ma potrzeby definiowania formatu.
Jan Żankowski

350

Zakładam, że twoje pytania dotyczą kodu Java. W takim przypadku tak naprawdę nie potrzebujesz żadnych dodatkowych wtyczek, aby wykonać 1). Możesz po prostu przejść do Preferencji -> Java -> Edytor -> Zapisz akcje i skonfigurować go tak, aby usuwał końcowe białe znaki .

Po dźwiękach tego chcesz też, aby było to ustawienie dla całej drużyny, prawda? Aby ułatwić życie i uniknąć konieczności pamiętania o konfigurowaniu go za każdym razem, gdy masz nowy obszar roboczy, możesz ustawić akcję zapisu jako preferencję specyficzną dla projektu, która jest zapisywana w SCM wraz z kodem.

Aby to zrobić, kliknij prawym przyciskiem myszy swój projekt i wybierz Właściwości -> Edytor Java -> Zapisz akcje . Stamtąd możesz włączyć ustawienia specyficzne dla projektu i skonfigurować je tak, aby usuwać końcowe białe znaki (między innymi przydatne rzeczy).

Uwaga : Ta opcja została usunięta w Eclipse Kepler (4.3) i kolejnych wydaniach.

NB # 2: Wydaje się, że opcja powróciła w Eclipse Luna -Luna Service Release 1a (4.4.1)


2
Dzięki, gcastro - jest łatwiejszy niż AnyEdit. Niestety, dotyczy to całego edytowanego pliku. Nadal nie wiem, jak to zrobić tylko dla linii, które zmieniłem - wygląda na to, że prawdopodobnie jest to w tej chwili niemożliwe.
Jan Żankowski,

7
Dobry dla Javy; dobre także dla C / C ++; ale nie dla Pythona w PyDev.
Craig McQueen

14
Dla Pythona w PyDev poprosiłem o to. Zobacz: sourceforge.net/tracker/…
Craig McQueen

5
FYI ... Ta sama koncepcja dla PHP. Preferencje -> PHP -> Edytor -> Zapisz akcje.
seanmrafferty

1
Nie wiem, czy to kiedykolwiek działało, ale z pewnością nie działa w najnowszej wersji Eclipse (Kepler). Możesz uruchomić formatyzator tylko na edytowanych liniach, ale przycinanie białych znaków jest ograniczone do wszystkich linii lub ignorowanie pustych linii - naprawdę denerwujące.
Thor84no

73

Nie potrzebujesz do tego żadnej wtyczki. Na przykład, jeśli kodujesz JAVA, możesz usunąć końcowe białe znaki, konfigurując działania zapisu:

Zaćmienie 3.6

Preferences-> Java-> Editors-> Save Actions-> Sprawdź Perform the selected actions on save-> Sprawdź Additional actions-> Kliknij Configure..przycisk.

Na Code organizingkarcie sprawdźRemove trailing whitespace


4
Jest to pierwsza odpowiedź, która szczególnie poleca zajrzenie do „Dodatkowych działań” dla „Usuń końcowe białe znaki”. Dzięki.
DavidRR

7
to działa tylko dla plików .java, zwykle pracuję z kilkoma rozszerzeniami
Eildosa

Działa z Eclipse 4.12
Matilda Smeds

46

PyDev może to zrobić za pomocą obuCtrl + Shift+, Fjeśli masz ustawioną opcję formatowania kodu, lub during saving:

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

Używam co najmniej tych:

  • Automatyczne formatowanie przed zapisaniem
  • Prawidłowe linie wykończenia?
  • Dodaj nową linię na końcu pliku

5
Nie obejmuje to kwestii usuwania przestrzeni tylko z edytowanych linii. Jest to również niebezpieczna funkcja, ponieważ uruchamia wszystkie opcje programu do formatowania kodu, a niezaznaczona opcja to nie to samo, co „ignoruj ​​/ nie używaj”. np. jeśli opcja „Użyj spacji po przecinkach” nie jest zaznaczona, program formatujący kod usunie te spacje zamiast ignorować opcję.
JCotton

7
W PyDev Code Formatter dostępna jest nowa opcja: przy zapisywaniu stosuj formatowanie tylko w zmienionych wierszach.
warvariuc

2
-1 za udzielenie zbyt ogólnej odpowiedzi - pytanie dotyczyło tylko białych znaków; włączenie automatycznego formatowania kodu oznacza, że ​​w zatwierdzeniach źródłowych zaczną się pojawiać nieplanowane elementy, co spowoduje bałagan w historii, ponieważ zatwierdzenia zawierają elementy niezwiązane z tytułem zatwierdzenia.
Erik Kaplun,


19

Możesz zamapować klucz w Eclipse, aby ręcznie usunąć końcowe białe znaki w całym pliku, ale tylko na żądanie zamiast automatycznie przy zapisywaniu. (Preferencje / Klucze, a następnie zamapuj zestaw kluczy na Plik / Usuń końcowe białe znaki). Może to być przydatne, jeśli chcesz wyczyścić wszystkie nowe pliki, ale pozostawiasz niezmieniony stary kod.

Inną strategią jest aktywacja wizualnego wyświetlania białych znaków, więc przynajmniej będziesz wiedział, kiedy dodajesz końcowe białe znaki. O ile mi wiadomo, nie ma sposobu, aby wyświetlić tylko końcowe białe znaki, ale cieszę się, że udowodniono mi błąd.


Dziękuję bardzo za tę odpowiedź! Jak dotąd jest to jedyny sposób, który znalazłem dla wtyczki Aptana.
Igor Zinov'yev

11

W skrócie, w przypadku edytorów, które w ogóle nie obsługują usuwania spacji końcowych (np. Edytor XML), możesz usunąć go ze wszystkich linii, wykonując wyszukiwanie i zamieniając, włączając wyrażenia regularne, a następnie wyszukując „[\ t] + $ ”i zamieniając go na„ ”(puste). Prawdopodobnie jest to lepsze wyrażenie regularne, ale działa dla mnie bez konieczności instalowania AnyEdit.


9

Powiedziałbym też AnyEdit. Nie zapewnia tej konkretnej funkcjonalności. Jeśli jednak Ty i Twój zespół korzystacie z funkcji AnyEdit przy każdej akcji składowania, to po otwarciu pliku nie może on zawierać końcowych białych znaków.

Jeśli więc zmodyfikujesz ten plik i dodasz nowe końcowe spacje, to podczas operacji składowania AnyEdit usunie tylko te nowe spacje, ponieważ są to jedyne spacje końcowe w tym pliku.

Jeśli z jakichś powodów musisz zachować końcowe spacje w liniach, które nie zostały przez ciebie zmodyfikowane, nie mam dla ciebie odpowiedzi i nie jestem pewien, czy taka funkcja istnieje w żadnej wtyczce Eclipse ...


4
Tak, chciałbym zachować spacje na liniach, które nie zostały przeze mnie zmodyfikowane. Jest to domyślne zachowanie Intellij Idea (usuń spacje na moich liniach, zachowaj je na innych), i chciałbym uzyskać to w Eclipse . Dziękuję za odpowiedź.
Jan Żankowski



4

Jest to naprawdę łatwy sposób, aby to zrobić za pomocą sed, narzędzia wiersza poleceń Uniksa. Prawdopodobnie możesz utworzyć makro w Eclipse, aby uruchomić to:

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

4

Jak powiedział @Malvineous, nie jest profesjonalne, ale obejście problemu, aby użyć metody Znajdź / Zamień, aby usunąć końcowe spacje (poniżej, w tym tabulator U + 0009 i biały znak U + 0020).
Po prostu naciśnij Ctrl + F (lub Command + F)

  1. Odnaleźć [\t ][\t ]*$
  2. Zamienić pusty ciąg
  3. Używaj wyrażeń regularnych
  4. Zamień wszystko

dodatkowo:
Aby usunąć wiodące miejsce, znajdź ^[\t ][\t ]*zamiast [\t ][\t ]*$
Aby usunąć puste linie, znajdź^\s*$\r?\n


1
A może [\t ]+$zamiast [\t ][\t ]*$?
Jonah Graham

1

Nie znam żadnego rozwiązania dla drugiej części twojego pytania. Powodem jest to, że nie jest jasne, jak zdefiniować zmieniłem . Zmieniony kiedy? Tylko między 2 zapisami lub między zatwierdzeniami ... Zasadniczo - zapomnij.

Zakładam, że chcesz trzymać się pewnych wskazówek, ale nie dotykaj reszty kodu. Ale wytyczne należy stosować ogólnie, a nie w przypadku ugryzień i kawałków. Moja propozycja to: zmień cały kod na wskazówkę: jest to operacja jednorazowa, ale upewnij się, że wszyscy twoi programiści mają tę samą wtyczkę (AnyEdit) z tymi samymi ustawieniami dla projektu.


7
Ponieważ jest to akcja zapisu, zmieniłaby się linia między zapisami. Eclipse już śledzi te linie do oznaczania na pasku bocznym.
starblue

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.