Frage

Ich bin mit zsh als Standard-Shell auf einem Feld Ubuntu, und alles funktioniert mit gnome-terminal (die so weit ich weiß, xterm emuliert). Wenn ich mich einlogge von einem Windows-Box über ssh und Kitt (die auch xterm emuliert) suddendly der Start / Ende-Tasten funktionieren nicht mehr.

Ich habe in der Lage gewesen, dass das Hinzufügen dieser Zeilen zu meiner zshrc Datei zu lösen ...

bindkey '\e[1~' beginning-of-line
bindkey '\e[4~' end-of-line

... aber ich frage mich immer noch, was hier los ist. Jede Idee?

War es hilfreich?

Lösung

Ich fand es ist eine Kombination:

Ein

Die ZSH Entwickler glauben nicht, dass ZSH die Aktionen der Startseite definieren sollte , Ende , Del , ... Tasten.

Debian und Ubuntu dieses Problem beheben, indem sie die normalen Aktionen der durchschnittliche Benutzer definieren würde in der globalen /etc/zsh/zshrc Datei erwarten. Nach dem entsprechenden Code (es ist das gleiche auf Debian und Ubuntu):

if [[ "$TERM" != emacs ]]; then
[[ -z "$terminfo[kdch1]" ]] || bindkey -M emacs "$terminfo[kdch1]" delete-char
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
[[ -z "$terminfo[kich1]" ]] || bindkey -M emacs "$terminfo[kich1]" overwrite-mode
[[ -z "$terminfo[kdch1]" ]] || bindkey -M vicmd "$terminfo[kdch1]" vi-delete-char
[[ -z "$terminfo[khome]" ]] || bindkey -M vicmd "$terminfo[khome]" vi-beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M vicmd "$terminfo[kend]" vi-end-of-line
[[ -z "$terminfo[kich1]" ]] || bindkey -M vicmd "$terminfo[kich1]" overwrite-mode

[[ -z "$terminfo[cuu1]" ]] || bindkey -M viins "$terminfo[cuu1]" vi-up-line-or-history
[[ -z "$terminfo[cuf1]" ]] || bindkey -M viins "$terminfo[cuf1]" vi-forward-char
[[ -z "$terminfo[kcuu1]" ]] || bindkey -M viins "$terminfo[kcuu1]" vi-up-line-or-history
[[ -z "$terminfo[kcud1]" ]] || bindkey -M viins "$terminfo[kcud1]" vi-down-line-or-history
[[ -z "$terminfo[kcuf1]" ]] || bindkey -M viins "$terminfo[kcuf1]" vi-forward-char
[[ -z "$terminfo[kcub1]" ]] || bindkey -M viins "$terminfo[kcub1]" vi-backward-char

