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.

Eric Wilson
fonte
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).

Gilles 'SO- parar de ser mau'
fonte
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.

Laktak
fonte
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)

user178047
fonte
-1

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

Martin Ueding
fonte
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