Ich benutze bindkey -v
(für bash-er set -o vi
denke ich, dass das auch in zsh funktioniert) oder vi (m) Modus. aber es stört mich, dass ich keinen visuellen Anhaltspunkt habe, um mir zu sagen, ob ich mich im Einfüge- oder im Befehlsmodus befinde. Weiß jemand, wie ich meine Eingabeaufforderung veranlassen kann, den Modus anzuzeigen?
44
CTRL+C
im vi-Befehlsmodus etwas tun , wird die Eingabeaufforderung zurückgesetzt, Sie werden jedoch im Befehlsmodus angezeigt, wenn Sie sich wirklich im Einfügemodus befinden.zle-line-init
sollte immer die Anzeige in den Einfügemodus ändern. Aus irgendeinem Grund$KEYMAP
wird es nicht richtig aktualisiert, wenn zle-line-init aufgerufen wird.zle reset-prompt
löscht 1 (oder mehr) Zeilen oberhalb der Eingabeaufforderung (wenn Ihre Eingabeaufforderung mehrzeilig ist) beim Neuzeichnen :( Dies ist ein Showstopper für mich.Sie haben bereits gefunden,
zle-keymap-select
was ausgeführt wird, wenn sich der Modus ändert. Sie können es verwenden, um eine andere visuelle Anzeige als die Eingabeaufforderung festzulegen, je nachdem, was Ihr Terminal unterstützt (und natürlich, wie Sie die Anzeige für den Modus bevorzugen).Es gibt eine Standard- Terminfo-Funktion , um die Form des Cursors zu ändern. Einige Terminals zeigen jedoch in beiden Modi denselben Cursor an. Xterms Vorstellung von einem weniger sichtbaren Cursor besteht darin, dass er blinkt (und dies muss mit dem
-bc
Befehlszeilenargument oder dercursorBlink
Ressource aktiviert werden ).Bei einigen Terminals können Sie die Cursorfarbe auch mit
print -n '\e]12;pink\a'
(nach Farbname) oderprint -n '\e]12;#abcdef\a'
(nach RGB-Spezifikation) ändern . Diese Sequenzen werden in der xterm-Dokumentation in derctlseqs
Datei beschrieben. Moderne Terminalemulatoren emulieren normalerweise xterm, obwohl sie möglicherweise nicht alle Funktionen unterstützen.quelle
main
fürKEYMAP
stattviins
, nicht sicher , warum.main
ist ein Alias fürviins
oderemacs
abhängig davon, ob zsh dachte, Ihr Lieblingseditor wäre vi oder nicht, als er gestartet wurde. Ich dachte, es würde verwendet,viins
wenn der Modus zurückgeschaltet wirdvicmd
, aber es scheint, dass esmain
stattdessen verwendet wird. Aktualisiert.zle-line-init
(oder einer anderen Alternative) verdoppeln, dazle-keymap-select
sie nicht aufgerufen werden, wenn Sie die Eingabetaste drücken, um die Tastaturbelegung zu ändern.Für die Leute, die Probleme mit der Verwendung von reset-prompt bei mehrzeiligen Eingabeaufforderungen haben, funktionierte dies für mich: http://zeitlens.com/posts/2014-06-29-howto-zsh-vi-style.html In Kombination mit https: // stackoverflow.com/questions/3622943/zsh-vi-mode-status-line Am Ende machte ich Folgendes :
quelle
Sie können VimMode versuchen
quelle
Dies ist, was ich benutze, um den Cursor zwischen 'Block' und 'Beam' Form in zsh zu ändern:
(Getestet mit Termite , Gnome-Terminal und Mate-Terminal )
quelle
add-zsh-hook
wie folgtEine andere Lösung zum Ändern der Cursorform zwischen I-Beam und Block (für Unterstreichung verwenden
\033[4 q
). Fügen Sie dieses Ihrem hinzu~/.zshrc
.Geändert von https://bbs.archlinux.org/viewtopic.php?id=95078 . Getestet in gnome-terminal 3.22.
Aktualisieren
Eine weitere Lösung zum Ändern der Cursorformen finden Sie hier . Dieser funktioniert anscheinend für iTerm2, das ich nicht testen kann, sondern hier hinzufüge, falls es für jemand anderen nützlich ist. Die letzte Ergänzung zu Ihrem
~/.zshrc
wärequelle
Ich benutze derzeit Zsh mit Bullet Train Theme. Dem Beispiel von Sebastian Blask folgend , landete ich mit dem folgenden Code
Dies ändert nur die Standardeinstellung $ in die Buchstaben N für den normalen Modus und I für den Einfügemodus.
Dieses Bild ist ein Beispiel, wenn ich im normalen Modus Ctrl+ drücke C:
quelle
Hier ist noch eine andere Version, basierend auf Sebastian Blask's Post . Dies sollte so unauffällig wie möglich sein, da alle anderen Lösungen, die ich finden konnte, zusätzliche Zeilen, den Status auf der rechten Seite oder hinzugefügte Zeichen enthielten.
Dies ändert einfach die Farbe
$
von Weiß nach Rot, wenn der normale Modus aktiviert ist. Bearbeiten Sie die Eingabeaufforderung nach Ihren Wünschenquelle
Eine Version für
oh-my-zsh
BenutzerEs gibt ein Plugin für
oh-my-zsh
calledvi-mode
, das hier zu finden ist:robbyrussell / oh-my-zsh / plugins / vi-mode
Ich verwalte meine Plugins mit Antigen. Das Hinzufügen dieser Plugins zu meinen
.zshrc
:quelle
Das Plugin zsh-vim-mode kann einen Indikator für die Modi Einfügen, Befehlen, Suchen, Ersetzen und Visuelles anzeigen. Es verwendet die grundlegende Technik anderer Antworten, um sich in die verschiedenen ZLE-Hooks einzuklinken (zle-keymap-select, zle-isearch-update usw.). Es prüft den
[[ $ZLE_STATE = *overwrite* ]]
Ersetzungsmodus. Es prüft$REGION_ACTIVE
den visuellen Modus.Die Logik wird durch einige Macken kompliziert, wie ZSH Ereignisse auslöst, wenn der Suchmodus verlassen wird.
Ein weiteres nettes Merkmal des Moduls ist die Möglichkeit, die Cursorform und -farbe je nach Modus zu ändern. Beispielsweise können Sie im INSERT-Modus einen vertikalen Balken und im SEARCH-Modus eine blinkende Unterstreichung verwenden.
quelle