Zakończenie Vima - zawsze pomijaj nowy wiersz po wybraniu sugestii za pomocą klawisza Enter


11

Czasami po wybraniu sugestii (z wyskakującego okienka, które pojawia się po naciśnięciu Ctrl-N) za pomocą klawisza Enter, Vim wstawi nową linię, a kursor zostanie przeniesiony do następnej linii. Nie zawsze tak się dzieje - wydaje się, że Vim stara się być mądry i przeniesie mnie do następnej linii, jeśli uzna, że ​​tego właśnie chciałbym.

Chcę jednak wyłączyć to zachowanie (ponieważ nie zawsze jest inteligentne), aby zawsze musiałem sam przejść do następnego wiersza, ręcznie naciskając klawisz Enter. czy to możliwe?

Odpowiedzi:


14

To, co robi Vim w odpowiedzi na wpisanie klawisza <Enter> podczas korzystania z funkcji uzupełniania, zależy od stanu menu uzupełniania. Zachowanie menu opisano tutaj:

:help ins-completion-menu

a zachowanie różnych kluczy podczas korzystania z uzupełniania wstawek opisano w następnej sekcji,

:help popupmenu-keys

gdzie wyjaśnia, że ​​zachowanie klawisza <Enter> zależy od stanu menu. Jak rozumiem, wpisanie <Enter> wstawia nowy wiersz, z wyjątkiem przypadku, gdy wybrałeś dopasowanie z menu za pomocą klawiszy kursora.

Najlepszym sposobem uniknięcia wstawiania nowej linii, gdy nie chcesz, jest zakończenie lub dokonanie wyboru za pomocą innego klawisza, takiego jak Ctrl-Y lub Ctrl-E.

Zobacz też

:help complete_CTRL-Y

i dla całego opisu w przypadku zakończenia trybu wstawiania,

:help ins-completion

4

Możesz dodać to mapowanie do pliku .vimrc:

inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"

Mapuje klawisz powrotu w trybie wstawiania na CTRL-Y, gdy menu podręczne jest widoczne. CTRL-Y wybiera aktualnie wybrany element z menu bez wchodzenia w nowy wiersz. W przeciwnym razie klawisz powrotu będzie działał normalnie.


1
Czy możesz wyjaśnić, co robi ten kod i jak rozwiązuje problem zgłoszony przez PO? Niewyjaśniony kod może wydawać się niezaufany i niebezpieczny dla użytkowników.
bwDraco

0

Dodałem to do .vimrc i teraz działa tak, jak chcę:

noremap pumvisible ()? „\”: „”

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.