Dlaczego klawisze strzałek nie są zalecane w Vimie
124
„Nigdy nie używaj klawiszy strzałek w Vimie!”
Słyszałem to od przypadkowego mówcy, ale nie miałem okazji zapytać go, dlaczego. Ponadto, jeśli nie używasz klawiszy strzałek, jak możesz przesunąć kursor w trybie wstawiania ?
Historyczne odpowiedzi na to pytanie są interesujące. Mniej niż wyznania religijne.
Isaac Rabinovitch
5
Dobre pytanie. To zawsze wkurza mnie na temat vi [m], jako użytkownik klawiatury Dvorak to naprawdę do kitu!
wim
32
Pamiętam, kiedy po raz pierwszy użyłem vi, wiele lat temu, starszy kolega doradzający mi: „Upewnij się, że nauczysz się używać klawiszy h, j, k i l, ponieważ pewnego dnia trafisz na maszynę w miejscu klienta, gdzie strzałka klucze nie działają, a będziesz wyglądać jak kompletna d *** głowa, jeśli nie możesz nawet pracować vi. ”
Ergwun
1
W trybie wstawiania nadal możesz przesuwać kursor za pomocą Ctrl-O, a następnie polecenia trybu normalnego, a on wróci do trybu wstawiania. Sprawdź także CTRL-G CTRL-J i CTRL-G CTRL-K, które przesuną kursor do następnego i poprzedniego wiersza w kolumnie, w której zacząłeś wstawiać.
Benoit
1
Przez lata rozwinąłem mnóstwo złych nawyków. Myślę, że muszę go używać przez bardzo wolne połączenie, aby zmusić mnie do używania lepszych nawyków.
aidan
Odpowiedzi:
172
Używanie klawiszy strzałek jest uważane za zły nawyk, ponieważ jeśli używasz klawiszy strzałek, prawdopodobnie brakuje ci wielu uroczych funkcji vima.
Kiedy ludzie zaczynają używać vima, zwykle pozostają w trybie wstawiania, ponieważ jest to bardziej jak zwykła edycja tekstu. Jednak aby być skutecznym w vimie, powinieneś być w trybie wstawiania tylko wtedy, gdy faktycznie wpisujesz tekst. Jeśli chcesz przesunąć kursor, powinieneś być w trybie normalnym. Domyślnie powinieneś być prawie w trybie normalnym.
W trybie normalnym istnieje milion skrótów do poruszania się. Możesz używać hjkldo poruszania się po jednym miejscu na raz lub możesz przemieszczać się według słów, akapitów i tak dalej. Jeśli jesteś w trybie normalnym, nie ma sensu używać klawiszy strzałek, hjklponieważ są one dalej.
Jest takie podejście, że jeśli używasz klawiszy strzałek, używasz vima „źle”. Prawda jest taka, że vim ma naprawdę stromą krzywą uczenia się, więc podczas nauki rób wszystko, co utrzymuje cię przy zdrowych zmysłach. Kiedy zacząłem używać vima, zrobiłem wszystko „w niewłaściwy” sposób i nie miałem żadnych problemów z przełamaniem nawyków, kiedy dowiedziałem się więcej o poleceniach vima.
Na przykład, kiedy zaczynałem, powiedzmy, że chciałem zmienić tekst w cudzysłowie:
String mystring = "I want to change this";
Przejdę do trybu wstawiania, przejdę na koniec łańcucha za pomocą klawiszy strzałek, naciskaj klawisz Backspace, aż łańcuch zniknie, i wpisz nowy tekst.
O wiele lepszym sposobem jest umieszczenie kursora w dowolnym miejscu łańcucha (tryb normalny), a następnie naciśnięcie ci". To będzie changein". Usunie wszystko między cytatami i wprowadzi cię w tryb wstawiania, dzięki czemu będę mógł wprowadzić nowy tekst.
@ ott-- ci<i ci)pracuj również, i nie musisz ruszać ręką z klawiatury na mysz. Jeśli chcesz przejść do początku nawiasów, a następnie zmienić zawartość f(ci(działa.
Matthew Finlay
6
„umieść kursor w dowolnym miejscu ciągu” - i ponownie, podczas gdy w trybie wstawiania można się tam dostać za pomocą strzałek, w trybie normalnym można to zrobić /wanti nacisnąć klawisz Enter, aby wylądować na słowie „chcesz”, a następnie zrobić ci".
Nathan Long
7
Hej, to jest miłe! Co za szybki, potężny sposób na poruszanie kursorem. Jedynym sposobem na poprawienie tego byłoby magiczne wskazanie, gdzie chcesz kursor, i po prostu przeskoczenie tam. Może coś wymyślimy. Myślę, że powinniśmy to nazwać „myszą”.
Matthew Scouten
18
@MatthewScouten Nikt nie twierdzi, że vim jest prostszy niż mysz. Jednak przy odrobinie praktyki jest o wiele, wiele szybszy. Używanie myszy jest jak wskazywanie i chrząkanie, aby przejść przez punkt. Vim pozwala mówić pełnymi zdaniami.
Dziekan
4
Łamanie nawyków jest dobrą odpowiedzią - ale przymusowe powstrzymywanie kogoś od normalnej aktywności jest faszystą. Co gorsza, użyteczność ( hjkl): mapowania upi downdo 2 klawiszy, które są pionowo nierozróżnialne od siebie, nie mówiąc już od lewego i prawego klawisza ..... to tragiczna demonstracja ideologicznie zaślepionej arogancji.
Nowa Aleksandria,
92
Umieszczenie klucza
W skrócie, Vimużywa hjklklawiszy jako interfejsu nawigacyjnego, ponieważ jest to pozostałość starego terminala „ADM-3A”, który miał te klawisze oznaczone strzałkami.
Ponieważ vimpochodzi od vi, używa tych samych kluczy hjkl.
Nowe nawyki
Oparty na literach zamiennik klawiszy strzałek pozwala poruszać się po tekście bez odrywania rąk od standardowej konfiguracji pisania . Jest to prawdopodobnie bardziej wydajne i szybsze niż poruszanie ręką, aby nacisnąć klawisze strzałek. Jak opisano w odnośniku nr 2 (patrz zasoby), to nie koniec zalet tego rozwiązania: VIM ma wiele innych skrótów, do których można uzyskać dostęp bez ruszania rękami.
Tryb zasobów i wstawiania
Istnieje kilka bardzo szczegółowych i dokładnych odpowiedzi na 2 części pytania: w kwestii wymiany klawiszy strzałek odpowiedziałem w szybki i podsumowujący sposób, jednak w przypadku pytania dotyczącego wstawiania zapoznaj się z zasobami wymienionymi poniżej.
Nie wspominając o tym, że klawisze hjkl są znacznie wydajniejsze niż przenoszenie rąk do klawiszy strzałek.
sixtyfootersdude
2
To nie odpowiada na pytanie, wyjaśnia tylko, dlaczego wybrano hjkl .
Matsemann
3
To jest prawdziwa i interesująca historia, ale OP pyta, jak poruszać kursorem w trybie wstawiania . hjklnie działają w trybie wstawiania, więc jak to jest odpowiedź na pytanie?
LarsH
3
@Kruug, pierwsza część pytania brzmi: dlaczego ktoś powiedział, że nigdy nie należy używać klawiszy strzałek w vimie. Fakt, że możesz używać hjklw vimie, nie wyjaśnia, dlaczego ktoś nigdy nie powinien używać klawiszy strzałek, podobnie jak fakt, że mogę jeździć na rowerze do pracy, nie wyjaśnia, dlaczego ktoś powiedziałby mi, żebym nigdy nie pobiegł.
LarsH
1
Teraz rozumiem, dlaczego Vim używa Escape, aby wyjść z trybu wstawiania ^^ Fajny obraz!
Étienne
55
Ta głupia mantra jest często powtarzana przez maszynistki dotykowe, dla których rząd domowy jest jak drugi kręgosłup lub przez maszynistkę bezdotykową, którzy chcą wyglądać fajnie. Dla maszynopisujących bez dotyku rząd domowy po prostu nie jest tak wyjątkowy, a nieznaczne poruszanie prawą ręką w kierunku strzał nie stanowi żadnego problemu.
Ważne jest, aby wziąć pod uwagę to, co ludzie, którzy powtarzają tę mantrę, proponują zamiast tego.
Zazwyczaj nalegają na używanie hjkl.
Jeśli pominiemy fakt, że te klawisze są używane tylko dlatego, że klawiatura używana przez autora vi nie miała fizycznych klawiszy strzałek, a zatem każdy argument przeciwko klawiszom strzałek jest tylko racjonalizacją, hjklto i tak są tylko nieznacznie lepsze niż strzałki. Tak, jedyną zaletą korzystania hjklze strzałek jest pominięcie tego niewielkiego ruchu prawej ręki do i ze strzałkami. To, czy ta korzyść jest warta kłopotów, należy do ciebie.
Ale ten ruch prawej ręki nie jest powodem, dla którego używanie tylko strzał jest nieefektywne. Jest to nieefektywne, ponieważ ograniczają przenoszenie znak po znaku i wiersz po wierszu, podczas gdy większość ruchu potrzebnego do edycji tekstu ma znacznie większy zakres.
Uderzenie prawej strzałki 13 razy jest nieefektywne i nudne. Jest to , że lepiej, aby wbić się lelement 13 razy? Nie. Jest równie głupi.
Trzymanie wciśniętej prawej strzałki aż do osiągnięcia celu jest mniej nudne, ale jest podatne na błędy i prawie tak nieefektywne jak 13 trafień z powodu koniecznego i niedeterministycznego spowolnienia na końcu. Jest to , że lepiej trzymać lwciśnięty klawisz? Nie, oczywiście nie.
Na szczęście większość zestawów GUI zawiera takie kombinacje, Ctrl+Rightktóre pozwalają nam przenosić słowo po słowie lub przejść do EOL, do następnego akapitu lub cokolwiek innego. Te skróty pomagają nam nawigować znacznie szybciej i inteligentniej niż za pomocą pojedynczych strzałek. Czy mamy to samo z hjkl? Nie my nie. Możemy użyć liczenia, jeśli chcemy, ale kto chce liczyć postacie dla każdego ruchu? Robienie 14kz pomocą relativenumberjest świetne, ale co z poziomymi ruchami? W przypadku dużych ruchów hjklsą gorsze niż modyfikatory + strzałki. I zgadnij co? Najbardziej potrzebujemy dużych ruchów.
Ale jesteśmy szczęściarzami, nasz ulubiony redaktor ma dziesiątki ruchów, które krążą wokół obu strzałek ihjkl : bBeEwW/?*#{}()i tak dalej. Polecenia te są niezmiernie bardziej wzmacniające niż hjkli, w większości, o wiele bardziej logiczne i intuicyjne, jeśli jesteś przyzwyczajony do Ctrl+Rightznajomych.
Przełączanie z <Right><Right><Right><Right><Right><Right><Right><Right><Right>celu llllllllllub nawet 9lśmiesznie bezcelowe.
Zmiana z <Right><Right><Right><Right><Right><Right><Right><Right><Right>na <C-Right>jest znacznie lepsza. Stamtąd przejście do wjest zarówno łatwe, jak i szybkie. Nie musisz <nop>strzały!
Jeśli te polecenia są bardziej użyteczne, wydajniejsze i bardziej intuicyjne hjkl, to dlaczego, u diabła, tylu blogerów i komentatorów upiera się przy zamianie strzałek hjkl?
Mam. Brak pomysłu.
Podsumowując, hjklmają swoje miejsce w naszym pasku narzędzi, ponieważ zawsze musimy przesuwać się o 2 znaki lub linie, ale najczęściej są to drzewa, które ukrywają las. Uważaj na ludzi głoszących przeciwko strzałom: to, co dla ciebie przygotowali, może wcale nie być lepsze.
Na początku myślałem, że powiesz, że hjkl jest bezużyteczny, ale dobre ruchy, słowa / akapity / zdania są znacznie bardziej przydatne niż mantra dotycząca ruchu pojedynczego znaku.
Xavier T.
1
Dzięki. Miałem podobną dyskusję na temat HN, która wykoleiła się z powodu złego sformułowania. Koncentrowanie się na swoich wysiłkach hjkljest bezużyteczne, ale hjklprzydatne.
romainl
5
To samo tutaj: w końcu spodobała mi się twoja odpowiedź, ale myślę, że ton był niepotrzebnie rantujący / trollujący / płonący.
UncleZeiv
Nie nazywaj ich bezużytecznymi, argument o szybkości jest dobry, a sposób, w jaki HJKL współpracuje z innymi poleceniami VIM w sposób, którego nie mają klawisze strzałek, jest również ważny.
Aviator45003
@TC Jakieś przykłady, które uczynią całą debatę bardziej interesującą?
romainl
17
Inni opisywali, dlaczego preferowane są inne sposoby przesuwania kursora, ale niewiele powiedziano na pytanie, dlaczego używanie klawiszy strzałek jest uważane za zły pomysł?
Myślę, że głównym powodem (i nieco wspomnianym w @Squeezy) jest to, że w czasach takich terminali, jak VT100, klawisze strzałek wytwarzały sekwencje specjalne interpretowane przez działający program. (Ponieważ klawisze strzałek nie są reprezentowane w ASCII, pisanie klawiszy strzałek musi być przekazywane w jakiś „specjalny” sposób.) Sekwencja ucieczki była zazwyczaj czymś w rodzaju
ESC [ A
w zależności od właściwości terminala, połączenia i trybu kursora . Jeśli twoja powłoka lub twój program nie zostały poprawnie skonfigurowane dla terminala, nie zrozumiałyby sekwencji ucieczki jako klawisza strzałki.
Gdy byłem na studiach, logowałem się do Ultrix za pośrednictwem terminali VT100, gdybym nacisnął strzałkę w trybie wstawiania vi, ESCbyłoby to interpretowane jako „wyjdź z trybu wstawiania”, a następnie następujące polecenia [ Abyły interpretowane jako polecenia trybu normalnego . Oczywiście nie to, czego użytkownik chce lub oczekuje!
Obecnie obsługa terminali i klawiszy strzałek wydaje się być bardziej niezawodna, szczególnie w środowiskach GUI. Ale te same problemy występują nadal przy korzystaniu z vima przez SSH lub Telnet.
Używanie klawiszy strzałek jest niezadowolone, ponieważ zmusza cię do przesunięcia palców od strony domowej podczas korzystania z układu QWERTY oraz z klawiatury znaków (?) Podczas korzystania z Dvoraka lub dowolnego innego układu.
Łał. Poważnie? Nie chcę w to wierzyć, ponieważ oznaczałoby to, że ludzie, którzy zaprojektowali Vima, myśleli, że ich użytkownicy spędzają więcej czasu na pisaniu niż na myśleniu.
Renan
13
Dlaczego poruszenie ręką wymaga myślenia?
EBGreen
8
Cóż, kiedy musiałem to zrobić w szkole, musiałeś nacisnąć Esc, zanim będziesz mógł korzystać z nawigacji HJKL, więc już zdjąłeś lewą rękę z rzędu domów, aby podnieść swoją różowicę do Esc. Pamiętam, że aby cofnąć się o jedno miejsce i wstawić znak, musiałeś wpisać „Esc: cześć”, a następnie wpisać znak, który chcesz wstawić. to nie jest takie pomocne.
Frank Thomas
1
@Renan - zakładasz, że „pisanie” oznacza „wstawianie tekstu”. Kiedy czytam i myślę, trzymam palce za wierszem domu, ponieważ klawiaturę poruszam się po Vimie: szukanie ruchu, otwieranie innych plików w celu porównania kodu, przeskakiwanie w celu poprawienia błędów ortograficznych itp.
Nathan Długi
2
@Renan - 1) nie doceniasz oszczędności i 2) dodajesz małe rzeczy. Widziałem, jak zaawansowani użytkownicy Vima mogą pisać dotykowo z prędkością 10 razy większą niż inni programiści. Przy wystarczającej prędkości edycja staje się automatyczna i nie zakłóca myśli ani przepływu. Praca w ten sposób jest przyjemnością, więc pływa moją łodzią, ale postawiłbym, że to większy wzrost wydajności niż myślisz. Spróbuj obejrzeć koderów takich jak Gary Bernhardt jako przykład.
Nathan Long
10
Klawisze strzałek wykazują problem - był już znany w vi - na wolnych połączeniach, jak w modemie 1200 bodów. Strzałka tłumaczy się na sekwencję ESC, taką jak ESC a. Teraz, gdy czas między ESC a a staje się zbyt długi, w końcu słyszysz BEL (lub widzisz błysk), a następnie tryb dołączania. Nie pojawi się z hjklklawiszami.
ESC [ Ajest zaciskiem DEC VT-100 (zacisk ANSI był silnie pochodną strzałki DEC VT-100) IIRC, ESC Abyła strzałką ADM-3A lub ewentualnie strzałką DEC VT-52. Punkt pozostaje ten sam, jednak ESCznak wysłany jako część klawisza strzałki był łatwo mylony z ESCpisanym ręcznie.
RBerteig
@RBerteig: Dobrze wiedzieć.
LarsH
5
W odniesieniu do drugiego pytania:
[I] Jeśli nie używasz klawiszy strzałek, jak możesz przesunąć kursor w trybie wstawiania?
Dla tego, kto jest mistrzem, a zatem nie znosi klawiszy strzałek, pojęcie „trybu” również nie istnieje.
Mistrz dodaje nowy tekst nie używając trybu wstawiania, ale raczej kompletne wkładać lub wymiany poleceń , które zaczynają się od kodu operacji, takich jak i, olub cw, że jest po tekście ładunku, a zakończona ESC. Polecenia mają składnię, więc maszyna przechodzi przez stany akceptując składnię poleceń, ale w modelu nadrzędnym edytora nie powodują one trybu. To, co uczniowie naiwnie nazywają „trybem”, jest dla mistrza niedokończonym stanem polecenia, najbardziej odrażającą sytuacją, której mistrz unika.
Ilekroć mistrz zdaje sobie sprawę, podczas gdy w trakcie wykonywania polecenia wstawiania lub zastępowania, tekst ten musi być wstawiany lub usuwany inaczej niż na następnej pozycji znaku wskazanej przez kursor, master kończy polecenie wstawiania i uwalnia jeden z dziesiątek wydajnych polecenia ruchu (uciekaj się do niskiego, hjkljeśli mocniejszy sposób nie jest oczywiście stosowany).
Ponadto, ponieważ master rzadko jest rozpraszany w taki sposób, że pozostawia polecenie niedokończone, master rzadko, jeśli w ogóle, powoduje, że edytor wydaje sygnał dźwiękowy z powodu wprowadzenia zbędnego ESCwydania „na wszelki wypadek”.
(Jednak gdy sieć jest opóźniona lub maszyna jest zablokowana, mistrz ESCwściekle i kilkakrotnie wciska klawisz, tak jak wszyscy inni.)
Pamiętaj, że jeśli viwpis polecenia wstawiania jest trybem, to aby być uczciwym, musimy zidentyfikować wszystkie takie tryby w innych edytorach i nazwać je modalnymi. Na przykład, gdy wciskamy Ctrl-X w Emacsie, jesteśmy w „trybie”, w którym można na przykład nacisnąć Ctrl-S, aby zapisać dokument, co nie będzie działało poza tym „trybem”.
Kaz
5
klawisze strzałek mogą nie działać dobrze w niektórych środowiskach. hjkl są normalnymi postaciami i są dobrze rozumiane przez wszelkiego rodzaju terminale.
Nie poruszasz kursorem w trybie wstawiania (z wyjątkiem Backspace i poprawiania krótkiej literówki), idea vi polega na wejściu w tryb wstawiania tylko po to, aby coś wprowadzić. Ruch odbywa się w trybie normalnym
Jeśli możesz, powinieneś unikać używania hjkl do poruszania się, gdziekolwiek ma to zastosowanie, a zamiast tego używaj ich tylko do wskazówek. Istnieje wiele opcji poruszania się w vi , patrz: http://vim.wikia.com/wiki/Moving_around
W rzeczywistości możesz przesuwać kursor w trybie wstawiania, przynajmniej w lewo, używając backspace. Ale zgadzam się, że nie możesz go swobodnie przenosić.
LarsH
Próbowałem wyrazić, że wcale NIE CHCESZ przesuwać kursora w trybie wstawiania .
Squeezy
Przepraszam, źle zrozumiałem to, co napisałeś, mówiąc, że nie możesz poruszać kursorem w trybie wstawiania. Właściwie chcę przesunąć kursor w trybie wstawiania: jeśli wprowadzam nowy tekst i nacisnę niewłaściwy klawisz, chcę użyć spacji, aby go poprawić. Ale poza tym ograniczonym wykorzystaniem, zgadzam się.
LarsH
3
Tak, z wielu wyżej wymienionych powodów, vizostał pierwotnie napisany do użycia hjkl, ale „ nigdy ” nie jest dość dużym stwierdzeniem.
Mam tendencję do modyfikowania vim(i innych narzędzi, których używam), aby zachowywać się tak, jak chcę. Działa to świetnie na moim komputerze, ale jako twórca oprogramowania wbudowanego nie zawsze wybieram to, co znajduje się na obsługiwanych komputerach. Spotykam starsze maszyny, które tylko czasami mają hjklnawigację vi. W końcu wstawiam kody kontrolne do mojego pliku na sekundę lub dwie, dopóki nie zerwę z nałogiem i przejdę do hjkl.
Jedyny ważny powód, dla którego mogę wymyślić „nigdy nie używaj klawiszy strzałek w Vimie!” jest tak, że możesz używać maszyn, które nie obsługują klawiszy strzałek. To wydaje się dość cienkim powodem, aby powiedzieć „ nigdy ”.
jeśli nie używasz klawiszy strzałek, jak możesz przesunąć kursor w trybie wstawiania?
Głównym powodem, dla którego zniechęcam ludzi do używania klawiszy strzałek, jest wyraźne, ponieważ pozwala na poruszanie się w trybie wstawiania.
Jednym z najdziwniejszych problemów z nauką vima dla nowicjuszy jest to, że polecenie cofnięcia vima działa poprzez cofnięcie ostatniej akcji , a nie ostatniego klawisza . Wielu moich przyjaciół cały czas pozostaje w trybie wstawiania, ponieważ nigdy nie ma powodu, aby z niego wychodzić. Kiedy pytają mnie „Jak cofnąć?” Odpowiadam „uderzając literę uz trybu poleceń”, denerwują się, gdy vim usuwa cały plik.
„Vim jest dość bezwartościowym edytorem tekstów, jeśli nie potrafi cofnąć rzeczy”.
Trudno jest użyć narzędzia, zanim się nauczysz.
Vim staje się użyteczny dopiero, gdy nauczysz się go używać. Moc vima polega na tym, jak możesz powiedzieć mu „zrób to ponownie” lub „cofnij to” lub „zrób to tylko wtedy, gdy uderzę w ten skrót klawiaturowy makro” poprzez podświadomą pamięć mięśni. Jeśli „to coś” stanie się „wpisz cały plik od początku do końca”, zgadzam się, vim wcale nie jest tak użyteczny.
Z tego powodu powinieneś wprowadzać tekst tylko wtedy, gdy jesteś w środku insert mode. Unikanie klawiszy strzałek to tylko jeden ze sposobów, dzięki któremu możemy szybciej stać się lepszym użytkownikiem vima.
Uruchamianie vima podczas pracy na moim urządzeniu z Androidem, na którym działa demon ssh w kbox, doprowadziło mnie do częściowego wyłamania się ze strefy komfortu. Ponieważ emulator terminala Anroid w urządzeniu używa przycisków głośności do zastąpienia specjalnych kombinacji klawiszy (ctrl + cokolwiek), niektóre klawisze, których normalnie używałbym na klawiaturze, nie działają w tej sytuacji.
Na przykład klucz Insert nie działa w tym środowisku, więc używam Ido przełączania do trybu wstawiania. Klawisz Esc, którego zwykle używam do ucieczki z trybu wstawiania, również nie działa, więc ctrl + [zamiast tego używam do ucieczki. Klawisz Home i End nie działają tak, jak jestem przyzwyczajony. Zamiast tego polegam na skrótach 0i $skrótach, z którymi nigdy się nie przejmowałem, aby dotrzeć do początku lub końca linii.
W każdym razie klawisze strzałek nadal działają jak zwykle w mojej sytuacji, ale miło jest wiedzieć, że są tam minimalistyczne skróty klawiaturowe.
byłoby to przydatne, gdy chcesz użyć klawisza strzałki w trybie wstawiania
0decimal0
0
Oto moje 2 ¢.
Rób, z czym czujesz się komfortowo. Jeśli używasz różnych edytorów, łatwiej jest używać klawiszy strzałek dla zachowania spójności.
Z drugiej strony, jest absolutnie genialne, vi (i vim) nie potrzebują żadnych specjalnych kluczy, z wyjątkiem być może. Prawdopodobnie mógłbyś zhakować stary selektor IBM, aby działał jako terminal.
Inną rzeczą, na którą należy zwrócić uwagę, jest to, że klawisze strzałek mogą nie działać zgodnie z oczekiwaniami. Użyłem terminali, w których nie działały. Nie jestem pewien, jak dokładnie są implementowane w Vimie, ale jestem pewien, że nie jest jednolity. Moja nierówna pamięć wydaje się nawet przypominać jedną implementację, w której zostały zaimplementowane jako makra vim.
Nazwa gry z ulepszonymi edytorami tekstu wydaje się „szybko się przemieszczać” i ograniczać zmarnowany / powtarzalny ruch. Po przejściu z klawiszy liter na klawisze strzałek (w zależności od wymiarów klawiatury) tracisz trochę czasu i wracasz do wiersza głównego. Ale jeśli możesz dostać się do klawisza ESC za pomocą lewego lub małego palca tryby przełączania palca serdecznego stają się jednym płynnym ruchem, a podczas sesji edycyjnej nastąpi wzrost prędkości.
I to jest klucz do drugiej części pytania, wyjdź z trybu wstawiania, naciskając ESC lewą stroną i ruszaj hjkl prawą stroną. W końcu będziesz w stanie to zrobić bez pomijania rytmu.
Biorąc to pod uwagę, nigdy nie dotarłem nigdzie z Vimem, dopóki nie wypróbowałem niektórych z wymienionych tutaj rzeczy , z których najważniejsze to sekcja „ Wydajność: mapowanie skrótów ”
Odpowiedzi:
Używanie klawiszy strzałek jest uważane za zły nawyk, ponieważ jeśli używasz klawiszy strzałek, prawdopodobnie brakuje ci wielu uroczych funkcji vima.
Kiedy ludzie zaczynają używać vima, zwykle pozostają w trybie wstawiania, ponieważ jest to bardziej jak zwykła edycja tekstu. Jednak aby być skutecznym w vimie, powinieneś być w trybie wstawiania tylko wtedy, gdy faktycznie wpisujesz tekst. Jeśli chcesz przesunąć kursor, powinieneś być w trybie normalnym. Domyślnie powinieneś być prawie w trybie normalnym.
W trybie normalnym istnieje milion skrótów do poruszania się. Możesz używać
hjkl
do poruszania się po jednym miejscu na raz lub możesz przemieszczać się według słów, akapitów i tak dalej. Jeśli jesteś w trybie normalnym, nie ma sensu używać klawiszy strzałek,hjkl
ponieważ są one dalej.Jest takie podejście, że jeśli używasz klawiszy strzałek, używasz vima „źle”. Prawda jest taka, że vim ma naprawdę stromą krzywą uczenia się, więc podczas nauki rób wszystko, co utrzymuje cię przy zdrowych zmysłach. Kiedy zacząłem używać vima, zrobiłem wszystko „w niewłaściwy” sposób i nie miałem żadnych problemów z przełamaniem nawyków, kiedy dowiedziałem się więcej o poleceniach vima.
Na przykład, kiedy zaczynałem, powiedzmy, że chciałem zmienić tekst w cudzysłowie:
Przejdę do trybu wstawiania, przejdę na koniec łańcucha za pomocą klawiszy strzałek, naciskaj klawisz Backspace, aż łańcuch zniknie, i wpisz nowy tekst.
O wiele lepszym sposobem jest umieszczenie kursora w dowolnym miejscu łańcucha (tryb normalny), a następnie naciśnięcie ci". To będzie
change
in
"
. Usunie wszystko między cytatami i wprowadzi cię w tryb wstawiania, dzięki czemu będę mógł wprowadzić nowy tekst.źródło
ci<
ici)
pracuj również, i nie musisz ruszać ręką z klawiatury na mysz. Jeśli chcesz przejść do początku nawiasów, a następnie zmienić zawartośćf(ci(
działa./want
i nacisnąć klawisz Enter, aby wylądować na słowie „chcesz”, a następnie zrobićci"
.hjkl
): mapowaniaup
idown
do 2 klawiszy, które są pionowo nierozróżnialne od siebie, nie mówiąc już od lewego i prawego klawisza ..... to tragiczna demonstracja ideologicznie zaślepionej arogancji.Umieszczenie klucza
W skrócie,
Vim
używahjkl
klawiszy jako interfejsu nawigacyjnego, ponieważ jest to pozostałość starego terminala „ADM-3A”, który miał te klawisze oznaczone strzałkami.Nowe nawyki
Oparty na literach zamiennik klawiszy strzałek pozwala poruszać się po tekście bez odrywania rąk od standardowej konfiguracji pisania . Jest to prawdopodobnie bardziej wydajne i szybsze niż poruszanie ręką, aby nacisnąć klawisze strzałek. Jak opisano w odnośniku nr 2 (patrz zasoby), to nie koniec zalet tego rozwiązania: VIM ma wiele innych skrótów, do których można uzyskać dostęp bez ruszania rękami.
Tryb zasobów i wstawiania
Istnieje kilka bardzo szczegółowych i dokładnych odpowiedzi na 2 części pytania: w kwestii wymiany klawiszy strzałek odpowiedziałem w szybki i podsumowujący sposób, jednak w przypadku pytania dotyczącego wstawiania zapoznaj się z zasobami wymienionymi poniżej.
źródło
hjkl
nie działają w trybie wstawiania, więc jak to jest odpowiedź na pytanie?hjkl
w vimie, nie wyjaśnia, dlaczego ktoś nigdy nie powinien używać klawiszy strzałek, podobnie jak fakt, że mogę jeździć na rowerze do pracy, nie wyjaśnia, dlaczego ktoś powiedziałby mi, żebym nigdy nie pobiegł.Ta głupia mantra jest często powtarzana przez maszynistki dotykowe, dla których rząd domowy jest jak drugi kręgosłup lub przez maszynistkę bezdotykową, którzy chcą wyglądać fajnie. Dla maszynopisujących bez dotyku rząd domowy po prostu nie jest tak wyjątkowy, a nieznaczne poruszanie prawą ręką w kierunku strzał nie stanowi żadnego problemu.
Ważne jest, aby wziąć pod uwagę to, co ludzie, którzy powtarzają tę mantrę, proponują zamiast tego.
Zazwyczaj nalegają na używanie
hjkl
.Jeśli pominiemy fakt, że te klawisze są używane tylko dlatego, że klawiatura używana przez autora vi nie miała fizycznych klawiszy strzałek, a zatem każdy argument przeciwko klawiszom strzałek jest tylko racjonalizacją,
hjkl
to i tak są tylko nieznacznie lepsze niż strzałki. Tak, jedyną zaletą korzystaniahjkl
ze strzałek jest pominięcie tego niewielkiego ruchu prawej ręki do i ze strzałkami. To, czy ta korzyść jest warta kłopotów, należy do ciebie.Ale ten ruch prawej ręki nie jest powodem, dla którego używanie tylko strzał jest nieefektywne. Jest to nieefektywne, ponieważ ograniczają przenoszenie znak po znaku i wiersz po wierszu, podczas gdy większość ruchu potrzebnego do edycji tekstu ma znacznie większy zakres.
Uderzenie prawej strzałki 13 razy jest nieefektywne i nudne. Jest to , że lepiej, aby wbić się
l
element 13 razy? Nie. Jest równie głupi.Trzymanie wciśniętej prawej strzałki aż do osiągnięcia celu jest mniej nudne, ale jest podatne na błędy i prawie tak nieefektywne jak 13 trafień z powodu koniecznego i niedeterministycznego spowolnienia na końcu. Jest to , że lepiej trzymać
l
wciśnięty klawisz? Nie, oczywiście nie.Na szczęście większość zestawów GUI zawiera takie kombinacje,
Ctrl+Right
które pozwalają nam przenosić słowo po słowie lub przejść do EOL, do następnego akapitu lub cokolwiek innego. Te skróty pomagają nam nawigować znacznie szybciej i inteligentniej niż za pomocą pojedynczych strzałek. Czy mamy to samo zhjkl
? Nie my nie. Możemy użyć liczenia, jeśli chcemy, ale kto chce liczyć postacie dla każdego ruchu? Robienie14k
z pomocąrelativenumber
jest świetne, ale co z poziomymi ruchami? W przypadku dużych ruchówhjkl
są gorsze niż modyfikatory + strzałki. I zgadnij co? Najbardziej potrzebujemy dużych ruchów.Ale jesteśmy szczęściarzami, nasz ulubiony redaktor ma dziesiątki ruchów, które krążą wokół obu strzałek i
hjkl
:bBeEwW/?*#{}()
i tak dalej. Polecenia te są niezmiernie bardziej wzmacniające niżhjkl
i, w większości, o wiele bardziej logiczne i intuicyjne, jeśli jesteś przyzwyczajony doCtrl+Right
znajomych.Przełączanie z
<Right><Right><Right><Right><Right><Right><Right><Right><Right>
celulllllllll
lub nawet9l
śmiesznie bezcelowe.Zmiana z
<Right><Right><Right><Right><Right><Right><Right><Right><Right>
na<C-Right>
jest znacznie lepsza. Stamtąd przejście dow
jest zarówno łatwe, jak i szybkie. Nie musisz<nop>
strzały!Jeśli te polecenia są bardziej użyteczne, wydajniejsze i bardziej intuicyjne
hjkl
, to dlaczego, u diabła, tylu blogerów i komentatorów upiera się przy zamianie strzałekhjkl
?Mam. Brak pomysłu.
Podsumowując,
hjkl
mają swoje miejsce w naszym pasku narzędzi, ponieważ zawsze musimy przesuwać się o 2 znaki lub linie, ale najczęściej są to drzewa, które ukrywają las. Uważaj na ludzi głoszących przeciwko strzałom: to, co dla ciebie przygotowali, może wcale nie być lepsze.źródło
hjkl
jest bezużyteczne, alehjkl
przydatne.Inni opisywali, dlaczego preferowane są inne sposoby przesuwania kursora, ale niewiele powiedziano na pytanie, dlaczego używanie klawiszy strzałek jest uważane za zły pomysł?
Myślę, że głównym powodem (i nieco wspomnianym w @Squeezy) jest to, że w czasach takich terminali, jak VT100, klawisze strzałek wytwarzały sekwencje specjalne interpretowane przez działający program. (Ponieważ klawisze strzałek nie są reprezentowane w ASCII, pisanie klawiszy strzałek musi być przekazywane w jakiś „specjalny” sposób.) Sekwencja ucieczki była zazwyczaj czymś w rodzaju
w zależności od właściwości terminala, połączenia i trybu kursora . Jeśli twoja powłoka lub twój program nie zostały poprawnie skonfigurowane dla terminala, nie zrozumiałyby sekwencji ucieczki jako klawisza strzałki.
Gdy byłem na studiach, logowałem się do Ultrix za pośrednictwem terminali VT100, gdybym nacisnął strzałkę w trybie wstawiania vi,
ESC
byłoby to interpretowane jako „wyjdź z trybu wstawiania”, a następnie następujące polecenia[ A
były interpretowane jako polecenia trybu normalnego . Oczywiście nie to, czego użytkownik chce lub oczekuje!Obecnie obsługa terminali i klawiszy strzałek wydaje się być bardziej niezawodna, szczególnie w środowiskach GUI. Ale te same problemy występują nadal przy korzystaniu z vima przez SSH lub Telnet.
źródło
Używanie klawiszy strzałek jest niezadowolone, ponieważ zmusza cię do przesunięcia palców od strony domowej podczas korzystania z układu QWERTY oraz z klawiatury znaków (?) Podczas korzystania z Dvoraka lub dowolnego innego układu.
źródło
Klawisze strzałek wykazują problem - był już znany w vi - na wolnych połączeniach, jak w modemie 1200 bodów. Strzałka tłumaczy się na sekwencję ESC, taką jak
ESC a
. Teraz, gdy czas między ESC a a staje się zbyt długi, w końcu słyszysz BEL (lub widzisz błysk), a następnie tryb dołączania. Nie pojawi się zhjkl
klawiszami.źródło
ESC [ A
to ci chodzi?ESC [ A
jest zaciskiem DEC VT-100 (zacisk ANSI był silnie pochodną strzałki DEC VT-100) IIRC,ESC A
była strzałką ADM-3A lub ewentualnie strzałką DEC VT-52. Punkt pozostaje ten sam, jednakESC
znak wysłany jako część klawisza strzałki był łatwo mylony zESC
pisanym ręcznie.W odniesieniu do drugiego pytania:
Dla tego, kto jest mistrzem, a zatem nie znosi klawiszy strzałek, pojęcie „trybu” również nie istnieje.
Mistrz dodaje nowy tekst nie używając trybu wstawiania, ale raczej kompletne wkładać lub wymiany poleceń , które zaczynają się od kodu operacji, takich jak
i
,o
lubcw
, że jest po tekście ładunku, a zakończonaESC
. Polecenia mają składnię, więc maszyna przechodzi przez stany akceptując składnię poleceń, ale w modelu nadrzędnym edytora nie powodują one trybu. To, co uczniowie naiwnie nazywają „trybem”, jest dla mistrza niedokończonym stanem polecenia, najbardziej odrażającą sytuacją, której mistrz unika.Ilekroć mistrz zdaje sobie sprawę, podczas gdy w trakcie wykonywania polecenia wstawiania lub zastępowania, tekst ten musi być wstawiany lub usuwany inaczej niż na następnej pozycji znaku wskazanej przez kursor, master kończy polecenie wstawiania i uwalnia jeden z dziesiątek wydajnych polecenia ruchu (uciekaj się do niskiego,
hjkl
jeśli mocniejszy sposób nie jest oczywiście stosowany).Ponadto, ponieważ master rzadko jest rozpraszany w taki sposób, że pozostawia polecenie niedokończone, master rzadko, jeśli w ogóle, powoduje, że edytor wydaje sygnał dźwiękowy z powodu wprowadzenia zbędnego
ESC
wydania „na wszelki wypadek”.(Jednak gdy sieć jest opóźniona lub maszyna jest zablokowana, mistrz
ESC
wściekle i kilkakrotnie wciska klawisz, tak jak wszyscy inni.)źródło
vi
wpis polecenia wstawiania jest trybem, to aby być uczciwym, musimy zidentyfikować wszystkie takie tryby w innych edytorach i nazwać je modalnymi. Na przykład, gdy wciskamy Ctrl-X w Emacsie, jesteśmy w „trybie”, w którym można na przykład nacisnąć Ctrl-S, aby zapisać dokument, co nie będzie działało poza tym „trybem”.źródło
Tak, z wielu wyżej wymienionych powodów,
vi
został pierwotnie napisany do użyciahjkl
, ale „ nigdy ” nie jest dość dużym stwierdzeniem.Mam tendencję do modyfikowania
vim
(i innych narzędzi, których używam), aby zachowywać się tak, jak chcę. Działa to świetnie na moim komputerze, ale jako twórca oprogramowania wbudowanego nie zawsze wybieram to, co znajduje się na obsługiwanych komputerach. Spotykam starsze maszyny, które tylko czasami mająhjkl
nawigacjęvi
. W końcu wstawiam kody kontrolne do mojego pliku na sekundę lub dwie, dopóki nie zerwę z nałogiem i przejdę dohjkl
.Jedyny ważny powód, dla którego mogę wymyślić „nigdy nie używaj klawiszy strzałek w Vimie!” jest tak, że możesz używać maszyn, które nie obsługują klawiszy strzałek. To wydaje się dość cienkim powodem, aby powiedzieć „ nigdy ”.
źródło
Głównym powodem, dla którego zniechęcam ludzi do używania klawiszy strzałek, jest wyraźne, ponieważ pozwala na poruszanie się w trybie wstawiania.
Jednym z najdziwniejszych problemów z nauką vima dla nowicjuszy jest to, że polecenie cofnięcia vima działa poprzez cofnięcie ostatniej akcji , a nie ostatniego klawisza . Wielu moich przyjaciół cały czas pozostaje w trybie wstawiania, ponieważ nigdy nie ma powodu, aby z niego wychodzić. Kiedy pytają mnie „Jak cofnąć?” Odpowiadam „uderzając literę uz trybu poleceń”, denerwują się, gdy vim usuwa cały plik.
„Vim jest dość bezwartościowym edytorem tekstów, jeśli nie potrafi cofnąć rzeczy”.
Trudno jest użyć narzędzia, zanim się nauczysz.
Vim staje się użyteczny dopiero, gdy nauczysz się go używać. Moc vima polega na tym, jak możesz powiedzieć mu „zrób to ponownie” lub „cofnij to” lub „zrób to tylko wtedy, gdy uderzę w ten skrót klawiaturowy makro” poprzez podświadomą pamięć mięśni. Jeśli „to coś” stanie się „wpisz cały plik od początku do końca”, zgadzam się, vim wcale nie jest tak użyteczny.
Z tego powodu powinieneś wprowadzać tekst tylko wtedy, gdy jesteś w środku
insert mode
. Unikanie klawiszy strzałek to tylko jeden ze sposobów, dzięki któremu możemy szybciej stać się lepszym użytkownikiem vima.źródło
Uruchamianie vima podczas pracy na moim urządzeniu z Androidem, na którym działa demon ssh w kbox, doprowadziło mnie do częściowego wyłamania się ze strefy komfortu. Ponieważ emulator terminala Anroid w urządzeniu używa przycisków głośności do zastąpienia specjalnych kombinacji klawiszy (ctrl + cokolwiek), niektóre klawisze, których normalnie używałbym na klawiaturze, nie działają w tej sytuacji.
Na przykład klucz Insert nie działa w tym środowisku, więc używam
I
do przełączania do trybu wstawiania. Klawisz Esc, którego zwykle używam do ucieczki z trybu wstawiania, również nie działa, więcctrl + [
zamiast tego używam do ucieczki. Klawisz Home i End nie działają tak, jak jestem przyzwyczajony. Zamiast tego polegam na skrótach0
i$
skrótach, z którymi nigdy się nie przejmowałem, aby dotrzeć do początku lub końca linii.W każdym razie klawisze strzałek nadal działają jak zwykle w mojej sytuacji, ale miło jest wiedzieć, że są tam minimalistyczne skróty klawiaturowe.
źródło
po prostu napisz następujące polecenie przed napisaniem w vimie: -
Jednym z problemów jest to, że za każdym razem będziesz musiał to napisać.
źródło
Oto moje 2 ¢.
Rób, z czym czujesz się komfortowo. Jeśli używasz różnych edytorów, łatwiej jest używać klawiszy strzałek dla zachowania spójności.
Z drugiej strony, jest absolutnie genialne, vi (i vim) nie potrzebują żadnych specjalnych kluczy, z wyjątkiem być może. Prawdopodobnie mógłbyś zhakować stary selektor IBM, aby działał jako terminal.
Inną rzeczą, na którą należy zwrócić uwagę, jest to, że klawisze strzałek mogą nie działać zgodnie z oczekiwaniami. Użyłem terminali, w których nie działały. Nie jestem pewien, jak dokładnie są implementowane w Vimie, ale jestem pewien, że nie jest jednolity. Moja nierówna pamięć wydaje się nawet przypominać jedną implementację, w której zostały zaimplementowane jako makra vim.
źródło
Nazwa gry z ulepszonymi edytorami tekstu wydaje się „szybko się przemieszczać” i ograniczać zmarnowany / powtarzalny ruch. Po przejściu z klawiszy liter na klawisze strzałek (w zależności od wymiarów klawiatury) tracisz trochę czasu i wracasz do wiersza głównego. Ale jeśli możesz dostać się do klawisza ESC za pomocą lewego lub małego palca tryby przełączania palca serdecznego stają się jednym płynnym ruchem, a podczas sesji edycyjnej nastąpi wzrost prędkości.
I to jest klucz do drugiej części pytania, wyjdź z trybu wstawiania, naciskając ESC lewą stroną i ruszaj hjkl prawą stroną. W końcu będziesz w stanie to zrobić bez pomijania rytmu.
Biorąc to pod uwagę, nigdy nie dotarłem nigdzie z Vimem, dopóki nie wypróbowałem niektórych z wymienionych tutaj rzeczy , z których najważniejsze to sekcja „ Wydajność: mapowanie skrótów ”
źródło