O vim pode desativar automaticamente o Capslock ao retornar ao modo normal?

12

Depois de quase sempre que digito algo em maiúsculas, esqueço de desativar o capslock ao retornar ao modo normal. Então, tento mover o cursor e acabo juntando várias linhas e muitas outras coisas que não espero que estejam acontecendo.

É possível configurar o vim para desativar o capslock quando pressiono escape para entrar no modo normal?

Se houver soluções específicas para o sistema operacional, estou interessado nas aplicáveis ​​ao Linux.

drs
fonte
minha "solução" para isso foi remapear o caps lock para "no action" (macos), pois eu não o uso, exceto por engano
localhostdotdev

Respostas:

8

As respostas a esta pergunta indicam que não é provável - o Vim não tem acesso ao sistema operacional para fazer essa ligação.

No entanto, você pode tentar alterar seu comportamento para que o Caps Lock não seja necessário. É uma chave populares para mapear Ctrl, Escou Meta.

O Vim tem o gUoperador para maiúsculas uma seleção ou movimento, então talvez você possa digitar normalmente e usá-lo posteriormente. Também relevante: gupara minúsculas e ~para alternar.

Também existem maneiras de preencher automaticamente, o que pode reduzir sua necessidade de digitação VERY_LONG_MACRO_NAMES.

David Lord
fonte
4

Eu remapeei meu capslock para ser ctrl e raramente uso mais. No entanto, para o vim, se eu precisar, você tem o tpope / vim-capslock como um bloqueio temporário de software para você. Se você usar isso, deve ser bastante fácil configurar um autocmd para o evento InsertLeavee desativar o capslock.

Dhruva Sagar
fonte
3

Encontrei uma maneira de desativar o caps lock no modo normal automaticamente (embora funcione apenas no Linux).

As soluções que foram feitas com plug-ins não levam em consideração que você pode entrar no modo normal de mais de uma maneira (que é de inserção para normal), por exemplo, no modo de comando.

Na verdade, não há nenhum evento de comando automático que é ativado ao entrar no modo normal; portanto, o evento que usei foi o CursorHoldevento, que é ativado quando você não está digitando no modo normal.

au CursorHold * call TurnOffCaps()
set updatetime=10

Você define o tempo de atualização para um número muito pequeno, para que ele sempre seja ativado antes que você possa digitar qualquer coisa.

function TurnOffCaps()  
    let capsState = matchstr(system('xset -q'), '00: Caps Lock:\s\+\zs\(on\|off\)\ze')
    if capsState == 'on'
        silent! execute ':!xdotool key Caps_Lock'
    endif
endfunction
Aviária Y
fonte
Eu acho que essa é a única resposta real para a pergunta. O Vim precisa fazer uma chamada para o sistema operacional para desativar o CapsLock de alguma forma. Obviamente, como isso é feito, dependerá do sistema operacional.
Oct
2

Outra opção é remapear o seu CapsLockpara Esc. Este é um mapeamento que CapsLockutilizo há alguns anos: está em uma linha inicial, por isso é realmente fácil de usar se você digitar o tipo. Também promove o uso adequado do Vim, pois sair do modo de inserção é muito mais fácil (a chave está mais próxima do queEsc ).

É fácil remapear: o Linux suporta isso nativamente; existem pequenos aplicativos para o Mac OS X e Windows para isso. E alguns teclados caros ainda vêm com um recurso que permite remapear as teclas.

Ruslan Osipov
fonte
2

Além da resposta Avian Y, na verdade, há um comando automático que é ativado saindo do modo de inserção:

au InsertLeave * call TurnOffCaps()

Isso também era exatamente o que eu estava procurando ...

Ruben
fonte
1

Na minha máquina Apple, eu realmente implementei esse recurso usando o Karabiner , que funcionou razoavelmente bem. Infelizmente, a 10.12 quebrou o Karabiner e eu não tentei implementá-lo desde então.

Eu usei a tecla escape ou a tecla enter desativada caps lock, se já estava ativada antes.

Portanto, quando você estiver usando o macOS no 10.11 ou abaixo, certamente poderá fazer isso (embora não me peça as configurações, eu não as tenho mais).

Caso contrário, eu iria com o sugerido gU. (Embora eu possa entender suas queixas, por não poder usar o mesmo método que você usaria em qualquer outro editor de texto)

hgiesel
fonte
0

No manual de ajuda do vim, há um mapeamento muito bom para colocar uma palavra em maiúsculas no modo de inserção:

inoremap <c-h> <esc>gUiw`]a

Usa ctrl-h , que normalmente é apenas um clone de backspace, então você não está realmente perdendo nada com esse mapeamento.

Caps lock é um pesadelo quando você está no modo normal! Espero que ajude!

Eric
fonte