Repetições de chave e intervalos em mapeamentos Vim
Pergunta
Quero definir um mapeamento no meu .GVIMRC, de modo que, se a última tecla pressionada for mantida, a ação acionada será repetida. Especificamente, eu quero fazer algo como
map <SPACE>t :set transparency-=1
map <SPACE>T :set transparency+=1
Para MacVim, mas quero que a transparência continue diminuindo/aumentada quando t/t for mantida (não quero continuar pressionando a barra de espaço).
Se você tem uma sugestão para uma maneira mais agradável de ajustar a transparência, eu também apreciaria isso.
Separadamente, seria bom poder digitar 20 ESPAÇO t e a transparência diminuiu em 20; No entanto, quando tento, recebo um
E481: No range allowed.
Como posso ativar a especificação do intervalo?
Muito obrigado.
Solução
Não tenho certeza sobre a primeira parte da sua pergunta, mas para obter 20 <Space>
t Ser capaz de fazer seu trabalho:
:map <space>t :<C-U>exe "set transparency-=".v:count1<CR>
- Com
<C-U>
você remove o intervalo de linha que é adicionado ao seu comando ex quando você digita 20 no modo normal. - Com
exe
Você executa o vimscript 'dinâmico'. v:count1
é a contagem fornecida para o último comando de modo normal (20 neste exemplo). E se não houver contagem, considerando que a inadimplência é 1.
Para informações adicionais, consulte
:h v:count
:h v:count1
Atualizar:
Você pode omitir exe
usando let
forma em vez de set
1:
:map <space>t :<C-U>let &transparency-=v:count1<CR>
Ver :h :let-&
.