„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 ?
„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 ?
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:
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 change
in
"
. Usunie wszystko między cytatami i wprowadzi cię w tryb wstawiania, dzięki czemu będę mógł wprowadzić nowy tekst.
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.
/want
i nacisnąć klawisz Enter, aby wylądować na słowie „chcesz”, a następnie zrobić ci"
.
hjkl
): mapowania up
i down
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.
W skrócie, Vim
używa hjkl
klawiszy jako interfejsu nawigacyjnego, ponieważ jest to pozostałość starego terminala „ADM-3A”, który miał te klawisze oznaczone strzałkami.
Ponieważ
vim
pochodzi odvi
, używa tych samych kluczy hjkl.
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.
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.
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ą korzystania hjkl
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 z hjkl
? Nie my nie. Możemy użyć liczenia, jeśli chcemy, ale kto chce liczyć postacie dla każdego ruchu? Robienie 14k
z pomocą relativenumber
jest świetne, ale co z poziomymi ruchami? W przypadku dużych ruchów hjkl
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 do Ctrl+Right
znajomych.
Przełączanie z <Right><Right><Right><Right><Right><Right><Right><Right><Right>
celu lllllllll
lub 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 w
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łek hjkl
?
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.
hjkl
jest bezużyteczne, ale hjkl
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
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, 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.
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.
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 hjkl
klawiszami.
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, jednak ESC
znak wysłany jako część klawisza strzałki był łatwo mylony z ESC
pisanym ręcznie.
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
, o
lub 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, 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.)
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”.
Tak, z wielu wyżej wymienionych powodów, vi
został 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ą 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ę 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 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ę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 0
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.
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 ”