"Nunca use as setas no Vim!"
Ouvi isso de um orador aleatório, mas não tive a chance de perguntar o porquê. Além disso, se você não usar as teclas de seta, como mover o cursor no modo Inserir ?
"Nunca use as setas no Vim!"
Ouvi isso de um orador aleatório, mas não tive a chance de perguntar o porquê. Além disso, se você não usar as teclas de seta, como mover o cursor no modo Inserir ?
Respostas:
Usar as setas do teclado é considerado um mau hábito, porque se você estiver usando as setas do teclado, provavelmente estará perdendo muitos dos recursos encantadores do vim.
Quando as pessoas começam a usar o vim pela primeira vez, elas tendem a permanecer no modo de inserção, pois é mais como a edição de texto convencional. Para ser eficaz no vim, no entanto, você só deve estar no modo de inserção quando estiver realmente inserindo texto. Se você deseja mover o cursor, deve estar no modo normal. Você deve estar no modo normal por padrão.
No modo normal, existem milhões de atalhos para se movimentar. Você pode usar hjklpara mover um espaço de cada vez, ou pode usar palavras, parágrafos e assim por diante. Se você estiver no modo normal, não há sentido em usar as teclas de seta em vez de hjklestarem mais distantes.
Existe a atitude de que, se você estiver usando as teclas de seta, estará usando o vim "errado". A verdade é que o vim tem uma curva de aprendizado realmente muito íngreme; portanto, enquanto você estiver aprendendo, faça o que for necessário. Quando comecei a usar o vim, fiz tudo da maneira "errada" e não tive nenhum problema em quebrar os hábitos depois que aprendi mais sobre os comandos do vim.
Por exemplo, quando eu comecei, diga que queria alterar o texto entre aspas:
String mystring = "I want to change this";
Eu entrava no modo de inserção, movia para o final da string usando as teclas de seta, pressione backspace até a string desaparecer e digitava o novo texto.
Uma maneira muito melhor é colocar o cursor em qualquer lugar da string (modo normal) e pressionar ci". Isso vai change in ". Ele excluirá tudo entre as aspas e o colocará no modo de inserção para que eu possa inserir o novo texto.
ci<e também ci)funciona, e você não precisa mover a mão do teclado para o mouse. Se você deseja navegar para o início dos colchetes e alterar o conteúdo, ele f(ci(funciona.
/wante aperte enter para pousar sobre a palavra 'querer', então faça ci".
hjkl): mapeamento upe downpara 2 teclas que são verticalmente indistinguíveis uma da outra, e muito menos das teclas esquerda e direita ..... é uma demonstração trágica de arrogância ideologicamente cega.
Em resumo, Vimusa as hjklteclas como interface de navegação porque é um remanescente do antigo terminal "ADM-3A", que tinha essas teclas marcadas com setas.

Como
vimé derivadovi, ele usa as mesmas chaves hjkl.
A substituição por letra das teclas de seta permite navegar pelo texto sem tirar as mãos da configuração padrão de digitação . Isso é sem dúvida mais eficiente e mais rápido do que mover a mão para pressionar as setas. Conforme descrito na referência nº 2 (consulte os recursos), esse não é o fim das vantagens: o VIM possui muitos outros atalhos que você pode acessar sem mexer as mãos.
Existem algumas respostas muito detalhadas e precisas para as duas partes da sua pergunta: em termos de substituição das teclas de seta, eu respondi de maneira rápida e resumida; no entanto, para a sua pergunta de inserção , consulte os recursos listados abaixo.
hjklnão funciona no modo de inserção, então como isso é uma resposta para a pergunta?
hjklno vim não diz por que alguém nunca deve usar as teclas de seta, assim como o fato de eu poder andar de bicicleta para trabalhar não explica por que alguém me disse para nunca correr.
Esse mantra estúpido é frequentemente repetido por datilógrafos para quem a fila da casa é como uma segunda coluna ou por não datilógrafo que querem parecer legais. Para os não-datilógrafos, a fila da casa simplesmente não é tão especial e mover levemente a mão direita para alcançar as flechas não é um problema.
O que é importante considerar é o que as pessoas que repetem esse mantra se propõem a usar.
Na maioria das vezes, eles insistem em usar hjkl.
Se deixarmos de lado o fato de que essas teclas são usadas apenas porque o teclado usado pelo autor do vi não possui teclas de seta físicas e, portanto, qualquer argumento contra as teclas de seta é apenas racionalização, hjklsão marginalmente melhores do que as setas. Sim, o único benefício do uso hjklsobre as setas é que você pula esse pequeno movimento da mão direita de e para as setas. Se esse benefício vale a pena, é sua decisão.
Mas esse movimento da mão direita não é por que usar apenas as setas é ineficiente. É ineficiente porque eles impedem que você mova caractere por caractere e linha por linha, enquanto a maior parte do movimento necessário para editar o texto tem um alcance muito maior.
Martelar a seta direita 13 vezes é ineficiente e chato. É que melhor para martelar os lprincipais 13 vezes? Não. É igualmente estúpido.
Manter a seta direita pressionada até chegar ao seu objetivo é menos entediante, mas é propenso a erros e quase tão ineficiente quanto 13 acertos, devido à desaceleração necessária e não determinística no final. É que melhor manter a ltecla pressionada? Não, claro que não.
Felizmente, a maioria dos kits de ferramentas da GUI fornece combinações como Ctrl+Rightessa, que permitem mover palavra por palavra ou pular para o EOL, para o próximo parágrafo ou o que for. Esses atalhos nos ajudam a navegar muito mais rápido e com mais inteligência do que com setas simples. Temos o mesmo com hjkl? Não, nós não. Podemos usar uma contagem, se quisermos, mas quem quer contar caracteres para cada movimento? Fazer 14kcom a ajuda de relativenumberé ótimo, mas e os movimentos horizontais? Para movimentos grandes, hjklna verdade são piores que modificadores + setas. E adivinha? Grandes movimentos são o que mais precisamos.
Mas somos sortudos, nosso editor favorito tem dezenas de movimentos que circulam as setas e hjkl : bBeEwW/?*#{}()e assim por diante. Esses comandos são imensuravelmente mais poderosos do que hjkle na maioria das vezes muito mais lógicos e intuitivos se você estiver acostumado Ctrl+Righte amigos.
Mudar de <Right><Right><Right><Right><Right><Right><Right><Right><Right>a lllllllllou até mesmo 9lé ridiculamente inútil.
Mudar de <Right><Right><Right><Right><Right><Right><Right><Right><Right>para <C-Right>é muito melhor. A partir daí, mudar para wé fácil e rápido. Não há necessidade de <nop>suas flechas!
Se esses comandos são mais úteis, mais poderosos e mais intuitivos do que hjkl, por que diabos tantos blogueiros e comentaristas insistem em substituir as setas hjkl?
Eu tenho. Nenhuma idéia.
Em conclusão, hjkltenha seu lugar em nosso cinto de ferramentas, porque sempre temos que passar por 2 caracteres ou linhas, mas elas são mais frequentemente do que a árvore que esconde a floresta. Desconfie das pessoas que pregam contra as flechas: o que elas reservam para você pode não ser melhor.
hjkl é inútil, mas hjklé útil.
Outros descreveram por que outras maneiras de mover o cursor são preferidas, mas pouco foi dito para responder à pergunta, por que é considerado uma má idéia usar as teclas de seta?
Eu acho que a principal razão (e o @Squeezy aludiu um pouco a isso) é que, nos dias de terminais como o VT100, as teclas de seta produziam uma sequência de escape que era interpretada pelo programa em execução. (Como as teclas de seta não são representadas em ASCII, a digitação das teclas de seta deve ser comunicada de alguma maneira "especial".) A sequência de escape era tipicamente algo como
ESC [ A
dependendo das propriedades do seu terminal, sua conexão e seu modo de cursor . Se o seu shell ou o seu programa não estivesse configurado corretamente para o terminal, eles não entenderiam a sequência de escape como uma tecla de seta.
Quando eu estava na faculdade, efetuando login no Ultrix via terminais VT100, se eu pressionasse uma seta enquanto vi no modo de inserção, ESCele seria interpretado como "sair do modo de inserção" e, a seguir, os seguintes [ Aitens como comandos no modo normal . Obviamente não é o que o usuário deseja ou espera!
Atualmente, o manuseio de terminais e teclas de seta parece ser mais robusto, especialmente em ambientes de GUI. Mas os mesmos problemas ainda ocorrem ao usar o vim sobre SSH ou Telnet.
O uso das teclas de seta é desaprovado, porque obriga a mover os dedos da tela inicial ao usar o layout QWERTY e do painel de caracteres (?) Ao usar o Dvorak ou qualquer outro layout.
As teclas de seta exibem um problema - já era conhecido no vi - em conexões lentas, como no modem de 1200 baud. A seta se traduz em uma sequência ESC como ESC a. Agora, quando o tempo entre ESC e a fica muito longo, você acaba ouvindo um BEL (ou vendo um flash) seguido pelo modo de acréscimo. Isso não aparecerá com as hjklteclas.
ESC [ Aque é o que você está se referindo?
ESC [ Aé um terminal DEC VT-100 (o terminal ANSI foi fortemente derivado do DEC VT-100). IIRC, ESC Aera a flecha ADM-3A, ou possivelmente a flecha DEC VT-52. O ponto permanece o mesmo, no entanto, o ESCcaractere enviado como parte da tecla de seta foi facilmente confundido com o ESCdigitado manualmente.
Em relação à segunda questão:
[I] Se você não usa as setas, como pode mover o cursor no modo Inserir?
Para quem é mestre e que, portanto, despreza as teclas de seta, o conceito de "modo" também não existe.
O mestre adiciona novo texto usando não um modo de inserção, mas comandos completos de inserção ou substituição que começam com um código de operação, como i, oou cwque é seguido pelo texto da carga útil, e finalizado por ESC. Os comandos têm uma sintaxe e, portanto, a máquina percorre estados ao aceitar a sintaxe dos comandos, mas no modelo mestre do editor, eles não dão origem a um modo. O que os aprendizes chamam ingenuamente de "modo" é para o mestre um estado de comando inacabado, uma situação mais repugnante que o mestre evita.
Sempre que o mestre percebe, enquanto está no meio de um comando inserir ou substituir, esse texto deve ser inserido ou excluído, exceto na próxima posição de caractere indicada pelo cursor, o mestre termina o comando insert e libera uma das dezenas de comandos de movimento (recorrer ao humilde, hjklse uma maneira mais poderosa não for obviamente aplicável).
Além disso, como o mestre raramente se distrai de forma a deixar um comando inacabado, o mestre raramente, se é que alguma vez, faz o editor ESCemitir um sinal sonoro devido à entrada de um supérfluo emitido "apenas por precaução".
(No entanto, quando a rede está atrasada ou a máquina está atolada, o mestre pressiona a ESCtecla furiosa e repetidamente, como todo mundo.)
via entrada do comando insert for um modo, para ser justo, temos que identificar todos esses modos em outros editores e chamá-los de modal. Por exemplo, quando pressionamos Ctrl-X no Emacs, estamos em um "modo" no qual é possível, por exemplo, pressionar Ctrl-S para salvar o documento, o que não funcionará fora desse "modo".
Sim, por muitos dos motivos mencionados acima, vifoi originalmente escrito para uso hjkl, mas " nunca " é uma afirmação bastante grande.
Costumo modificar vim(e outras ferramentas que uso) para se comportar como eu quero. Isso funciona muito bem na minha máquina, mas como desenvolvedor incorporado, nem sempre escolho o que há nas máquinas que eu suporte. Me deparei com máquinas mais antigas que só têm hjklnavegação em vialgumas ocasiões. Acabo recebendo os códigos de controle inseridos no meu arquivo por um segundo ou dois, até que eu volte a quebrar meu hábito e mude para hjkl.
O único motivo válido que eu posso usar para "nunca usar teclas de seta no Vim!" é para que você possa usar máquinas que não podem manipular as teclas de seta. Isso parece uma razão bastante tênue para dizer " nunca ".
se você não usar as teclas de seta, como mover o cursor no modo Inserir?
A principal razão pela qual eu desencorajo as pessoas a usar as teclas de seta é explicitamente porque permite que você se mova enquanto estiver no modo de inserção.
Um dos problemas mais estranhos com o aprendizado do vim para iniciantes é que o comando desfazer do vim opera desfazendo a última ação , não a última tecla . Muitos de meus amigos acabam ficando no modo de inserção o tempo todo, porque nunca há um motivo para deixá-lo. Quando eles me perguntam "Como faço para desfazer?" Eu respondo com "pressione a letra u no modo de comando", eles ficam frustrados quando o vim limpa o arquivo inteiro.
"O Vim é um editor de texto inútil se não puder desfazer as coisas corretamente."
É difícil usar uma ferramenta antes de aprender como.
O Vim se torna útil somente depois que você aprender a usá-lo. O poder do vim está em como você pode dizer "faça aquilo de novo" ou "desfaça essa coisa" ou "faça isso apenas quando eu pressionar essa macro de atalho" através da memória muscular subconsciente. Se "essa coisa" se tornar "digite o arquivo inteiro do início ao fim", eu concordo, o vim não é tão útil.
É por esse motivo que você só deve inserir texto quando estiver dentro insert mode. Evitar as teclas de seta é apenas uma das formas que encontramos para ajudá-lo a se tornar um usuário melhor do vim, mais rápido.
A execução do vim no meu dispositivo Android, que está executando um daemon ssh no kbox, me levou a sair da minha zona de conforto. Como o emulador de terminal Anroid no dispositivo usa botões de volume para substituir os combos especiais de teclas (ctrl + qualquer que seja), algumas teclas que eu normalmente usaria no teclado não funcionam nessa situação.
Por exemplo, a tecla Inserir não funciona nesse ambiente, então estou usando Ipara alternar para o modo Inserir. A tecla Esc, que eu normalmente uso para escapar do modo de inserção, também não funciona, então estou usando ctrl + [para escapar. As teclas Home e End não funcionam como estou acostumado. Em vez disso, estou confiando nos atalhos 0e com os quais $nunca me preocupei antes para chegar ao início ou ao final de uma linha.
De qualquer forma, as teclas de seta ainda funcionam como de costume na minha situação, mas é bom saber que os atalhos de teclado minimalistas estão lá.
Aqui está o meu 2 ¢.
Faça o que você se sentir confortável. Se você usar editores diferentes, poderá ser mais fácil usar as teclas de seta para obter consistência.
Por outro lado, é absolutamente brilhante o vi (e o vim) não precisar de nenhuma chave especial, exceto talvez. Você provavelmente poderia hackear um antigo IBM selectric para funcionar como um terminal.
Outra coisa a observar é que as teclas de seta podem não funcionar conforme o esperado. Eu usei terminais onde eles não funcionavam. Não sei exatamente como eles são implementados no Vim, mas tenho certeza de que não é uniforme. Minha memória irregular parece lembrar uma implementação em que foram implementadas como macros do vim.
O nome do jogo com editores de texto aprimorados parece estar "se movendo rapidamente" e reduzindo o movimento desperdiçado / repetitivo. Há algum tempo perdido quando você passa das teclas da letra para as teclas de seta (dependendo das dimensões do teclado) e depois volta para a linha inicial. Mas se você puder acessar a tecla ESC com os modos de comutação dedo mindinho ou dedo anelar da mão esquerda, torna-se um movimento fluido e, ao longo de uma sessão de edição, haverá um ganho de velocidade.
E esta é a chave para a segunda parte da sua pergunta, saia do modo de inserção pressionando ESC com sua esquerda e mova com hjkl com sua direita. Eventualmente, você será capaz de fazer isso sem pular uma batida.
Dito isto, eu nunca cheguei a lugar nenhum com o Vim até experimentar algumas das coisas mencionadas aqui , sendo a mais importante a seção " Obtenha eficiência: mapeamentos de atalhos "