ZSH+Gnome-Terminal und VI-Eingabemodus: Ibeam- oder Blockcursor anzeigen

ZSH+Gnome-Terminal und VI-Eingabemodus: Ibeam- oder Blockcursor anzeigen

Es gibt verschiedene Methodenum anzuzeigen, ob Sie sich im Einfügen- oder Normalmodus befinden, wenn Sie die VI-Tastenkombination in ZSH verwenden.

Gnome-Terminal auchermöglicht das Ändern des Cursorsvon Block zu Ibeam |mit einem Aufruf von gconftool-2.

Wie kann ich diese beiden kombinieren, sodass ich einen I-Träger im Einfügemodus und einen Block im Normalmodus habe?

Antwort1

Beide Antworten in die Frage einfügen[1,2] zusammen komme ich zu folgendem Ergebnis:

function zle-line-init zle-keymap-select {
    if [[ $KEYMAP == vicmd ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block
    elif [[ $KEYMAP == (main|viins) ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam
    fi
}
zle -N zle-line-init
zle -N zle-keymap-select

Der Unterschied besteht darin, dass ich den $KEYMAPParameter direkt mit einer if..fiKlausel überprüfe und den gconftool-2Befehl ausführe, anstatt die Eingabeaufforderung zu ändern.

Antwort2

In neueren Versionen von Gnome-Terminal können Sie die folgenden Escape-Sequenzen verwenden, um den Cursor zu ändern:

  • \e[0 qoder \e[ q: Zurücksetzen auf den in den Profileinstellungen definierten Wert
  • \e[1 q: blinkender Block
  • \e[2 q: stabiler Block
  • \e[3 q: blinkende Unterstreichung
  • \e[4 q: durchgehende Unterstreichung
  • \e[5 q: blinkender I-Balken
  • \e[6 q: stabiler I-Träger

Sie können diese beispielsweise ausdrucken echo -ne '\e[5 q'. Schließen Sie diese an Ihre Zsh-Konfiguration an, wie in der Antwort von mpy gezeigt.

verwandte Informationen