Przejdź do początku wiersza w trybie wstawiania

83

Wiem, że mogę użyć:

  1. Home w trybie wstawiania
  2. Esc+, iaby wyjść z trybu wstawiania i wprowadzić go ponownie, skutecznie przechodząc do początku wiersza.

Ale żadne mnie nie satysfakcjonuje. W pierwszym przypadku muszę przechylić głowę, żeby uderzyć Home, bo nie mogę trafić na ślepo. W drugim przypadku moja lewa ręka musi opuścić rząd domu, aby trafić Esc, co też jest denerwujące.

jakieś pomysły?

Walentyna Wasiljewa
źródło
5
Możesz użyć 0, aby przejść na początek wiersza, ale nie jest to w trybie wstawiania.
manku
3
A jeśli okaże się, że Esc również jest zbyt daleko, możesz użyć Ctrl- [zamiast tego :)
3
Albo lepiej, Ctrl-C działa jak Esc. Lub jeszcze lepiej, zamapuj Caps Lock na Esc.
Eric Wilson
4
@manku nie tyle odpowiedziałeś na jego pytanie, co nie odpowiedziałeś na jego pytanie = P
puk,
przemapuj esc na jj musisz dużo przełączać się między trybami w vimie
kapil

Odpowiedzi:

149

Ctrl+ Ow trybie wstawiania przełącza cię w tryb poleceń tylko na jedno naciśnięcie klawisza. Dlatego Ctrl+ Owtedy Shift+ Ipowinno osiągnąć to, czego szukasz.

Greg Sexton
źródło
Możesz osiągnąć to samo, naciskając Ctrl + c, I lub Ctrl + [, I. Ctrl + c jest funkcjonalnie podobny do ESC, a Ctrl + [jest odpowiednikiem ESC.
sml
42
Lub Ctrl-opo nim 0(nieco bardziej wydajnie niż Ctrl-opo nim Shift-I), ponieważ automatycznie powrócisz do trybu wstawiania. W niektórych przypadkach, Ctrl-opo którym następuje ^może być lepsze (aby przejść do pierwszego niebiałego znaku w linii).
Jeet
2
możesz użyć Alt-A lub Alt-I w trybie wstawiania, jeśli twój klawisz alt wysyła ucieczkę (można go skonfigurować w iTerm2)
Rivenfall,
2
<C-O>nie jest tym samym <C-[>lub <Esc>chociaż mogą wyglądać podobnie. Różnica polega na tym, że edycja ze zwykłym klawiszem Escape + <coś, co spowoduje ponowne przejście do trybu wstawiania> pozostawia dwie zmiany, a <CO> pozostawia jedną. Może to pomóc w zachowaniu czytelniejszej historii cofania i ponownym użyciu tej wkładki do wklejenia. Niektórzy vimowie będą argumentować, że powinieneś zwracać uwagę na takie rzeczy.
Nicolai S,
Nie rozumiem. Zarówno w systemie Linux, jak i Mac OSX, ctrl + O nie działa. Ale jeśli naciśnę klawisz ESCAPE, przechodzi do trybu poleceń, a następnie działa Shift + I.
Donato
51

Możesz wejść w tryb wstawiania używając I(duże i).

Umieści kursor na początku linii.

Podobnie możesz użyć, Aaby dodać coś na końcu linii.

Chociaż tak naprawdę nie rozwiązuje problemu przesuwania się już w trybie wstawiania.

Właśnie sprawdziłem pomoc dotyczącą trybu wstawiania, w trybie wstawiania nie ma kombinacji klawiszy do poruszania się na początku wiersza.

Inny pomysł: zmiana odwzorowania nowego polecenia tylko w trybie wstawiania

inoremap <C-i> <Home>

Xavier T.
źródło
1
T. <kbd> I </kbd> działa dobrze, ale szukam rozwiązania, aby przejść na początek wiersza, będąc już w trybie wstawiania.
Valentin Wasiljew
To nie odpowiada bezpośrednio na pytanie, ale zapewnia funkcjonalność, która prawdopodobnie wyprzedza pytania dla większości ludzi.
Joe Coder
24

Mam Ctrl + A i Ctrl + E zmapowane odpowiednio na początek i koniec linii. Jest to zgodne z zachowaniem większości linii poleceń basha. U mnie działa dobrze.

inoremap <C-e> <Esc>A
inoremap <C-a> <Esc>I
Jonathan Cutrell
źródło
Jeśli się nie mylę, są to również skróty klawiszowe dla większości innych redaktorów. Dodam je do mojego pliku vimrc.
Aaron
2
Są to typowe zachowania Emacsa. Większość przeglądarek obsługuje je również w różnych typach pól tekstowych. Nie sądzę, żeby to był zły pomysł, ale oto, czego Ci brakuje: <C-e>kopiuje / zapisuje znak pod kursorem ( <C-y>nad kursorem), <C-a>wstawia wszystko, co jest w twoim.-Rejestrze (rejestr kropkowy). Ten rejestr zostaje zapełniony tym, co właśnie wpisałeś, kiedy wychodzisz z trybu wstawiania (nawet gdy używasz Ctrl-c (do którego z wielu powodów nie powinieneś się przyzwyczajać)).
Nicolai S,
@Jonathan Cutrell Jak przejść na początek nowej linii.
powiedzmy
3

Jeśli używasz terminala MacOS, przejdź do Preferencje ...> Ustawienia> Klawiatura i przypisz klawisz zakończenia do Ctrl-O $ (jest wyświetlany jako \ 017 $), a następnie użyj fn + left, aby zasymulować klawisz zakończenia. Zrób to samo dla klucza domowego. Sekwencja ucieczki \ 033 [H działa również dla domu.

CommanderHK
źródło
1
fn-Left i fn-Right działały domyślnie dla mnie w vimie na terminalu Mac
Jeff
0

Skrótem, który zadziałał dla mnie (zarówno pamięć mięśniowa, jak i intuicyjność) jest mapowanie __(co jest podwójnym _) do „wstaw na początku bieżącej linii”.

Racjonalne uzasadnienie:

  • _ już idzie na początek linii
  • w vim, podwajanie czegokolwiek jest bardzo powszechnym sposobem robienia tego „do tej linii”
  • double _nie koliduje z żadnymi ruchami (jesteś już na początku linii)
  • Twoja ręka jest już we właściwym miejscu, jeśli poszedłeś na początek linii i teraz chcesz wstawić.

vimscript:

"insert at start of current line by typing in __ (two underscores)
function DoubleUnderscore()
    if v:count == 0 && getcurpos()[2] == 1
        :silent call feedkeys('I', 'n')
    else
        :silent call feedkeys('^', v:count + 'n')
    endif
endfunction
nnoremap <silent> _ :call DoubleUnderscore()<CR>

Jest to tak skomplikowane, ponieważ łatwa alternatywa nnoremap __ _Ipowoduje, że vim opóźnia naciśnięcie, _aby odróżnić od _i __.

Mahmoud Al-Qudsi
źródło
0
ctrl+o then 0
     |      |
  letter  number
MetalGodwin
źródło
0

używam tego polecenia, aby przejść do końca wiersza bez wychodzenia z trybu wstawiania

inoremap jl <esc><S-a>

Podobnie, aby przejść do początku wiersza:

inoremap jl <esc><S-i>
Rajat Negi
źródło