Por que o Vim exige que cada mapeamento de chave tenha um código ascii exclusivo?

2

Meu entendimento é que o Vim não pode diferenciar entre <c-s-[key]> e <c-[key]> porque eles mapeiam o mesmo código ascii. E também a mesma razão pela qual <c-i> é equivalente a <tab> . Da mesma forma, você não pode mapear <c-1> , <c-;> , etc. porque não há representação ASCII.

Eu li algumas pessoas dizendo que essa restrição é boa, já que é mais ergonômico evitar acordes / modificadores em favor das palavras de qualquer maneira (por exemplo, com a chave de líder). Mas algumas operações são apenas mais apropriadas para acordes / modificadores (como coisas que você provavelmente repetirá)

O que eu estou perguntando é por que o Vim foi projetado assim em primeiro lugar? Ou por que, como o Vim é open source, não há uma compilação do Vim ou GVim que tenha adicionado suporte para isso? Parece uma pena que um editor tão ridiculamente personalizável se limite assim. Alguém pode me explicar isso?

    
por Steve Vermeulen 09.04.2013 / 05:10

3 respostas

3

Devido à forma como a entrada do teclado é tratada internamente, isso infelizmente não é geralmente possível hoje, mesmo no GVIM. Algumas combinações de teclas, como Ctrl + não-alfabético, não podem ser mapeadas e Ctrl + letra vs. Ctrl + Shift + letra não pode ser distinguida. (A menos que o seu terminal envie um código termcap para ele, o que a maioria não faz.) No modo de inserção ou de linha de comando, tente digitar a combinação de teclas. Se nada acontecer / for inserido, você não poderá usar essa combinação de teclas. Isso também se aplica a <Tab> / <C-I> , <CR> / <C-M> / <Esc> / <C-[> etc. (somente a exceção é <BS> / <C-H> .) Esse é um ponto problemático conhecido e o assunto de várias discussões sobre vim_dev e o canal de IRC #vim.

Algumas pessoas (principalmente Paul LeoNerd Evans) querem consertar isso (mesmo para o console Vim em terminais que apóiam isso), e lançaram várias propostas, cp. link

Essencialmente, o Vim teria que usar bibliotecas mais modernas que suportem recursos modernos de emulador de terminal para recuperar os códigos-chave brutos. O desafio é que esses códigos-chave são (mal) usados em muitos lugares no código-fonte do Vim, e é difícil atualizar essa estrutura central.

Mas a partir de hoje, nenhum patch ou voluntário ainda se apresentou, embora muitos tenham expressado o desejo de ter isso em um futuro lançamento do Vim 8. Se você acha que isso é um problema e é capaz de contribuir, a lista de discussão lista de discussão do vim_dev é o lugar para se voluntariar.

    
por 09.04.2013 / 08:58
3

O Vim permite os modificadores < C- & < C-S- nas teclas de seta, porque essas combinações são tratadas por alguns emuladores de terminal, mas acho que isso é tudo. Geralmente, ele se limita a códigos-chave que podem ser gerados por emuladores de terminal.

O Vim foi projetado assim em primeiro lugar porque é Vi-IMproved e o vi foi projetado para ser usado com os terminais CRT da época, que enviavam e recebiam caracteres ASCII. Desde então, o Vim evoluiu de acordo com os princípios discutidos em

:help design-goals

Particularmente relevantes são esses itens:

  • Minimize usando CTRL e outros modificadores, eles são mais difíceis de digitar.
  • As pessoas mudam de uma plataforma para outra e da GUI para o terminal versão. Os recursos devem estar presentes em todas as versões, ou pelo menos em quanto possível com um esforço razoável. Tente evitar que os usuários precisem trocar entre plataformas para realizar seu trabalho com eficiência.
  • O Vim não é um editor de GUI chique que tenta ser bonito ao custo de sendo menos consistente em todas as plataformas. Mas os recursos funcionais da GUI são bem-vindo.

Assim, quaisquer códigos chave que estão disponíveis apenas a partir de uma GUI e não de um emulador de terminal são geralmente evitados para que qualquer coisa que possa ser feita no gvim possa ser feita no vim. Isso é considerado pela maioria dos usuários do Vim como um recurso.

    
por 09.04.2013 / 07:19
1

A lista de discussão do vim-dev é provavelmente um lugar melhor para essa pergunta.

Você poderia elaborar sobre essa parte: "como coisas com as quais você provavelmente vai se repetir"?

De qualquer forma, um vim que faz o que você quer não existe porque não há usuários suficientes que se importam com isso. Os acordes são um pesadelo ergonômico e um resultado das limitações da edição sem modelagem. Quando você remove todos os atalhos no nível do sistema operacional, simplesmente não há chaves disponíveis suficientes para seus mapeamentos, o que obriga, por sua vez, a construir acordes elaborados e pouco práticos. <C-S-w> não é melhor que ,w em qualquer extensão da imaginação.

A abordagem do Vim, com sequências de teclas como ,bc ou o que você quiser, é muito mais escalável e muito mais suave com o seu corpo.

    
por 09.04.2013 / 07:38

Tags