Vim può disattivare automaticamente Capslock quando torna alla modalità normale?


12

Dopo quasi ogni volta che digito qualcosa in maiuscolo, mi dimentico di disattivare il maiuscolo quando torno alla modalità normale. Poi provo a spostare il cursore e finisco per unire un sacco di linee e molte altre cose che non mi aspetto che stiano accadendo.

È possibile configurare vim per disattivare il maiuscolo quando si preme Esc per accedere alla modalità normale?

Se ci sono soluzioni specifiche del sistema operativo, sono interessato a quelle applicabili a Linux.


la mia "soluzione" era rimappare il blocco maiuscole su "nessuna azione" (macos) poiché non lo uso se non per errore
localhostdotdev

Risposte:


8

Le risposte a questa domanda indicano che non è probabile - Vim non ha accesso al sistema operativo per effettuare quella chiamata.

Tuttavia, puoi provare a modificare il tuo comportamento in modo che Caps Lock non sia richiesto. È una chiave popolare per mappare Ctrl, Esco Meta.

Vim ha l' gUoperatore di mettere in maiuscolo una selezione o un movimento, quindi forse potresti digitare normalmente e usarlo in seguito. Rilevante anche: guminuscolo e ~toggle.

Esistono anche modi per completare automaticamente, che può ridurre la necessità di digitare VERY_LONG_MACRO_NAMES.


4

Ho rimappato il mio maiuscolo per essere ctrl e raramente uso mai mai il maiuscolo. Tuttavia, per Vim se mai avessi bisogno, hai tpope / vim-capslock come un capslock temporaneo software per te. Se lo usi, dovrebbe essere abbastanza facile impostare un autocmd per l'evento InsertLeavee disabilitare il capslock.


3

Ho trovato un modo per disattivare automaticamente il blocco maiuscole in modalità normale (anche se funziona solo in Linux).

Le soluzioni create con i plug-in non tengono conto del fatto che è possibile accedere alla modalità normale in più di un modo (ovvero dall'inserimento alla normale), ad esempio dalla modalità comando.

In realtà non vi è alcun evento di autocommand che si attiva quando si accede alla modalità normale, quindi l'evento che ho usato è stato invece CursorHoldevento, che si attiva quando non si digita in modalità normale.

au CursorHold * call TurnOffCaps()
set updatetime=10

Imposta il tempo di aggiornamento su un numero molto piccolo, quindi si attiverà sempre, prima di avere la possibilità di digitare qualsiasi cosa.

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

Penso che questa sia l'unica vera risposta alla domanda. Vim deve effettuare una chiamata al sistema operativo per disattivare CapsLock in qualche modo. Ovviamente come ciò dipenderà dal sistema operativo.
Octaviour,

2

Un'altra opzione è quella di rimappare la vostra CapsLocka Esc. Questa è una mappatura che sto usando da un paio d'anni: CapsLockè su una riga home, quindi è davvero facile da usare se tocchi il tipo. Promuove anche il corretto utilizzo di Vim, poiché uscire dalla modalità di inserimento è molto più semplice (il tasto è più vicino di Esc).

Rimappare è semplice: Linux lo supporta in modo nativo, ci sono piccole app per Mac OS X e Windows per farlo. E alcune tastiere costose hanno persino una funzione che consente di rimappare i tasti.


2

Oltre alla risposta Avian Y, in realtà esiste un autocomando che attiva l'uscita dalla modalità di inserimento:

au InsertLeave * call TurnOffCaps()

Era esattamente quello che stavo cercando ...


1

Sul mio computer Apple, ho effettivamente implementato questa funzione usando Karabiner , che ha funzionato abbastanza bene. Sfortunatamente il 10.12 ha rotto Karabiner, e da allora non ho più provato ad implementarlo.

L'ho avuto così usando il tasto Esc o il tasto Invio disabilitato il blocco maiuscole, se era abilitato prima.

Quindi, quando usi macOS su 10.11 o versioni precedenti, puoi sicuramente farlo (anche se non chiedermi le impostazioni, non le ho più).

Altrimenti andrei con il suggerito gU. (Anche se posso capire le tue lamentele, non poter usare lo stesso metodo che utilizzeresti in qualsiasi altro editor di testo)


0

Nel manuale di aiuto di vim c'è una mappatura piuttosto carina per rendere una parola tutto maiuscolo in modalità inserimento:

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

Usa ctrl-h, che normalmente è solo un clone di backspace, quindi non stai davvero perdendo nulla con questa mappatura.

Il blocco maiuscole è un incubo quando sei in modalità normale! Spero che aiuti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.