Dlaczego vim używa hjkl dla klawiszy kursora?

56

Po co używać klawiszy hjklw tej samej linii zamiast klawiszy w trójkącie, np. wasdDo poruszania się w grach?

Dlaczego nie coś równoważnego z prawą ręką, na przykład ijkllub pl;'?

albttx
źródło
3
Sprawdź stronę vi w Wikipedii , zawiera ona obraz starożytnej uniksowej klawiatury maszynowej, która wyjaśnia niektóre skróty klawiszowe.
Christian Brabandt
3
Ponieważ vimjest zwolniony z nadążania za postępem technologicznym: 3
Alexander
3
Możesz wygodnie położyć cztery palce jednej ręki na klawiszach hjkl i przesuwać kursor we wszystkich czterech kierunkach bez przesuwania palców w przód iw tył. Jeśli naprawdę się nad tym zastanowisz, cztery z rzędu to jedyny układ klawiszy kursora zgodny z anatomią człowieka. Pytanie brzmi tak naprawdę, jak wszystkim innym udaje się to zrobić źle.
4
W rzeczywistości nie zaleca się umieszczania indeksu na, hale raczej na j(dlatego masz „sutek” na jklawiszu). Powodem tego jest to, że zużyjesz bznacznie więcej, ha ;dostępność jest przydatna w wielu językach programowania (i przy zmianie masz takie, :które są jeszcze bardziej przydatne w Vimie).
nobe4
2
BTW, ten temat jest omówiony w drugim najczęściej zadawanym pytaniu na Unix SE
Dmitrij Grigoriew

Odpowiedzi:

75

From http://www.catonmat.net/blog/why-vim-uses-hjkl-as-arrow-keys/ :

Kiedy Bill Joy stworzył edytor tekstu vi, użył terminala ADM-3A, który miał strzałki na klawiszach hjkl. Oczywiście ponownie użył tych samych kluczy, a reszta to już historia!

wprowadź opis zdjęcia tutaj

nobe4
źródło
27
To powinno być nadal na każdej klawiaturze! :)
albttx
16
Teraz zastanawiam się, jaki terminal ma facet, który stworzył emacsa ...
leeand00
11
@ leeand00: A Symbolics LISP Machine Space Cadet Keyboard . Artykuł wyraźnie mówi o tym, jak projekt klawiatury wpłynął na projekt Emacsa, a także porównuje go do projektu Vi z jego wszechobecnym klawiszem Escape oraz faktem, że Escape był bardzo dogodnie zlokalizowany na klawiaturze terminala ADM-3A . Cóż, na klawiaturze Space Cadet znajdują się klawisze Control, Meta, Super i Hyper, które są bardzo dogodnie zlokalizowane, a także nie mniej niż 3 różne klawisze Shift, umożliwiające wpisanie ponad 8000 znaków.
Jörg W Mittag
11
Chociaż ta odpowiedź jest poprawna jako taka, przesuwa pytanie, a nie odpowiada: „Dlaczego klawiatura ADM-3A wybrała, hjkla nie bardziej logiczny kształt, taki jak ijkl?”
Martin Tournoij
2
@Carpetsmoker: nie wymyśliliśmy logiki lokalizacji strzałek na klawiaturze aż do przesyłania
Jacob Krall
21

Odpowiedź Nobe4 jest świetna i wyjaśnia, dlaczego używamy hjklbardzo dobrze. Jednak naprawdę ciekawie jest zobaczyć pełną klawiaturę, a wiele dziwnych rzeczy w vimie ma większy sens, gdy widzisz pełną klawiaturę, na której została zaprojektowana. Na przykład, dlaczego tak mocno polegam na esckluczu, skoro jest on w tak dziwnym i niewygodnym miejscu? Dlatego:

wprowadź opis zdjęcia tutaj

Jak widać, escw większości klawiatur znajduje się karta. ctrlto kolejny klawisz, do którego dostęp jest nieco niewygodny, ale w bardzo wygodnym miejscu na tej klawiaturze (gdzie zwykle jest blokada klawiszy).

DJMcMayhem
źródło
Czy vimają <Leader>mapowanie? Myślałem, że to późniejszy wynalazek ...
Martin Tournoij
@Carpetsmoker Myślę, że tak, ale tak naprawdę nie jestem pewien. Vim :help <leader>nie ma podpisu {not in Vi}i mówi, że vi miał :map(choć nie :noremap), więc jestem prawie pewien, że vi miał lidera. Nawet gdyby tak się nie stało, wyobrażam sobie, że historia klawiatury vi przynajmniej w pewnym stopniu wpłynęła na projekt vima.
DJMcMayhem
Trudno jest również znaleźć informacje na temat vi za pośrednictwem Google, ponieważ większość wyników kończy się na vimie.
DJMcMayhem
@DJMcMayhem pubs.opengroup.org/onlinepubs/009696699/utilities/vi.html i roguelife.org/~fujita/COOKIES/HISTORY/1BSD/exrefm.pdf są dobrymi referencjami dla vi (odpowiednio POSIX i historyczne). Możesz także pobrać nvi, elvis, vile lub ex-vi (ex-vi jest potomkiem historycznego vi) i zobaczyć, co robią lub ich dokumentację. W <leader>vi nie ma żadnej funkcji.
Random832
Również Vim został pierwotnie opracowany dla Amigi (lewy ukośnik w swojej zwykłej pozycji [ISO lub Large Enter]) i oparty na Stevie, który był dla Atari ST (lewy ukośnik w prawym dolnym rogu, przeszłe wejście, ale najwyraźniej nie wsparcie :mapw ogóle)
Random832
17

To, dlaczego te strzałki zostały wydrukowane na tych klawiszach ... to dlatego, że można ich używać z klawiszem sterującym do lokalnego przesuwania kursora. Ctrl-H i Ctrl-J (backspace i wstawianie wiersza) są oczywiste, a nawet łatwy mnemonik nawet dzisiaj. Ctrl-K jest „pionową zakładką”, ale czasami był używany do odwrotnego podawania linii na zaciskach wcześniejszych niż ANSI. Zastosowanie Ctrl-L do nieniszczącego kursora do przodu zostało prawdopodobnie wybrane na podstawie położenia klawiatury.

Być może zauważyłeś na zdjęciu klawiatury w innej odpowiedzi, że „HOME” znajduje się na klawiszu ^/ ~. Oczywiście, Ctrl- ^ umieszcza kursor (wysyła w lewym górnym rogu ekranu lub w lewym dolnym rogu, w zależności od trybu).

Te mapowania kontrolne były również używane dla terminali Wyse, protokołu Kermit i były obsługiwane w niektórych wersjach PC ANSI.SYS.

Źródła:

Losowo 832
źródło
^ H, ^ K - bardzo pouczające, ponieważ dzisiaj łatwo zapamiętam, że ^ J przesuwa się w dół. Nigdy nie byłem w stanie zapamiętać rzetelnie zadania góra-dół.
miroxlav