Zatrzymaj naciśnięcie klawisza spacji przed wyzwalaniem autouzupełniania w Eclipse

86

Aktualizacja

Zostało to naprawione w Eclipse 2018-12 . To zachowanie jest nadal domyślne, ale można je wyłączyć - zobacz zaakceptowaną odpowiedź, aby dowiedzieć się, jak to zrobić

Zostawię to pytanie tak, jak było dla potomności i dla tych z wcześniejszych wersji Eclipse


W Eclipse włączyłem sugestie w stylu Intellisense dla Javy, przechodząc do

Window -> Preferences -> Java/Editor/Content Assist

i ustawiając następujące

Auto activation delay (ms) -> 0
Auto activation triggers for Java -> .(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

source = Eclipse Intellisense?

Działa to znakomicie, poza jednym irytującym problemem. Kiedy trafiam spacebar, wpisywany token jest automatycznie uzupełniany tym, co znajduje się na górze listy sugestii. W porządku, z wyjątkiem tego, że czasami wpisuję nazwę klasy / zmiennej z dokładnym prawidłowym dopasowaniem, ale nie pojawi się to jako pierwsza sugestia. Kiedy więc naturalnie uderzam, spacebarEclipse wstawia coś zupełnie nie tak.

EG po wpisaniu Cookieuderzę spacebari dostanę CookieMonster.

Wygląda to na błąd i zdarza się wystarczająco często, by być denerwującym, ale mimo to ogólnie nie chcę spacebaruruchamiać autouzupełniania . Mogę wpisać nazwę zmiennej, która nie została jeszcze zadeklarowana, lub coś podobnego. Chcę używać autouzupełniania jako narzędzia pomocniczego, ale moje naturalne pisanie zawsze powinno mieć pierwszeństwo przed nim.

Chciałbym przestać spacebaruruchamiać autouzupełnianie i albo wrócić do używania enter, albo jeszcze lepiej uruchamiać autouzupełnianie za pomocą customklawisza, którego nie używa się w zwykłym pisaniu. Czy coś z tego jest możliwe?

Bezskutecznie bawiłem się wszystkimi ustawieniami w Content Assist . Wyszukiwanie w Google pytania po prostu zwraca kilka wyników dotyczących wyłączenia funkcji autouzupełniania.


Ten problem został rozwiązany w Eclipse 2018-12 [4.10], zobacz zaakceptowaną odpowiedź

Występuje we wszystkich wcześniejszych wersjach, tj. 2018-09 [4.9], Photon [4.8], Oxygen [4.7], Neon [4.6] itp.

davnicwil
źródło
+1 Właśnie walczyłem z tym samym problemem ... czy masz szczęście w rozwiązaniu tego? Naciśnięcie spacji i uzyskanie czegoś, czego nie chcesz (nie wybrałeś tego!) Jest bardzo denerwujące ... Może to być dobre w przypadku „deklaracji typu”, ale w przypadku „nazw zmiennych” nie jest rozsądne.
emgsilva
Niestety nie. Czy wiesz, czy ten sam problem występuje w najnowszej wersji Kepler (4.3)? Nie dokonałem jeszcze aktualizacji, ale jeśli tak, zaktualizuję pytanie
davnicwil
3
Niestety to samo zachowanie ma miejsce w Kepler (4.3)… Szkoda. Bardzo mi się podoba ta automatyczna aktywacja, ale jest to naprawdę denerwujące, gdy dokonuje takiego wyboru w kilku sytuacjach. Moim tymczasowym rozwiązaniem jest nieznaczne wydłużenie czasu aktywacji, tak żebym napisał większość nowej nazwy zmiennej ... ale to nie zawsze działa. Poszukam nieco dokładniej tego problemu i prawdopodobnie będę zgłaszać to Eclipse, ponieważ uważam, że jest to błąd, a nie funkcja.
emgsilva,
możliwy duplikat stackoverflow.com/questions/7371618/… (co wskazuje, że Indigo też już tak się zachowywało)
herman
6
Sądząc po liczbie głosów pozytywnych na to pytanie i braku głosów pozytywnych na odpowiedzi, wygląda na to, że Eclipse musi to naprawić!
andrewb

Odpowiedzi:

20

Eclipse 2018-12 zostało już załatane!

Łatka dla Bug 348857 została niedawno włączona do projektu Eclipse i została wydana jako część Eclipse 2018-12 . Możesz pobrać tę wersję tutaj .

Masz teraz nową opcję wyłączania wszystkich wyzwalaczy wstawiania z wyjątkiem enter, co zapobiegnie spacebarpowodowaniu autouzupełniania.

Po prostu przejdź do Preferencje ... -> Java -> Edytor -> Asysta treści (lub Okno -> Preferencje -> Java -> Edytor -> Pomoc treści w systemie Windows) i wybierz opcję Wyłącz wyzwalacze wstawiania z wyjątkiem „Enter” , jak pokazano w zrzut ekranu poniżej: Wyłącz preferencje wyzwalaczy wstawiania

Pyves
źródło
1
Świetnie, wielkie dzięki. Dodałem nagłówek do Twojej odpowiedzi, aby ludzie wyraźnie widzieli, że dotyczy ona aktualnych wersji. Inne odpowiedzi są nieaktualne.
callmebob
1
@Pyves Przyjęcie nowej odpowiedzi zajęło mi trochę czasu, przepraszam, ale nie używam już Eclipse i nie udało mi się go zweryfikować. W każdym razie tak, wygląda na to, że definitywnie rozwiązuje problem i bardzo się cieszę, że został rozwiązany ponad 6 lat później!
davnicwil
Czy ktoś napotyka problem polegający na tym, że tłumienie wyzwalacza nie działa w widoku powłoki debugowania? U mnie spacja uruchamia autouzupełnianie. (Jestem w czerwcu 2019)
William Dutton,
@William Dutton prawdopodobnie coś, co należy oznaczyć w osobnym raporcie o błędzie.
Pyves
26

Istnieje rozwiązanie tego problemu w narzędziu do śledzenia problemów . Skopiuj jar do folderu eclipse / dropins. Przy następnym ponownym uruchomieniu przestrzeń jest wyłączana jako wyzwalacz autouzupełniania.

https://bugs.eclipse.org/bugs/show_bug.cgi?id=348857

Eclipse 12-2018 i nowsze: To działa natywnie, sprawdź odpowiedź Pyves.

Pascalius
źródło
2
Wygląda świetnie, ale… nie działa dla mnie w Eclipse Juno - bez zmian w zachowaniu, spacja nadal aktywuje autouzupełnianie. Czy to działa dla ciebie w Kepler? Gdzie znajdują się przyciski / pozycje menu paska narzędzi do przełączania narzędzia wspomnianego w wątku o błędzie?
davnicwil
1
Tak, działa dla mnie w Kepler Service Release 1. Jednak nie widzę też elementów paska narzędzi.
Pascalius
To nie działa dla mnie w Eclipse Luna SR2 (4.4.2 - identyfikator kompilacji: 20150219-0600).
BrainSlugs83
Właśnie szybko stworzyłem wtyczkę (poniżej w odpowiedzi @ AndrewXu na temat pisania wtyczek), która zmienia zachowanie w Eclipse Luna, aby akceptować tylko klawisze Tab i Enter jako klucze uzupełniania intelli-sense.
BrainSlugs83
1
@Pascalius dziękuję za odpowiedź, która przez długi czas była najlepsza, ale teraz Eclipse naprawiło to i umożliwiło konfigurację natywną. Wskazuje na to nowsza odpowiedź, więc zaakceptowałem ją, ponieważ jest to teraz najlepszy sposób rozwiązania problemu.
davnicwil
7

Użyj wersji SDK eclipse

1.open Plug-ins Wyświetl i znajdź org.eclipse.jface.text, kliknij prawym przyciskiem myszy, wybierz import jako projekt źródłowy. Po zaimportowaniu znajdziesz go w swoim obszarze roboczym.

2. w src / org / eclipse / jface / text / contentassist / CompletionProposalPopup.java

char[] triggers = t.getTriggerCharacter();
if(contains(triggers,key))

zmień na

if(key!='='&&key!=0x20&&contains(triggers,key))

3. Eksportuj org.eclipse.jface.text

Kliknij prawym przyciskiem folder projektu org.eclipse.jface.text, wybierz eksport -> Wdrażalne wtyczki i fragmenty, następnie miejsce docelowe wybierz plik archiwum, zakończ. Zastąp ten w eclipse / plugins tym, który wygenerujesz.

Andrew Xu
źródło
2
Dla tych, którzy zastanawiają się, jak otworzyć ten widok, przejdź do „Okno” -> „Pokaż widok” -> „Inne ...” iw polu tekstowym filtru zacznij wpisywać „wtyczka”, a następnie wybierz z pola „Wtyczki” poniżej i naciśnij „OK”.
BrainSlugs83
Ponadto, jeśli szukasz środowiska bardziej podobnego do Visual Studio, zalecam po prostu skomentowanie tego bloku w całości (blok domyślny), skomentowanie bloku „\ t”, a następnie znalezienie bloku, który obsługuje „\ r” i '\ n' (tuż nad tymi dwoma) i dodając do niego '\ t'. - To da ci uzupełnienie zakładki. :-)
BrainSlugs83
(Dla tych, którzy nie chcą przechodzić przez te wszystkie problemy, oto moje dla 64-bitowej wersji Eclipse Luna SR2 4.4.2: 1drv.ms/1GZhJPq - pamiętajcie o zmianach, o których wspomniałem powyżej.)
BrainSlugs83
@ BrainSlugs83 Jeśli możesz a) opublikować kod na github lub b) dodać „.” do wyzwalaczy ukończenia, byłoby wspaniale.
lakemalcom
Dlaczego użyłeś 0x20zamiast ' '?
Załóż pozew Moniki
3