# ncurses fogyatekos
[[ "$terminfo[kcuu1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcuu1]/O/[}" vi-up-line-or-history
[[ "$terminfo[kcud1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcud1]/O/[}" vi-down-line-or-history
[[ "$terminfo[kcuf1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcuf1]/O/[}" vi-forward-char
[[ "$terminfo[kcub1]" == "^[O"* ]] && bindkey -M viins "${terminfo[kcub1]/O/[}" vi-backward-char
[[ "$terminfo[khome]" == "^[O"* ]] && bindkey -M viins "${terminfo[khome]/O/[}" beginning-of-line
[[ "$terminfo[kend]" == "^[O"* ]] && bindkey -M viins "${terminfo[kend]/O/[}" end-of-line
[[ "$terminfo[khome]" == "^[O"* ]] && bindkey -M emacs "${terminfo[khome]/O/[}" beginning-of-line
[[ "$terminfo[kend]" == "^[O"* ]] && bindkey -M emacs "${terminfo[kend]/O/[}" end-of-line
fi

Also, wenn Sie auf einem Debian oder Ubuntu-Box anschließen, müssen Sie nichts tun. Alles sollte automatisch funktionieren (wenn nicht, siehe unten).

Aber ... wenn Sie in einer anderen Box verbinden (zum Beispiel FreeBSD), könnte es keine benutzerfreundliche Standard zshrc sein. Die Lösung ist natürlich die Zeilen aus dem Debian / Ubuntu zshrc Ihren eigenen .zshrc.

hinzufügen

Zwei

Putty sendet xterm als Terminal-Typ zu der Remote-Host. Aber vermasselt irgendwo auf und sendet nicht die richtige Steuercodes für Home , Ende , ... dass man von einem xterm erwarten. Oder ein xterm Terminal ist nicht zu erwarten diejenigen, oder was auch immer senden ... ( Del -Taste funktioniert in xterm jedoch, wenn Sie es in ZSH konfigurieren). Beachten Sie auch, dass Ihre Numpad-Tasten wirken komisch in Vim zum Beispiel mit xterm Terminal.

Die Lösung ist Putty konfigurieren einen anderen Terminaltyp zu senden. Ich habe xterm-color und linux versucht. xterm-color fixiert das Home / Ende Problem, aber die Numpad war noch lustig. Eine Einstellung beide Probleme behoben linux.

Sie können unter Anschlussklemmentyp in Putty-Set -> Daten. Nicht versucht, Terminaltyp in Ihrem .zshrc mit export TERM=linux zu setzen, das ist einfach falsch. Der Terminaltyp sollte von Ihrem Terminal App angegeben werden. So dass es gesetzt, wenn zum Beispiel verbinden Sie von einem Mac-Box mit einem Mac SSH-Client kann über einen eigenen Terminal-Typ ist.

Beachten Sie, dass TERM Terminaltyp gibt und hat nichts mit dem Host zu tun, damit Sie eine Verbindung herstellen. Ich kann meinen Terminaltyp festgelegt in Putty auf linux und FreeBSD-Servern ohne Probleme verbinden.

So beheben diese beiden Dinge, und Sie sollten in Ordnung sein:)

Andere Tipps

Auf dem PuTTY Konfigurationsdialog finden Sie unter Verbindung -.> Daten und Typ Linux in den Terminaltyp-Zeichenfolge vor dem Anschluss

Dies ist für mich arbeiten

bindkey -v

bindkey '\eOH'  beginning-of-line
bindkey '\eOF'  end-of-line

Es scheint eine Kitt Sache. Gnome-Terminal sendet die Codes ^[OH und ^[OF für Heim und Ende jeweils während Kitt ^[[1~ und ^[[4~ sendet. Es gibt eine Option in Kitt aus den Home / Ende-Tasten ändern Standard auf rxvt Modus, und das scheint die Home-Taste zu beheben, aber nicht das Ende-Taste (die jetzt sendet ^[Ow). Denke, es ist Zeit, einen Fehlerbericht irgendwo in Datei ...: -)

die entsprechende Antwort, die über tragbar sein sollte alle Distros (nicht alle Versionen von zsh necessarly aber ymmv hier) ist das zkbd Hilfsprogramm von zkbd zu verwenden.

  

Tastatur Definition
  Die große Anzahl der möglichen Kombinationen von Tastaturen, Workstations, Terminals, Emulatoren und Fenstersystemen macht es unmöglich für zsh Einbau-haben Tastenbelegungen für jede Situation. Das zkbd Dienstprogramm in Functions / Misc, können Sie Tastenbelegungen für Ihre Konfiguration erstellen helfen.

     

Ausführen zkbd entweder als automatisch geladen Funktion oder als ein Shell-Skript:

zsh -f ~/zsh-4.3.17/Functions/Misc/zkbd
  

Wenn Sie zkbd laufen, es fragt Sie zuerst Ihren Terminaltyp einzugeben; wenn der Standard bietet es richtig ist, drücken Sie einfach die Eingabetaste. Es fordert Sie dann eine Reihe von verschiedenen Tasten zu drücken Eigenschaften Ihrer Tastatur und Terminal zu bestimmen; zkbd warnt          wenn sie feststellt, etwas aus dem üblichen heraus, wie eine Löschtaste, die weder ^ H sendet noch ^ ?.

     

Die Tastenanschläge von zkbd gelesen werden als eine Definition für einen assoziatives Array namens Schlüssel aufgezeichnet, in dem Unterverzeichnis in eine Datei geschrieben .zkbd innerhalb entweder zu Hause oder im ZDOTDIR Verzeichnis. Der Name der Datei wird aus dem TERM, Hersteller- und OSTYPE zusammengesetzt          Parameter, zusammen mit Bindestrichen.

     

Sie können diese Datei in Ihre .zshrc oder eine andere Startdatei mit dem source' or lesen.‘ Befehle, verweisen dann auf die Schlüsselparameter in bindkey Befehle, wie folgt aus:

          source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE
          [[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
          [[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
          # etc.
  

Beachten Sie, dass für `automatischen Laden zkbd‘ zu arbeiten, die zkdb Datei in eines der Verzeichnisse in Ihrem FPATH Array (siehe zshparam (1)) genannt sein muss. Dies sollte bereits dann der Fall sein, wenn Sie eine Standard zsh Installation haben; wenn dies nicht der Fall, kopieren Funktionen / Misc / zkbd zu einem entsprechenden Verzeichnis.

siehe man -P "less -p 'keyboard definition'" zshcontrib oder suchen Sie die Meta-manpage zshall

Diese Bindungen einfach erscheinen nicht Teil der Standardbindungen in Emacs-Modus eingestellt sein.

Ausführen „wo-ist beginning-of-line“ auf meinem Standard zsh Installation nach dem Ausführen „bindkey -en“ zeigt es nur gebunden ist, ein zu ^. Vielleicht sollten Sie die zsh Entwickler fragen, warum: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top