Como mapear a chave ALT no .vimrc?


9

Para poder adicionar linhas em branco sem entrar no modo de inserção, estou tentando mapear ALT-oe ALT-Opara o<ESC>eo<ESC>

Eu tentei o seguinte no meu .vimrc

map <M-o> o<ESC>
map <M-O> O<ESC>

e

map <ALT-o> o<ESC>
map <ALT-O> O<ESC>

e (como sugerido abaixo)

map <A-o> o<ESC>
map <A-O> O<ESC>

mas nenhum funciona. Apenas fornece o comportamento usual, como se ALT-onão tivesse sido definido.

É a primeira vez que altero o .vimrcarquivo e não consigo encontrar onde a documentação diz como designar as várias chaves. Mas eu posso verificar se meu .vimrcarquivo está sendo lido, incluindo:

map <Enter> ihello<ESC>

Que mapeia <Enter>com sucesso a inserção helloe o retorno ao modo de comando.

Estou usando o vim com cygwin.


Parece que seu terminal não está passando as seqüências alt. Alguma outra sequência conhecida funciona? Que tal experimentar Ctrl? Qual terminal você está usando?
Caleb

Estou usando o vim no cygwin, mas fiz outros scripts funcionarem, como meus detalhes de edição.
Eric Wilson

Ctrl funciona, mais ou menos. Parece que não me permite distinguir entre <C-o>e <C-O>.
Eric Wilson

A resposta de Giles está no caminho certo. Você deve mudar definitivamente para um terminal mais capaz. Esses problemas devem desaparecer e você receberá suas chaves de volta!
Caleb

Respostas:


10

Para ver o que seu terminal está enviando quando você pressiona uma tecla, alterne para o modo de inserção, pressione Ctrl+Ve a tecla. A maioria das teclas com a maioria dos terminais envia uma sequência de escape em que apenas o primeiro caractere é um caractere de controle; Ctrl+Vinsere o próximo caractere literalmente, para que você possa inserir toda a sequência de escape dessa maneira.

Terminais diferentes enviam sequências de escape diferentes para algumas combinações de teclas. Muitos terminais enviam o mesmo caractere ( ^O) para ambos Ctrl+Oe Ctrl+Shift+O; se for esse o caso, o Vim não será capaz de distinguir entre eles.

Você menciona que está usando o Cygwin; em qual terminal você está executando o Vim é a informação mais pertinente. Se você estiver usando o console nativo do Windows, consiga um terminal melhor. Eu recomendo MinTTY para executar aplicações em modo texto Cygwin em um terminal no Windows fora X, mas RXVT Windows nativo do Cygwin e PuTTYcyg também são bons. (Também o Console2 para executar aplicativos de console do Windows, mas isso é totalmente fora de tópico aqui).


3

Se Control+Vseguido por ALT-xshows ^[x(digite o terminal), você pode corrigi-lo com este pequeno script em vim.wikia.com :

for i in range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

Adicione ao .vimrc para todos os mapeamentos de teclas alt.


1

Isso funciona para mim no terminal Ubuntu 16.04 xfce (e no terminal ferrugem alacritty)

Defina o gatilho do snippet ultisnip para Meta-/(assim como o snippet emacs)

let g:UltiSnipsExpandTrigger="^[/"

Aqui está agora, eu digito ^[/no vim

No modo de inserção Ctrl-V Alt-/

( Metaé a Alttecla do teclado do meu PC)


-1

A tecla M (eta) é o botão do Windows. É apenas <A-o>.


Isso também não funciona.
Eric Wilson

Isso nem sempre é o caso; em diferentes layouts de teclado e idiomas, eles geralmente são diferentes.
Caleb

@Caleb existe alguma documentação para isso?
Eric Wilson

Eu tentei map <A-o> o<ESC>e funcionou para mim. Se você colocá-lo no seu .vimrc, você o recarregou?
Martin Ueding

O solicitante já afirmou em sua pergunta que eles verificaram que o arquivo estava sendo carregado. Isso não é relativo ao usuário, pois eles estão no Windows, mas você pode ver diferentes configurações de teclas Meta / Win / Alt nos arquivos de geometria / símbolo / código de chave do xkb. Você notará que, mesmo nas opções de layout do teclado gnome, existem várias maneiras comuns de remapear entre Alt / Win / Meta. Uma das razões pelas quais isso ocorre é devido à disparidade nos layouts de base.
Caleb
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.