Spacja była kluczem do wybrania autouzupełniania nawet w Indigo. O ile wiem, nie można tego skonfigurować. W rzeczywistości prawdopodobnie dlatego istnieje opóźnienie.

Proponuję ustawić opóźnienie na jakąś optymalną wartość, która pozwoli ci private void ...wygodnie wpisywać rzeczy, takie jak wygodnie bez wyzwalania sugestii dla privatei void. Następnie, jeśli pojawi się sugestia, ponieważ czekałeś zbyt długo, naciśnij Escape, aby przerwać obsługę treści.

Hermana
źródło
Zwiększenie opóźnienia odniosło tylko ograniczony sukces.
Raedwald
0

Ta sama konfiguracja co davnicwil, ten sam problem, nadal na Eclipse 4.4.

Rozwiązanie : Przechwyć (zaczep) SHIFT + SPACJA (naciśnij i przytrzymaj) na zaćmieniu (okno edytora) i zastąp je klawiszami ESC, SPACJA (sekwencja). Teraz Ty decydujesz między

  • Autouzupełnianie + SPACJA: naciśnij SPACJĘ, gdy pojawi się autosugestia
  • po prostu SPACJA: naciśnij predefiniowaną kombinację klawiszy lub sekwencję (np. SHIFT + SPACJA)

