Nawigacja w trybie wstawiania

20

W końcu zdecydowałem się porzucić klawisze strzałek do nawigacji na korzyść hjkl. Użyłem Vim hardmodewtyczki, aby wyłączyć klawisze strzałek.

Przyzwyczaiłem się do nawigacji dość szybko, ale okazuje się, że nawigacja w trybie wstawiania nagle jest niemożliwa.

Czy jest na to jakieś rozwiązanie? (istniejący tryb wstawiania nie jest rozwiązaniem).

stdcall
źródło
8
Tak: użyj klawiszy strzałek :-) Po to są ;-)
Martin Tournoij
@Carpetsmoker, jeśli dostępne są klawisze strzałek, użyłbym ich zamiast hjkl ....
stdcall
5
Ale chodzi o to, że wyjście z trybu wstawiania (mianowicie używanie go tylko do tego, do czego jest przeznaczone, tj. Małe wstawki przeplatane innymi poleceniami) jest właśnie rozwiązaniem. Jeśli się nie mylę, zobaczyłem to w pomocy, jeśli znajdę link, opublikuję go. Wygląda na to, że przywykłeś do tego aż tak bardzo, a nie do klawiszy strzałek.
The Vee
Możesz powiązać klawiaturę, aby używać strzałek jako skrótu, takiego jak <kbd> super </kbd> + <kbd> j </kbd>, aby przejść w dół. <kbd> super </kbd> może być dowolnym przyciskiem, na przykład <kbd> Caps Lock </kbd> jest dość powszechny
ivanjermakov

Odpowiedzi:

26

Masz wiele opcji. Jedną z opcji, a IMO najrozsądniejszym i najłatwiejszym jest po prostu przestać wyłączać klawisze strzałek. Rozumiem, dlaczego wielu hardkorowych vimerów mówi takie rzeczy

Nigdy nie powinieneś nigdy więcej używać klawiszy strzałek! Za każdym razem, gdy używasz klawiszy strzałek, tracisz 3 minuty, szczeniak umiera i ktoś przechodzi na Emacsa!

(Oczywiście żartuję) Są jednak klawisze strzałek. Są niezwykle przydatne do nawigacji:

  • W trybie wstawiania

  • W wierszu poleceń

Zasadniczo, gdy ludzie mówią ci, abyś nie używał klawiszy strzałek, dzieje się tak dlatego, że chcą, abyś ponownie nauczył się nawigacji w bardziej vim-sposób. Jeśli czujesz się swobodnie hjkli najczęściej używasz klawiszy strzałek w trybie wstawiania, nie ma powodu, aby zmuszać się do ich nieużywania.

Opcja # 2 polega na zmianie mapowania, ctrl-hjklaby działała jak klawisze kursora. Jest to miłe, ponieważ możesz pozostać na homerow i dobrze pasuje do pamięci mięśni, której nauczyłeś się już hjklw trybie normalnym. W rzeczywistości to właśnie robię . Główną wadą tego podejścia jest to, że ustawienie w terminalu vim może być uciążliwe, ponieważ <C-j>powoduje powstanie NULbajtu. Poradzę sobie z tym za pomocą Gvima. Nie wiem, czy istnieje łatwa poprawka dla konsoli vim, czy nie.

Opcja # 3 służy <C-o>do wykonywania małych ruchów w trybie normalnym. Na przykład, jeśli piszesz

Hello world!
     cursor^

i zdajesz sobie sprawę, że zapomniałeś przecinka, zamiast robić leftleftleftleftleftleft, możesz po prostu wykonać <C-o>b<C-o>hlub <C-o>2Foinną kombinację ruchów w trybie normalnym, którą lubisz.

Oczywiście, inną opcją, którą bardzo lubię, jest po prostu użycie Esc, wykonaj kilka małych ruchów, zanim wrócisz do normalnego trybu. Wspomniałeś, że wolisz tego nie robić, ale czasami jest to naprawdę najbardziej efektywny sposób.

Prawdopodobnie istnieją też inne podejścia, ale te, które lubię, działały dla mnie.

