Dość denerwującą cechą vima jest to, że jeśli jesteś w trybie wstawiania i wykonujesz autouzupełnianie (Ctrl-N), naciśnij klawisz strzałki w dół do żądanego elementu i naciśnij klawisz Enter, a następnie wstawi element, ale również wstawi nowy wiersz, który następnie musisz usunąć.
Czy istnieje sposób na wybranie pozycji z listy autouzupełniania bez uzyskiwania dodatkowej niechcianej nowej linii?
vim
autocomplete
Tyler Durden
źródło
źródło
Odpowiedzi:
To zależy od tego, w jakim stanie jest wyskakujące menu (patrz
:help popupmenu-completion
). Rozumiem z twojego pytania, że jesteś w stanie 2 (odkąd nacisnąłeś klawisze strzałek, aby znaleźć zakończenie). Jednak domyślne zachowanie Enterw stanie 2 polega na wstawieniu uzupełnienia bez znaku nowej linii; to, co opisujesz, to zwykle zachowanie stanu 1 (to znaczy, kiedy używasz Ctrl+ N/ Ctrl+ P.)Sposobem, który działa konsekwentnie we wszystkich stanach, jest użycie Ctrl+Y . Lubię pamiętać Y jako „tak, zaakceptuj to słowo”. Możliwe jest również, aby po prostu zacząć pisać tekst, który powinien pojawić się po skończonym słowie, chyba że odwzorowałeś rzeczy jak w odpowiedzi geedoubleya.
W tym samym kontekście możesz nacisnąć Ctrl+, Eaby anulować menu i pozostawić tekst taki, jaki był przed jego wywołaniem. Jeśli jesteś przyzwyczajony do parowania Ctrl+ Ei Ctrl+ Yw innych kontekstach (np. Przewijanie w górę lub w dół w trybie normalnym lub wstawianie znaku poniżej lub powyżej kursora w trybie wstawiania), to jeden ze sposobów, aby go tutaj zapamiętać. Wydaje mi się, że można również myśleć o tym jako o „wyjściu” z menu lub podobnym.
Zobacz
:help popupmenu-keys
więcej.źródło
Osobiście korzystam z tego:
Każdy, kto korzysta z wtyczki CtrlP, może uznać to mapowanie za wygodne.
źródło
Wiem, że jest to stare, ale rodzaj poparcia dla odpowiedzi geedoubleya, ponieważ chociaż odpowiedź echristophersona była pouczająca i niesamowita, jeśli ktoś chce szybkiego i brudnego rozwiązania:
źródło
Alternatywnie do używania klawiszy strzałek, włącz klawisze
j
&k
, aby przewijać listę autouzupełniania.W ten sposób bieżący wiersz zostanie dopasowany do wybranego słowa podczas przewijania.
Dlatego nie trzeba naciskać klawisza Enter, ponieważ kursor nadal znajduje się w trybie wstawiania na końcu podstawionego słowa.
Aby to włączyć, dodaj to do swojego .vimrc (Podziękowania dla innych w Stackoverflow):
Osobno, zamiast używać klawiszy strzałek, możesz po prostu powtórzyć ten,
Ctrl-n
który przeklnie opcje (Ctrl-p
aby cofnąć) i zastąpić bieżącą linię podczas ruchu, bez potrzebyEnter
mapowania klawiszy lub vim.źródło