Por que o vim usa hjkl para teclas do cursor?

56

Por que usar as teclas hjklna mesma linha, em vez das teclas de um triângulo, como wasdpara jogar videogames?

Por que não algo equivalente à mão direita, como ijklou pl;'?

albttx
fonte
3
Verifique na página vi da Wikipedia , que contém uma imagem de algum teclado de máquina Unix antigo que explica algumas combinações de teclas.
Christian Brabandt
3
Porque vimestá isento de acompanhar os avanços tecnológicos: 3
Alexander
3
Você pode colocar confortavelmente quatro dedos de uma mão nas teclas hjkl e mover o cursor nas quatro direções sem mover os dedos para frente e para trás. Se você realmente pensa sobre isso, quatro em uma linha é o único layout de tecla do cursor consistente com a anatomia humana. A questão é realmente como todo mundo consegue errar.
4
Na verdade, não é recomendável colocar o índice no, hmas no j(é por isso que você tem um "mamilo" na jtecla). A razão para isso é que você usará bmuito mais do que hter ;acesso a ela é útil em muitas linguagens de programação (e com uma mudança, você tem as :que são cada vez mais úteis no Vim).
nobe4
2
BTW, este tópico é abordado na segunda questão mais votada no Unix SE
Dmitry Grigoryev

Respostas:

75

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

Quando Bill Joy criou o editor de texto vi, ele usou o terminal ADM-3A, que tinha as setas nas teclas hjkl. Naturalmente, ele reutilizou as mesmas chaves e o resto é história!

insira a descrição da imagem aqui

nobe4
fonte
27
Isso ainda deve estar em todos os teclados! :)
albttx
16
Agora você tem me perguntando que tipo de terminal, o cara que fez emacs tinha ...
leeand00
11
@ leeand00: Um teclado Symbol Cadet Machine Space da LISP . O artigo fala explicitamente sobre como o design do teclado influenciou o design do Emacs, e também o compara ao design do Vi com sua onipresente tecla Escape e o fato de que o Escape estava convenientemente localizado no teclado do Terminal ADM-3A . Bem, no teclado Space Cadet, existem as teclas Control, Meta, Super e Hyper que estão localizadas de maneira muito conveniente, além de pelo menos três teclas Shift diferentes, que permitem digitar mais de 8000 caracteres.
Jörg W Mittag
11
Embora essa resposta seja correta, ela meio que move a pergunta em vez de respondê-la: "Por que o teclado ADM-3A escolheu hjkle não uma forma mais lógica, como ijkl?"
Martin Tournoij 24/08/16
2
@Carpetsmoker: nós não inventamos seta do teclado lógica local até o final dos anos 80 upload.wikimedia.org/wikipedia/commons/3/30/...
Jacob Krall
21

A resposta do Nobe4 é ótima e explica por que usamos hjklmuito bem. No entanto, é realmente interessante ver o teclado completo, e muitas coisas estranhas sobre o vim fazem mais sentido quando você pode ver o teclado completo em que foi projetado. Por exemplo, por que o vi depende tanto da escchave, quando está em um lugar tão estranho e desconfortável? Isso é por que:

insira a descrição da imagem aqui

Como você pode ver, escé onde está a guia na maioria dos teclados. ctrlé outra tecla que é um pouco difícil de alcançar, mas em um local muito confortável neste teclado (onde normalmente é o caps lock).

DJMcMayhem
fonte
Teve vium <Leader>mapeamento? Eu pensei que era uma invenção mais tarde ...
Martin Tournoij
@Carpetsmoker Acho que sim, mas não tenho certeza. O Vim's :help <leader>não tem o {not in Vi}texto da assinatura e diz que vi :map(embora não tenha :noremap), por isso tenho certeza de que vi tinha líder. Mesmo que não acontecesse, eu imaginaria que a história do teclado vi influenciasse pelo menos um pouco o design do vim.
DJMcMayhem
Também é difícil encontrar informações sobre o vi através do google, pois a maioria dos resultados acaba sendo sobre o vim.
DJMcMayhem
@DJMcMayhem pubs.opengroup.org/onlinepubs/009696699/utilities/vi.html e roguelife.org/~fujita/COOKIES/HISTORY/1BSD/exrefm.pdf são boas referências para vi (POSIX e histórico, respectivamente). Você também pode fazer o download do nvi, elvis, vile ou ex-vi (ex-vi é um descendente do vi histórico) e ver o que eles fazem ou a documentação deles. Não há <leader>recurso no vi.
usar o seguinte comando
Além disso, o Vim foi desenvolvido originalmente para a Amiga (barra invertida na posição habitual [ISO ou Large Enter]) e baseado em Stevie, que era para a Atari ST (barra invertida no canto inferior direito, após a entrada, mas aparentemente não apoiar :mapem tudo)
Random832
17

Por que essas setas foram impressas nessas teclas ... é porque elas podem ser usadas com a tecla de controle para o movimento local do cursor. Ctrl-H e Ctrl-J (backspace e line feed) são óbvios e um mnemônico fácil até hoje. Ctrl-K é a "guia vertical", mas às vezes era usado para avanço de linha reverso em terminais pré-ANSI. O uso do Ctrl-L para um avanço não destrutivo do cursor foi provavelmente escolhido com base na localização do teclado.

Você também deve ter notado na imagem do teclado na outra resposta que "HOME" está na tecla ^/ ~. Obviamente, Ctrl- ^ abriga o cursor (envia para o canto superior esquerdo da tela ou para o canto inferior esquerdo, dependendo do modo).

Esses mapeamentos de controle também foram usados ​​para os terminais Wyse, o protocolo Kermit e foram suportados em algumas versões do PC ANSI.SYS.

Fontes:

Random832
fonte
^ H, ^ K - muito esclarecedor, pois hoje lembrarei facilmente que ^ J se move para baixo. Nunca consegui me lembrar da atribuição de cima para baixo de forma confiável.
miroxlav