¿Puede vim apagar automáticamente Capslock cuando vuelve al modo normal?


12

Después de casi cada vez que escribo algo en mayúsculas, olvido desactivar el bloqueo de mayúsculas cuando vuelvo al modo normal. Luego trato de mover el cursor y terminar uniendo un montón de líneas y muchas otras cosas que no espero que sucedan.

¿Es posible configurar vim para desactivar el bloqueo de mayúsculas cuando presiono escape para ingresar al modo Normal?

Si hay soluciones que son específicas del sistema operativo, estoy interesado en las aplicables a Linux.


mi "solución" a esto fue para volver a asignar el bloqueo de mayúsculas a "no acción" (MacOS) como yo no lo uso, salvo por error
localhostdotdev

Respuestas:


8

Las respuestas a esta pregunta indican que no es probable: Vim no tiene acceso al sistema operativo para hacer esa llamada.

Sin embargo, puede intentar cambiar su comportamiento para que no se requiera el bloqueo de mayúsculas. Es una clave popular para asignar Ctrl, Esco Meta.

Vim tiene el gUoperador para poner en mayúscula una selección o movimiento, por lo que tal vez podría escribir normalmente y usarlo después. También relevante: guminúsculas y ~alternar.

También hay formas de autocompletar, lo que puede reducir su necesidad de escribir VERY_LONG_MACRO_NAMES.


4

He reasignado mi Capslock para que sea Ctrl y rara vez uso Capslock más. Sin embargo, para vim si alguna vez lo necesito, tienes tpope / vim-capslock como un bloqueo temporal de software para ti. Si usa esto, debería ser bastante fácil configurar un autocmd para el evento InsertLeavey desactivar el bloqueo de mayúsculas.


3

Encontré una forma de desactivar el bloqueo de mayúsculas en modo normal automáticamente (aunque solo funciona en Linux).

Las soluciones que se hicieron con complementos no tienen en cuenta que puede ingresar al modo normal de más de una manera (es decir, de insertar a normal), por ejemplo, desde el modo de comando.

En realidad, no hay ningún evento de autocomando que se active al ingresar al modo normal, por lo que el evento que usé en su lugar fue CursorHoldevento, que se activa cuando no está escribiendo en modo normal.

au CursorHold * call TurnOffCaps()
set updatetime=10

Establece el tiempo de actualización en un número muy pequeño, por lo que siempre se activará, antes de que tenga la oportunidad de escribir algo.

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

Creo que esta es la única respuesta real a la pregunta. Vim necesita hacer una llamada al sistema operativo para desactivar CapsLock de alguna manera. Por supuesto, cómo se haga eso dependerá del sistema operativo.
Octavio

2

Otra opción es reasignar tu CapsLocka Esc. Este es un mapeo que he estado usando durante un par de años: CapsLockestá en una fila de inicio, por lo que es muy fácil de usar si tocas escribir. También promueve el uso adecuado de Vim, ya que salir del modo de inserción es mucho más fácil (la tecla está más cerca que Esc).

Es fácil reasignar: Linux lo admite de forma nativa, hay pequeñas aplicaciones para Mac OS X y Windows para lograrlo. Y algunos teclados caros incluso vienen con una función que permite reasignar teclas.


2

Además de la respuesta Avian Y, en realidad hay un autocomando que se activa dejando el modo de inserción:

au InsertLeave * call TurnOffCaps()

Eso era exactamente lo que estaba buscando ...


1

En mi máquina Apple, implementé esta característica usando Karabiner , que funcionó razonablemente bien. Desafortunadamente, 10.12 rompió Karabiner, y no he intentado implementarlo desde entonces.

Lo tenía así que usando la tecla de escape o la tecla Intro deshabilitó el bloqueo de mayúsculas, si estaba habilitado antes.

Entonces, cuando esté usando macOS en 10.11 o inferior, ciertamente puede hacer esto (aunque no me pida las configuraciones, ya no las tengo).

De lo contrario, iría con lo sugerido gU. (Aunque puedo entender sus quejas, sobre no poder usar el mismo método que usaría en cualquier otro editor de texto)


0

En el manual de ayuda de vim, hay un mapeo bastante agradable para poner una palabra en mayúsculas en el modo de inserción:

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

Utiliza ctrl-h, que normalmente es solo un clon de retroceso, por lo que realmente no está perdiendo nada con esta asignación.

¡El bloqueo de mayúsculas es una pesadilla cuando estás en modo normal! ¡Espero que eso ayude!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.