W systemie Windows możesz użyć http://www.heise.de/download/activaid.html (możesz również użyć AutoHotkey, java native hook, ...)

HowTo with ActivAid:

  1. Otwórz Ac'tivAid, wybierz „UserHotkeys”
  2. kliknij „+”, ustaw opis
  3. kliknij „skrót”, naciśnij np. SHIFT + SPACJA
  4. Polecenie: „{ESC} {SPACJA}” (bez cudzysłowów)
  5. kliknij „+”, wybierz ramkę edytora zaćmień, naciśnij ENTER
  6. kliknij OK, OK w Ac'tivAid

Mój plik konfiguracyjny: activAid / settings / ac'tivAid.ini: [UserHotkeys]

Hotkey11=+Space
Path11=<Send>{ESC}{SPACE}
Description11=Eclipse Shift+Space -> Esc,Space
Category11=
Application11=ahk_class SWT_Window0

Możesz również zmienić przypisanie klawiszy na klawiaturach innych niż angielski za pomocą „HotStrings”, np. Ö -> {, ä->} itp.

user3178008
źródło
0

Wreszcie się udało.

Spróbuj pobrać ten org.eclipse.jface.text.jar i skopiuj go do folderu wtyczek (zazwyczaj eclipse / plugin). Nie zapomnij wykonać kopii zapasowej własnego.

Działa na Eclipse Juno.

Jeśli link nie działa, skomentuj to, dzięki.

cy198706
źródło
Nie można uruchomić MARS1 Eclipse, java.lang.RuntimeException: w rejestrze nie można znaleźć aplikacji „org.eclipse.ui.ide.workbench”.
Tiina,
-3

Możesz wyłączyć automatyczną aktywację za pomocą pola wyboru w

Window -> Preferences -> Java/Editor/Content Assist

i aktywuj funkcję autouzupełniania na żądanie. Domyślny klawisz skrótu to

CTRL+Space

giskou
źródło
3
Cały problem polega na tym, że chcę zachowanie automatycznej aktywacji, tylko bez spacji wykonującej autouzupełnianie
davnicwil
-3

W Eclipse przejdź do Window -> Preferences -> General -> Keys i usuń powiązanie dla polecenia Content Assist.

SpaceTrucker
źródło
1
To wyeliminowałoby możliwość wywoływania sugestii za pomocą Ctrl + Spacja. To, czego chce OP, to sposób na wyłączenie wyboru sugestii za pomocą spacji. Nie ma do tego powiązania klucza.
herman