Vim przesuwa kursor o jeden znak w trybie wstawiania bez klawiszy strzałek

9

To może wydawać się trochę za daleko, ale przełączyłem się na vim i jestem bardzo szczęśliwy z przepływu pracy. Staram się dyscyplinować, aby nie używać klawiszy strzałek, ponieważ trzymanie rąk na klawiszach alfa przez cały czas jest tak wielką rzeczą podczas pisania. Więc kiedy muszę nawigować, wychodzę z trybu wstawiania, przechodzę w tryb normalny i wracam do trybu wstawiania.

Istnieje wyjątek, w którym jest to bardziej zakłócające: używam clang completez fragmentami i super tabco jest świetne. Z wyjątkiem tego, że za każdym razem, gdy wypełniam funkcję auto po wypełnieniu parametrów, jestem przed kursorem, )więc aby kontynuować, muszę przesunąć kursor o jeden znak w prawo. Jak możesz sobie wyobrazić, dzieje się to bardzo często .

Jedyne opcje, jakie mam (o ile wiem) to: Esclalub i nie jestem zadowolony z żadnej z nich. Pierwszy zmusza mnie do uderzenia w 3 klawisze za prosty ruch kursora o 1 znaku, drugi zmusza mnie do przesunięcia ręki na klawisze strzałek. Trzecią opcją byłoby CTRL-Lzmapowanie lub coś .

Więc jaki jest najlepszy sposób na zrobienie tego?


//snippets (clang complete + supertab):
foo($`param1`, $`param2`)

//after completion:
foo(var1, var2|)
              ^ ^
              | |
     I am here  |
                 Need to be here

| oznacza pozycję kursora

bolov
źródło
Z podobnym problemem skończyłem hackować skrypt ukończenia, aby po prostu nie zamykał echa, )jeśli w funkcji jest co najmniej jeden argument. Więc piszę to ręcznie. Teraz o wiele bardziej przydatny.
Dmitry Frank
Co się stanie, gdy wpiszesz ), założę się, że przeskakuje bez wstawiania. (Nie używam tej wtyczki)
FDinoff
@FDinoff nie, po prostu wstawia inny)
bolov
1
@bolov to rozczarowujące. Możesz być w stanie wyodrębnić kod, który robi to z par automatycznych . Nie mam pojęcia, czy wtyczki będą powodować konflikty. Inną opcją jest <C-O>lprzejście do trybu normalnego dla 1 polecenia trybu normalnego.
FDinoff

Odpowiedzi:

5

Mapuj, )aby pominąć istniejące, )jeśli jest to nawias zamykający

inoremap <expr> )  strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")"

Zaczerpnięte z: http://vim.wikia.com/wiki/Automatically_append_closing_characters


Stara odpowiedź

:h i_CTRL-O wykonaj jedno polecenie, wróć do trybu wstawiania.

Ctrl-ol przeniesie Cię o jedną postać w prawo, a następnie wróci do trybu wstawiania.

Alternatywnie niektóre wtyczki nawiasu klamrowego pozwalają po prostu wpisać nawias zamykający )i zastąpią istniejący.

Brett Y
źródło
1
to nie działa, jeśli )jest ostatnim znakiem w linii (i zdarza się to często podczas pisania kodu). CTRL-O ajednak działa. Więc chyba zapisaliśmy jeden klucz. :)
bolov
Prawda del )to tylko dwie postacie i zawsze umieści cię po nawiasie zamykającym.
Brett Y
przeskakiwanie „)” działa jak urok, dziękuję
bolov
1

Wpisz następujące polecenie, aby znaleźć klawisze sterujące używane w trybie wstawiania.

:help insert-index

ctrl-b nie jest używane, ale możesz chcieć poświęcić jakiś inny klucz.

imap <c-b> <right>

Działa to, aby przesunąć kursor w prawo o jeden znak. Lub zmapuj jakiś podwójny znak.

imap jj <right>
broomdodger
źródło