DJMcMayhem
źródło
2
Ciekawe - zauważam, że używasz <c-o>gki <c-o>gjzamiast <Up>i <Down>. Dlaczego?
Kyle Strand
4
@kylestrand gki gjwizualnie przechodź w górę i w dół linii, nawet jeśli linia jest owinięta.
DJMcMayhem
4
Nie sądzę, aby to wystarczyło, aby uzasadnić odpowiedź samodzielnie, ale lubię wyłączać klawisze strzałek w trybie normalnym (co zmusiło mnie do nauki HJKL) i włączać we wszystkich innych trybach ( noremap <Up> <NOP>...) . Spędzasz wystarczająco dużo czasu w trybie normalnym, aby nauczyć się języka HJKL, ale są tam, gdy ich potrzebujesz. A przynajmniej uważam, że jest to wygodny środek pomiędzy pozostawieniem ich zawsze wyłączonych lub zawsze włączonych i nie wymaga ponownego mapowania innych klawiszy (wiele osób takich jak Ctrl-HJKL do poruszania się między panelami).
Itai Ferber
Btw, BASH i wsp. Obsługują powiązania klawiszy vi. Za pomocą tych mapowań możesz <ESC> i używać hjkl do przeglądania historii poleceń cmd (w górę / w dół) lub modyfikować bieżące polecenie (w lewo / w prawo)
Rolf,
9

Lubię używać klawisza Control, aby zmienić hjklklawisze ruchu w „uniwersalne” klawisze ruchu. Oto odpowiedni fragment mojego .vimrc:

" In insert or command mode, move normally by using Ctrl
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
cnoremap <C-h> <Left>
cnoremap <C-j> <Down>
cnoremap <C-k> <Up>
cnoremap <C-l> <Right>

Te inoremapstwierdzenia odnoszą się do trybu wstawiania, podczas gdy cnoremapte odnoszą się do trybu poleceń. (Używam tego mapowania od tak dawna, że ​​zapomniałem, czy jest jakiś sposób na nawigację bez historii w trybie poleceń).

(Edycja: Widzę, że inna odpowiedź wspomniała już o tej możliwości. Mimo to pomocne może być zobaczenie rzeczywistych poleceń mapowania.)

Kyle Strand
źródło
3

Naciśnij, esca następnie użyj hjkli wWbBinnych nawigacji, które chcesz wykonać. Istotą trybu trudnego jest nauczenie się nawigacji przy użyciu bardziej złożonych ruchów vima. Wprowadź niewielkie zmiany, a następnie przenieś się do nowej lokalizacji, używając trybu normalnego.

Jeśli nie chcesz nauczyć się szybszej nawigacji z włączonym trybem twardym, sprawdź moją odpowiedź z innego pytania na ten sam temat.

Archanioł 33
źródło
3

Jeśli chcesz przesunąć więcej niż JEDEN lub DWIE pozycje ...

... najlepszym wyborem jest uderzenie ESC, poruszanie się i powrót do trybu wstawiania.

Nie ma sensu tworzyć mapowań, takich jak <C-h>przesuwanie się w lewo, a następnie uderzanie go zbyt wiele razy ... jako użytkownik vima nie powinieneś naciskać tego samego klawisza wiele razy, aby osiągnąć sprytny ruch.

(Jeśli ESCklucz nie jest blisko twoich palców, dobrze byłoby utworzyć dla niego mapowanie).

Jeśli chcesz przesunąć JEDNĄ lub DWIE pozycje w trybie wstawiania ...

... dobrym wyborem byłoby zdefiniowanie niektórych ruchów za pomocą <Leader>klucza:

(Używam ,jako <Leader>klucza, ponieważ jest blisko i wygodnie dla moich palców)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward
rossijonas
źródło
1

Jeśli potrzebujesz tylko zmodyfikować niewielką ilość tekstu lub słowa, możesz użyć <Ctrl-O>h/j/k/l.

<Ctrl-O> przenosi cię z powrotem do trybu normalnego tylko dla tego polecenia, a następnie przenosi z powrotem do trybu wstawiania, dzięki czemu oszczędzasz pewną liczbę naciśnięć klawiszy, jeśli chcesz przejść do trybu normalnego dla małego ruchu.

Patrz: 1. http://vim.wikia.com/wiki/Use_Ctrl-O_instead_of_Esc_in_insert_mode_mappings

alpha_989
źródło