best autosuggestions keyboard terminal zsh terminal-emulator

keyboard - best - zsh-autosuggestions



Las teclas Inicio/Fin en zsh no funcionan con masilla (6)

Estos enlaces simplemente no parecen ser parte de los enlaces predeterminados establecidos en el modo emacs.

al ejecutar "where-is beginning-line" en mi instalación predeterminada de zsh después de ejecutar "bindkey -e", muestra que solo está obligado a ^ a. Tal vez deberías preguntarle a los desarrolladores de zsh por qué :-)

Estoy ejecutando zsh como el shell por defecto en un cuadro de Ubuntu, y todo funciona bien usando gnome-terminal (que hasta donde sé emula xterm). Cuando inicio sesión desde un cuadro de Windows a través de ssh y masilla (que también emula xterm), de repente, las teclas de inicio / final ya no funcionan.

Pude resolver eso añadiendo estas líneas a mi archivo zshrc ...

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

... pero aún me pregunto qué sucede aquí. ¿Alguna idea?


Parece una cosa masilla. Gnome-terminal envía los códigos ^[OH y ^[OF para Home y End respectivamente, mientras que putty envía ^[[1~ y ^[[4~ . Hay una opción en putty para cambiar las teclas Inicio / Fin del modo estándar al modo rxvt , y eso parece arreglar la tecla Inicio, pero no la tecla Finalizar (que ahora envía ^[Ow ). Supongo que es hora de presentar un informe de error en alguna parte ... :-)


En el cuadro de diálogo de configuración de PuTTY, vaya a Conexión -> Datos y escriba linux en la cadena de tipo Terminal antes de conectarse.


la respuesta apropiada que debería ser portable en todas las distribuciones (no necesariamente en todas las versiones de zsh, ymmv aquí) es usar la utilidad zkbd helper desde zkbd.

Definición del teclado
La gran cantidad de combinaciones posibles de teclados, estaciones de trabajo, terminales, emuladores y sistemas de ventanas hace que sea imposible que zsh tenga enlaces de teclas incorporados para cada situación. La utilidad zkbd, que se encuentra en Funciones / Varios, puede ayudarlo a crear rápidamente enlaces de teclas para su configuración.

Ejecute zkbd como una función autocargada, o como un script de shell:

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

Cuando ejecuta zkbd, primero le pide que ingrese su tipo de terminal; si el valor predeterminado que ofrece es correcto, simplemente presione regresar. Luego, le pide presionar varias teclas diferentes para determinar las características de su teclado y terminal; zkbd te advierte si encuentra algo fuera de lo común, como una tecla Delete que no envía ^ H ni ^.

Las teclas leídas por zkbd se registran como una definición para una matriz asociativa llamada clave, escrita en un archivo en el subdirectorio .zkbd dentro de su directorio HOME o ZDOTDIR. El nombre del archivo se compone de los parámetros TERM, VENDOR y OSTYPE, unidos por guiones.

Puede leer este archivo en su .zshrc u otro archivo de inicio con la source'' or ''. comandos, luego referencia el parámetro clave en los comandos bindkey, como este:

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

Tenga en cuenta que para que ''autoload zkbd'' funcione, el archivo zkdb debe estar en uno de los directorios nombrados en su matriz fpath (consulte zshparam (1)). Este debería ser el caso si tiene una instalación zsh estándar; si no es así, copie Functions / Misc / zkbd en un directorio apropiado.

ver man -P "less -p ''keyboard definition''" zshcontrib, o buscar en meta- zshall


Esto es trabajo para mí

bindkey -v bindkey ''/eOH'' beginning-of-line bindkey ''/eOF'' end-of-line


Encontré que es una combinación:

Uno

Los desarrolladores de ZSH no creen que ZSH deba definir las acciones de las teclas Inicio , Fin , Supr , ...

Debian y Ubuntu corrigen esto al definir las acciones normales que el usuario promedio esperaría en el /etc/zsh/zshrc global /etc/zsh/zshrc . Siguiendo el código relevante (es el mismo en Debian y 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

Entonces, si te estás conectando a un buzón de Debian o Ubuntu, no tienes que hacer nada. Todo debería funcionar automágicamente (si no, ver abajo).

Pero ... si te estás conectando a otra caja (por ejemplo, FreeBSD), es posible que no haya un zshrc predeterminado fácil de usar. La solución es, por supuesto, agregar las líneas del Debian / Ubuntu zshrc a su propio .zshrc .

Dos

Putty envía xterm como tipo de terminal al host remoto. Pero se equivoca en alguna parte y no envía los códigos de control correctos para Inicio , Fin , ... que uno esperaría de un xterm . O no se espera que un terminal xterm envíe esos o lo que sea ... (La tecla Del funciona en xterm , sin embargo, si la configura en ZSH). También tenga en cuenta que sus teclas Numpad actúan de forma divertida en Vim, por ejemplo, con terminal xterm .

La solución es configurar Putty para enviar otro tipo de terminal. He probado xterm-color y linux . xterm-color solucionó el problema de Inicio / Fin , pero el Numpad seguía siendo divertido. Configurarlo en linux solucionó ambos problemas.

Puede configurar el tipo de terminal en Masilla en Conexión -> Datos. No se .zshrc tentado a establecer su tipo de terminal en su .zshrc con export TERM=linux , eso es simplemente incorrecto. El tipo de terminal debe ser especificado por su aplicación de terminal. De modo que si, por ejemplo, se conecta desde un Mac con un cliente Mac SSH, puede configurar su propio tipo de terminal.

Tenga en cuenta que TERM especifica su tipo de terminal y no tiene nada que ver con el host al que se está conectando. Puedo configurar mi tipo de terminal a linux en Putty y conectarme a servidores FreeBSD sin problemas.

Entonces, arregla estas dos cosas y deberías estar bien :)