Czy vim może automatycznie wyłączyć Capslock po powrocie do normalnego trybu?

14

Niemal za każdym razem, gdy wpisuję coś w wielkich literach, zapominam o wyłączeniu tej funkcji po powrocie do normalnego trybu. Następnie próbuję przesunąć kursor i ostatecznie dołączyć do szeregu linii i wielu innych rzeczy, których nie oczekuję.

Czy można skonfigurować Vima, aby wyłączał Capslock po naciśnięciu klawisza Escape, aby przejść do trybu normalnego?

Jeśli istnieją rozwiązania specyficzne dla systemu operacyjnego, jestem zainteresowany tymi, które dotyczą Linuksa.

dr
źródło
mój „rozwiązanie” to było przemapować caps lock do „braku działania” (MacOS), jak nie używam go chyba przez pomyłkę
localhostdotdev

Odpowiedzi:

8

Odpowiedzi na to pytanie wskazują, że jest mało prawdopodobne - Vim nie ma dostępu do systemu operacyjnego, aby wykonać to połączenie.

Możesz jednak spróbować zmienić swoje zachowanie, aby Caps Lock nie był wymagany. Jest to popularny klucz do mapowania Ctrl, Esclub Meta.

Vim ma gUoperator do zaznaczania lub zaznaczania dużymi literami, więc być może mógłbyś pisać normalnie i użyć tego później. Również istotne: gumałe litery i ~przełączanie.

Istnieją również sposoby autouzupełniania, które mogą zmniejszyć potrzebę pisania VERY_LONG_MACRO_NAMES.

David Lord
źródło
4

Ponownie zamapowałem Capslock na ctrl i rzadko używam już capslocka. Jednak dla vima, jeśli kiedykolwiek będę tego potrzebować, masz tpope / vim-capslock jako oprogramowanie tymczasowe dla ciebie. Jeśli go użyjesz, skonfigurowanie autocmd dla zdarzenia InsertLeavei wyłączenie capslocka powinno być dość łatwe .

Dhruva Sagar
źródło
4

Znalazłem sposób na automatyczne wyłączenie Caps Lock w trybie normalnym (choć działa tylko w systemie Linux).

Rozwiązania wykonane za pomocą wtyczek nie biorą pod uwagę, że możesz przejść do trybu normalnego na więcej niż jeden sposób (to znaczy od wstawiania do normalności), na przykład z trybu poleceń.

W rzeczywistości nie ma zdarzenia automatycznego komendowania, które aktywuje się po przejściu do trybu normalnego, więc zdarzenie, którego użyłem, było CursorHoldzdarzeniem, które aktywuje się, gdy nie piszesz w trybie normalnym.

au CursorHold * call TurnOffCaps()
set updatetime=10

Czas aktualizacji ustawiasz na bardzo małą liczbę, więc zawsze będzie się on aktywował, zanim będziesz miał szansę coś napisać.

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
Ptasia Y
źródło
Myślę, że to jedyna prawdziwa odpowiedź na pytanie. Vim musi zadzwonić do systemu operacyjnego, aby jakoś włączyć CapsLock. Oczywiście, jak to się stanie, będzie zależeć od systemu operacyjnego.
Octaviour
3

Oprócz odpowiedzi Avian Y, w rzeczywistości istnieje komenda automatyczna, która aktywuje opuszczanie trybu wstawiania:

au InsertLeave * call TurnOffCaps()

Właśnie tego szukałem ...

Ruben
źródło
2

Inną opcją jest przemapować swoją CapsLockTO Esc. To jest mapowanie, którego używam od kilku lat: CapsLockjest w wierszu domowym, więc jest bardzo łatwe w użyciu, jeśli dotkniesz pisma . Promuje również prawidłowe użycie Vima, ponieważ wyjście z trybu wstawiania jest znacznie łatwiejsze (klawisz jest bliżej niż Esc).

Łatwo go odwzorować: Linux obsługuje to natywnie, istnieją małe aplikacje dla Mac OS X i Windows, aby to osiągnąć. Niektóre drogie klawiatury są nawet wyposażone w funkcję umożliwiającą ponowne mapowanie klawiszy.

Rusłan Osipow
źródło
1

Na moim komputerze Apple faktycznie zaimplementowałem tę funkcję za pomocą Karabinera , który działał dość dobrze. Niestety 10.12 złamał Karabiner i od tego czasu nie próbowałem go wdrożyć.

Miałem to tak, używając klawisza Escape lub klawisza Enter wyłączony Caps Lock, jeśli był wcześniej włączony.

Więc jeśli używasz systemu macOS 10.11 lub starszego, możesz to zrobić (choć nie pytaj mnie o ustawienia, już ich nie mam).

W przeciwnym razie wybrałbym sugerowane gU. (Mimo że rozumiem twoje skargi, że nie możesz użyć tej samej metody, której używałbyś w innym edytorze tekstu)

hgiesel
źródło
0

W podręczniku pomocy vima znajduje się całkiem niezłe mapowanie, aby wyrazić wszystkie wielkie litery w trybie wstawiania:

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

Używa ctrl-h, który zwykle jest tylko klonem backspace, więc tak naprawdę nie tracisz nic z tym mapowaniem.

Caps Lock to koszmar, gdy jesteś w trybie normalnym! Mam nadzieję że to pomogło!

Eric
źródło