Você está usando o vim em um terminal ou uma versão gui (gvim, macvim)?
Nick Knowlson
Observe também que, se suas encodingalterações após a execução do mapeamento, o que você obtém com as teclas Alt pode não corresponder ao que você definiu inicialmente.
dash-tom-bang de
Respostas:
133
Para usuários de Mac: para mapear ALT + hjkl, use o caractere real gerado (descubra qual caractere usando a combinação enquanto no modo INSERT), por exemplo, com meu teclado eu obtenho:
<ALT+j> ==> ª
<ALT+k> ==> º
e assim por diante. Solução encontrada aqui no StackOverflow.
Usei isso para mover as linhas para cima e para baixo com ALT + k \ j, usando isso no meu .vimrc:
É exatamente para isso que vim aqui (Alt + HJKL para mover divisões)! Obrigado!
Jamie Schembri
6
Uma maneira fácil de descobrir qual é o caractere é usando cat. Basta digitar cate dentro da janela do gato a combinação de teclas que você deseja. Descobri que alt + colchetes é 'e “no meu mac.
dvcrn
4
Isso funciona muito bem como Alt + HJKL para mover entre as divisões, meus dedos adoram !! nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
John Morales
3
Esses mapeamentos exatos podem não funcionar como esperado em versões futuras do OSX. Use sed -n lpara ver a saída de <Ak> e <Aj> antes de configurar o mapeamento. No meu caso, <Aj> é ∆e <Ak> é˚
luk3thomas
4
No macOS, ao configurar Use Option as Meta Keyou no perfil do iTerm ⌥ key to Esc+irá se comportar da maneira tradicional (como no Linux / Unix). Então você não precisa definir no Vim o mapa para <^[j>, apenas mapeá-lo para <A+j>ou <M+j>e ele funciona.
goetzc
40
:help key-notationdescreve qual formato precisa ser usado para mapear diferentes chaves. No caso de alt, você pode usar <A-ou <M-. Portanto, seu mapeamento seria
map <M-d> <C-d>
Eu também recomendo usar a norevariante de :map(por exemplo, noremap) a menos que você queira permitir explicitamente que o lado direito seja reavaliado para mapeamentos.
Isso ainda não surtiu efeito. A entrada Alt + D ainda insere alguns caracteres estranhos no Vim.
Thomson
9
Esse é um problema separado. Seu terminal está enviando um caractere multibyte para o Vim e o Vim não sabe interpretar isso como <A-d>. Você provavelmente precisará alterar as configurações do seu terminal para que ele envie <A-d>como <Esc>d.
Jamessan
1
@jamessan como fazer no iterm2?
Finn
32
Não tenho mais certeza se é "possível". Por favor, leia a atualização abaixo.
Sim, você pode até mesmo no vim terminal, mas não há nenhuma verdadeira captura toda resposta. Basicamente, você deve seguir duas etapas:
Certifique-se de que a <M-d>notação existe e mapeie exatamente as entradas do seu terminal ( ^[é o caractere de escape):
$ cat
^[d
$
" in your .vimrc
execute "set <M-d>=\ed"
" you have to use double quotes!
Mapeie algo para sua combinação recém-"criada":
noremap <M-d> :echo "m-d works!"<cr>
Entendendo como funciona, você pode expandir esse "truque" para outras combinações "estranhas", por exemplo, estou usando cupim, e o vim não reconhece <S-F1>, usando cat I get ^[[1;2P. Então, no meu vimrc eu faço:, execute "set <S-F1>=\e[1;2P"e então posso mapeá-lo para qualquer coisa.
Nota: Não sei por que, mas para algumas pessoas usando \<Esc>obras em vez de \e.
Atualização (fevereiro de 2016)
Dependendo do terminfo que seu terminal executa, talvez você possa ... na maioria dos terminais, "alt + h", por exemplo, é mapeado ^[h, que é: "escape + h". Portanto, ele pode substituir as chaves. Acabei de tentar (novamente) e parece funcionar, mas acredito que é uma implementação com muitos bugs e propensa a erros.
No entanto, para os corajosos, aqui está um plugin experimental:
Em vez das execute "set...coisas, você pode apenas usar diretamente set <M-d>=^[d. O ^[é na verdade um caractere de escape inserido com C-v-Esc. Isso era necessário no rxvt / urxvt, mas o xterm não deveria precisar de tratamento especial. Mais informações sobre este tópico no wiki do vim .
Micah Elliott de
Existe uma abordagem análoga para isso que funcionaria com tmux de forma que, ou seja, Md poderia ser vinculado?
George
2
Para mim, <Esc>então dagora faz a mesma coisa como <Alt>+ d. Além disso, você pode fazer isso em uma linha com Ctrl-v, <Esc>conforme aqui .
Sparhawk de
24
Tecla Alt do mapa no Vim no Mac OSx:
Comece visualizando o código-chave que seu terminal está enviando para o vim:
$ sed -n l
^[[1;9D
No exemplo acima, executei o comando e pressionei Alt + Left.
A ^[[1;9Dé a sequência de escape enviada ao vim, para que possamos utilizá-la para nosso mapeamento.
Se você estiver usando o aplicativo iTerm2, é bom verificar como as chaves estão mapeadas em Perfil> Chaves.
fikovnik de
1
Com a Optiontecla esquerda ( ⌥) configurada como Esc+em iTerm2, eu poderia mapear alt+qpara sair do vim: nnoremap <silent> <Esc>q :qa!<cr>
ryenus
Você também pode configurar o iTerm2 para trabalhar com esse remapeamento se for em Preferências> Perfis, selecione seu perfil atual, vá para a guia "teclas" desse perfil e altere a opção que diz "Tecla esquerda Left" para "Esc +" (disponível as opções são "Normal", "Meta" e "Esc +").
Parece que ainda não funciona. Alt + d irá inserir um caractere estranho no Vim, que é o mesmo com o caso não mapeado.
Thomson
Funciona para mim (estou usando gvimno Windows)
Deqing
8
Seu terminal pode não transmitir "corretamente" o Alt-D. Você pode usar CV para realmente obter a sequência de escape real enviada ao Vim e usá-la para criar seu mapeamento. Ou seja, edite seu .vimrc e substitua o real digitando a seguinte sequência "CV Alt-D" para que você tenha a sequência de escape correta em seu vimrc. Isso não funcionará se o seu terminal não enviar nada para o vim.
Eu também tive que alterar a configuração para nnoremap <Esc>j :m .+1<CR>==e semelhante ...
mihaipopescu
0
Olá, após nenhuma boa solução depois de anos testando todos os itens acima no mac, continuei pesquisando.
Aqui está minha solução:
Para criar uma combinação de teclas incluindo Alt, você deve declarar a combinação no teclado de preferência e usar essa combinação no arquivo de configuração do vim (marque a opção de usar como tecla meta).
A saída deve ser um caractere incomum (não, apor exemplo) para que você não substitua um caractere regular.
No exemplo abaixo você deve ser capaz de vim com ALT-Up.
encoding
alterações após a execução do mapeamento, o que você obtém com as teclas Alt pode não corresponder ao que você definiu inicialmente.Respostas:
Para usuários de Mac: para mapear ALT + hjkl, use o caractere real gerado (descubra qual caractere usando a combinação enquanto no modo INSERT), por exemplo, com meu teclado eu obtenho:
e assim por diante. Solução encontrada aqui no StackOverflow.
Usei isso para mover as linhas para cima e para baixo com ALT + k \ j, usando isso no meu .vimrc:
conforme explicado aqui .
Espero que seja útil, aproveite o Vim :)
ADENDO DE Dylan_Larkin (2019): Para que funcione em um Mac, " Use Option as Meta Key " deve ser DESLIGADO em Terminal-> Preferences-> Keyboard
fonte
cat
. Basta digitarcat
e dentro da janela do gato a combinação de teclas que você deseja. Descobri que alt + colchetes é 'e “no meu mac.nmap ˙ <C-w><Left> nmap ¬ <C-w><Right> nmap ˚ <C-w><Up> nmap ∆ <C-w><Down>
sed -n l
para ver a saída de <Ak> e <Aj> antes de configurar o mapeamento. No meu caso, <Aj> é∆
e <Ak> é˚
Use Option as Meta Key
ou no perfil do iTerm⌥ key to Esc+
irá se comportar da maneira tradicional (como no Linux / Unix). Então você não precisa definir no Vim o mapa para<^[j>
, apenas mapeá-lo para<A+j>
ou<M+j>
e ele funciona.:help key-notation
descreve qual formato precisa ser usado para mapear diferentes chaves. No caso de alt, você pode usar<A-
ou<M-
. Portanto, seu mapeamento seriaEu também recomendo usar a
nore
variante de:map
(por exemplo,noremap
) a menos que você queira permitir explicitamente que o lado direito seja reavaliado para mapeamentos.fonte
<A-d>
. Você provavelmente precisará alterar as configurações do seu terminal para que ele envie<A-d>
como<Esc>d
.Não tenho mais certeza se é "possível". Por favor, leia a atualização abaixo.
Sim, você pode até mesmo no vim terminal, mas não há nenhuma verdadeira captura toda resposta. Basicamente, você deve seguir duas etapas:
Certifique-se de que a
<M-d>
notação existe e mapeie exatamente as entradas do seu terminal (^[
é o caractere de escape):Mapeie algo para sua combinação recém-"criada":
Entendendo como funciona, você pode expandir esse "truque" para outras combinações "estranhas", por exemplo, estou usando cupim, e o vim não reconhece
<S-F1>
, usando cat I get^[[1;2P
. Então, no meu vimrc eu faço:,execute "set <S-F1>=\e[1;2P"
e então posso mapeá-lo para qualquer coisa.Nota: Não sei por que, mas para algumas pessoas usando
\<Esc>
obras em vez de\e
.Atualização (fevereiro de 2016)
Dependendo do terminfo que seu terminal executa, talvez você possa ... na maioria dos terminais, "alt + h", por exemplo, é mapeado
^[h
, que é: "escape + h". Portanto, ele pode substituir as chaves. Acabei de tentar (novamente) e parece funcionar, mas acredito que é uma implementação com muitos bugs e propensa a erros.No entanto, para os corajosos, aqui está um plugin experimental:
fonte
execute "set...
coisas, você pode apenas usar diretamenteset <M-d>=^[d
. O^[
é na verdade um caractere de escape inserido comC-v-Esc
. Isso era necessário no rxvt / urxvt, mas o xterm não deveria precisar de tratamento especial. Mais informações sobre este tópico no wiki do vim .<Esc>
entãod
agora faz a mesma coisa como<Alt>
+d
. Além disso, você pode fazer isso em uma linha comCtrl-v
,<Esc>
conforme aqui .Tecla Alt do mapa no Vim no Mac OSx:
Comece visualizando o código-chave que seu terminal está enviando para o vim:
No exemplo acima, executei o comando e pressionei Alt + Left.
A
^[[1;9D
é a sequência de escape enviada ao vim, para que possamos utilizá-la para nosso mapeamento.fonte
Option
tecla esquerda (⌥
) configurada comoEsc+
em iTerm2, eu poderia mapearalt+q
para sair do vim:nnoremap <silent> <Esc>q :qa!<cr>
Usar:
Veja
:help key-notation
.fonte
gvim
no Windows)Seu terminal pode não transmitir "corretamente" o Alt-D. Você pode usar CV para realmente obter a sequência de escape real enviada ao Vim e usá-la para criar seu mapeamento. Ou seja, edite seu .vimrc e substitua o real digitando a seguinte sequência "CV Alt-D" para que você tenha a sequência de escape correta em seu vimrc. Isso não funcionará se o seu terminal não enviar nada para o vim.
fonte
Meu terminal produziria
^[x
comandos (por exemplo, para alt-x). O que o fez funcionar dentro do Vim foi este pequeno script de vim.wikia.com :Adicione a .vimrc para corrigir todos os mapeamentos de teclas alt.
fonte
seguindo a resposta de Bruno para usuários de Mac, tente certificar-se de que sua chave de opção esteja mapeada para
Esc+
.Isso lhe dará o comportamento "normal" da
A
tecla option ( ) no Vim.Por exemplo, em
iterm2
, esta opção pode ser encontrada emPreferences > Profiles > Keys
:fonte
nnoremap <Esc>j :m .+1<CR>==
e semelhante ...Olá, após nenhuma boa solução depois de anos testando todos os itens acima no mac, continuei pesquisando.
Aqui está minha solução:
A saída deve ser um caractere incomum (não,
a
por exemplo) para que você não substitua um caractere regular.No exemplo abaixo você deve ser capaz de vim com ALT-Up.
configuração vim:
configuração mac:
fonte