Vim peut-il désactiver automatiquement Capslock lors du retour en mode normal?

12

Après presque chaque fois que je tape quelque chose en majuscules, j'oublie de désactiver le verrouillage des majuscules lorsque je reviens en mode normal. J'essaie ensuite de déplacer le curseur et je finis par rejoindre un tas de lignes et bien d'autres choses que je ne m'attends pas à voir se produire.

Est-il possible de configurer vim pour désactiver le verrouillage des majuscules lorsque j'appuie sur échappement pour passer en mode normal?

S'il existe des solutions spécifiques au système d'exploitation, je m'intéresse à celles applicables à Linux.

drs
la source
ma "solution" à cela était de remapper le verrouillage des majuscules à "aucune action" (macos) car je ne l'utilise que par erreur
localhostdotdev

Réponses:

8

Les réponses à cette question indiquent qu'il est peu probable - Vim n'a pas accès au système d'exploitation pour effectuer cet appel.

Cependant, vous pouvez essayer de modifier votre comportement afin que le verrouillage des majuscules ne soit pas requis. C'est une clé populaire à laquelle mapper Ctrl, Escou Meta.

Vim a l' gUopérateur pour mettre en majuscule une sélection ou un mouvement, vous pouvez donc peut-être taper normalement et l'utiliser ensuite. Également pertinent: gupour minuscule et ~pour basculer.

Il existe également des moyens de saisie semi-automatique, ce qui peut réduire votre besoin de taper VERY_LONG_MACRO_NAMES.

David Lord
la source
4

J'ai remappé mon capslock pour qu'il soit ctrl et j'utilise rarement plus de capslock. Cependant, pour vim si j'en ai besoin, vous avez tpope / vim-capslock en tant que logiciel de verrouillage temporaire pour vous. Si vous l'utilisez, il devrait être assez facile de configurer un autocmd pour l'événement InsertLeaveet de désactiver le verrouillage des majuscules.

Dhruva Sagar
la source
3

J'ai trouvé un moyen de désactiver automatiquement le verrouillage des majuscules en mode normal (bien que cela ne fonctionne que sous Linux).

Les solutions qui ont été faites avec des plugins ne tiennent pas compte du fait que vous pouvez entrer en mode normal de plus d'une façon (c'est-à-dire de l'insertion au normal), par exemple du mode commande.

Il n'y a en fait aucun événement de commande automatique qui s'active en entrant en mode normal, donc l'événement que j'ai utilisé à la place était CursorHoldévénement, qui s'active lorsque vous ne tapez pas en mode normal.

au CursorHold * call TurnOffCaps()
set updatetime=10

Vous définissez le temps de mise à jour sur un très petit nombre, il s'activera donc toujours avant d'avoir la possibilité de taper quoi que ce soit.

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
Avian Y
la source
Je pense que c'est la seule vraie réponse à la question. Vim doit appeler le système d'exploitation pour désactiver CapsLock d'une manière ou d'une autre. Bien sûr, la façon dont cela se fera dépendra du système d'exploitation.
Octaviour
2

Une autre option est de remapper votre CapsLockà Esc. C'est un mappage que j'utilise depuis quelques années maintenant: il CapsLockest sur une ligne d'accueil, il est donc très facile à utiliser si vous touchez le type. Il favorise également une bonne utilisation de Vim, car sortir du mode d'insertion est beaucoup plus facile (la clé est plus proche que Esc).

Il est facile de remapper: Linux prend en charge cela nativement, il existe de petites applications pour Mac OS X et Windows pour y parvenir. Et certains claviers coûteux sont même livrés avec une fonctionnalité qui permet de remapper les touches.

Ruslan Osipov
la source
2

En plus de la réponse Avian Y, il existe en fait une autocommande qui active le mode d'insertion de sortie:

au InsertLeave * call TurnOffCaps()

C'était aussi exactement ce que je cherchais ...

Ruben
la source
1

Sur ma machine Apple, j'ai en fait implémenté cette fonctionnalité en utilisant Karabiner , qui fonctionnait assez bien. Malheureusement, 10.12 a cassé Karabiner, et je n'ai pas essayé de l'implémenter depuis.

Je l'avais donc en utilisant la touche d'échappement ou la touche entrée désactivée, le verrouillage des majuscules, s'il était activé auparavant.

Donc, lorsque vous utilisez macOS sur 10.11 ou inférieur, vous pouvez certainement le faire (bien que ne me demandez pas les paramètres, je ne les ai plus).

Sinon, j'irais avec la suggestion gU. (Même si je peux comprendre vos griefs, ne pas pouvoir utiliser la même méthode que vous utiliseriez dans un autre éditeur de texte)

hgiesel
la source
0

Dans le manuel d'aide de vim, il y a un mappage assez agréable pour faire un mot tout en majuscules en mode insertion:

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

Il utilise ctrl-h, qui n'est normalement qu'un clone de retour arrière, donc vous ne perdez vraiment rien avec ce mappage.

Le verrouillage des majuscules est un cauchemar lorsque vous êtes en mode normal! J'espère que ça aide!

Eric
la source