Kann vim die Feststelltaste automatisch deaktivieren, wenn der normale Modus wiederhergestellt wird?

12

Nachdem ich fast jedes Mal etwas in Großbuchstaben eingegeben habe, vergesse ich, die Großbuchstaben zu deaktivieren, wenn ich zum normalen Modus zurückkehre. Ich versuche dann, den Cursor zu bewegen und verbinde dann ein paar Zeilen und viele andere Dinge, von denen ich nicht erwarte, dass sie passieren.

Ist es möglich, vim so zu konfigurieren, dass die Feststelltaste deaktiviert wird, wenn ich die Escape-Taste drücke, um in den normalen Modus zu wechseln?

Wenn es betriebssystemspezifische Lösungen gibt, interessieren mich diejenigen, die für Linux gelten.

drs
quelle
Meine "Lösung" bestand darin, die Feststelltaste auf "Keine Aktion" (MacOS) umzustellen, da ich sie nur aus Versehen verwende
localhostdotdev

Antworten:

8

Antworten auf diese Frage weisen darauf hin, dass dies nicht wahrscheinlich ist. Vim hat keinen Zugriff auf das Betriebssystem, um diesen Anruf zu tätigen.

Sie können jedoch versuchen, Ihr Verhalten so zu ändern, dass keine Feststelltaste erforderlich ist. Es ist ein beliebter Schlüssel für die Zuordnung zu Ctrl,Esc oder Meta.

Vim hat den gUOperator, eine Auswahl oder Bewegung in Großbuchstaben zu schreiben. Vielleicht können Sie also normal tippen und diese anschließend verwenden. Ebenfalls relevant: guin Kleinbuchstaben und~ Umschalten.

Es gibt auch Möglichkeiten zur automatischen Vervollständigung, wodurch Sie möglicherweise weniger tippen müssen VERY_LONG_MACRO_NAMES.

David Lord
quelle
4

Ich habe mein Capslock neu zugeordnet, um CTRL zu sein, und ich verwende selten mehr Capslock. Für vim, wenn ich es jemals brauche, haben Sie tpope / vim-capslock als temporäres Software-Capslock für Sie. Wenn Sie dies verwenden, sollte es ziemlich einfach sein, eine Autocmd für das Ereignis InsertLeaveeinzurichten und die Feststelltaste zu deaktivieren.

Dhruva Sagar
quelle
3

Ich habe eine Möglichkeit gefunden, die Feststelltaste im normalen Modus automatisch zu deaktivieren (obwohl dies nur unter Linux funktioniert).

Die Lösungen, die mit Plugins erstellt wurden, berücksichtigen nicht, dass Sie den normalen Modus auf mehrere Arten aufrufen können (dh von Einfügen zu Normal), beispielsweise vom Befehlsmodus.

Es gibt kein Autocommand-Ereignis, das beim Aufrufen des normalen Modus aktiviert wird. Daher war das von mir verwendete CursorHoldEreignis ein Ereignis, das aktiviert wird, wenn Sie nicht im normalen Modus tippen.

au CursorHold * call TurnOffCaps()
set updatetime=10

Sie stellen die Aktualisierungszeit auf einen sehr kleinen Wert ein, damit sie immer aktiviert wird, bevor Sie die Möglichkeit haben, etwas einzugeben.

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
quelle
Ich denke, das ist die einzig wahre Antwort auf die Frage. Vim muss das Betriebssystem anrufen, um CapsLock zu deaktivieren. Wie das gemacht wird, hängt natürlich vom Betriebssystem ab.
Oktober
2

Eine andere Option ist die Neuzuordnung CapsLockvon Esc. Dies ist eine Zuordnung, die ich seit ein paar Jahren verwende: Sie CapsLockbefindet sich in einer Startreihe, ist also sehr einfach zu verwenden, wenn Sie die Eingabe berühren. Es fördert auch die ordnungsgemäße Verwendung von Vim, da das Verlassen des Einfügemodus viel einfacher ist (der Schlüssel ist näher als Esc).

Die Neuzuordnung ist einfach: Linux unterstützt dies von Haus aus. Dazu gibt es kleine Apps für Mac OS X und Windows. Einige teure Tastaturen sind sogar mit einer Funktion ausgestattet, mit der Tasten neu zugeordnet werden können.

Ruslan Osipov
quelle
2

Zusätzlich zur Antwort von Avian Y gibt es tatsächlich einen automatischen Befehl, der das Verlassen des Einfügemodus aktiviert:

au InsertLeave * call TurnOffCaps()

Das war auch genau das, wonach ich gesucht habe ...

Ruben
quelle
1

Auf meinem Apple-Computer habe ich diese Funktion mithilfe von Karabiner implementiert , was ziemlich gut funktioniert hat. Leider ist Karabiner 10.12 kaputt gegangen, und ich habe seitdem nicht mehr versucht, es zu implementieren.

Ich hatte es also mit der Escape-Taste oder der Enter-Taste deaktiviert, falls es vorher aktiviert war.

Wenn Sie MacOS mit 10.11 oder neuer verwenden, können Sie dies auf jeden Fall tun (fragen Sie mich jedoch nicht nach den Einstellungen, ich habe sie nicht mehr).

Ansonsten würde ich mit dem vorgeschlagenen gehen gU. (Auch wenn ich Ihre Beschwerden verstehen kann, dass Sie nicht dieselbe Methode verwenden können, die Sie in jedem anderen Texteditor verwenden würden.)

hgiesel
quelle
0

Im vim-Hilfehandbuch gibt es eine hübsche Zuordnung, um im Einfügemodus ein Wort in Großbuchstaben zu schreiben:

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

Es wird verwendet ctrl-h, was normalerweise nur ein Backspace-Klon ist, sodass Sie mit diesem Mapping nichts wirklich verlieren.

Feststelltaste ist ein Albtraum, wenn Sie im normalen Modus sind! Ich hoffe das hilft!

Eric
quelle