Zsh

Zsh es un potente shell que funciona tanto como shell interactivo como intérprete de lenguajes de scripting. Aunque es compatible con el sh de POSIX (no por defecto, sólo si se emite emulate sh), ofrece ventajas como la finalización mejorada del tabulador y el globbing.

El FAQ de Zsh ofrece más razones para usar Zsh.

Instalación

Antes de empezar, los usuarios pueden querer ver qué shell se está usando actualmente:

$ echo $SHELL

Instalar el paquete zsh. Para obtener definiciones de finalización adicionales, instale también el paquete zsh-completions.

Configuración inicial

Asegúrese de que Zsh se ha instalado correctamente ejecutando lo siguiente en un terminal:

$ zsh

Ahora debería ver zsh-newuser-install, que le guiará a través de alguna configuración básica. Si quiere saltarse esto, pulse q. Si no lo ve, puede invocarlo manualmente con:

$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Nota: Asegúrese de que el tamaño de su terminal es de al menos 72×15, de lo contrario zsh-newuser-install no se ejecutará.

Hacer de Zsh su shell por defecto

Cambie su shell a /usr/bin/zsh. Ver Command-line shell#Cambiar su shell por defecto.

Consejo: Si se reemplaza bash, los usuarios pueden querer mover parte del código de ~/.bashrc a ~/.zshrc (por ejemplo, el prompt y los alias) y de ~/.bash_profile a ~/.zprofile (por ejemplo, el código que inicia el sistema X Window).

Archivos de inicio/apagado

Consejo:

  • Vea A User’s Guide to the Z-Shell para una explicación sobre los shells interactivos y de inicio de sesión, y qué poner en sus archivos de inicio.
  • Podría considerar la implementación de una ruta estándar para sus archivos de configuración de Zsh.
Nota:

  • Si $ZDOTDIR no se establece, $HOME se utiliza en su lugar.
  • Si la opción RCS no está establecida en ninguno de los archivos, no se leerá ningún archivo de configuración después de ese archivo.
  • Si la opción GLOBAL_RCS no está establecida en ninguno de los archivos, no se leerá ningún archivo de configuración global (/etc/zsh/*) después de ese archivo.

Cuando se inicie, Zsh leerá los comandos de los siguientes archivos en este orden por defecto, siempre que existan.

  • /etc/zsh/zshenv Se utiliza para establecer variables de entorno para todos los usuarios; no debe contener comandos que produzcan salida o que supongan que el shell está conectado a un TTY. Cuando este archivo existe siempre será leído, esto no puede ser anulado.
  • $ZDOTDIR/.zshenv Utilizado para establecer las variables de entorno del usuario; no debe contener comandos que produzcan salida o asuman que el shell está conectado a un TTY. Cuando este archivo existe siempre será leído.
  • /etc/zsh/zprofile Utilizado para ejecutar comandos al inicio para todos los usuarios, será leído cuando se inicie como un shell de inicio de sesión. Tenga en cuenta que en Arch Linux, por defecto contiene una línea que las fuentes /etc/profile. Vea la advertencia más abajo antes de querer eliminarlo.
    • /etc/profile Este archivo debe ser utilizado por todos los shells compatibles con POSIX al iniciar la sesión: establece $PATH y otras variables de entorno y configuraciones específicas de la aplicación (/etc/profile.d/*.sh) al iniciar la sesión.
  • $ZDOTDIR/.zprofile Se utiliza para ejecutar los comandos del usuario al inicio, se leerá cuando se inicie como un shell de inicio de sesión. Normalmente se utiliza para autoiniciar sesiones gráficas y para establecer variables de entorno para toda la sesión.
  • /etc/zsh/zshrc Se utiliza para establecer la configuración del shell interactivo y ejecutar comandos para todos los usuarios, se leerá cuando se inicie como shell interactivo.
  • $ZDOTDIR/.zshrc Se utiliza para establecer la configuración del shell interactivo del usuario y ejecutar comandos, se leerá cuando se inicie como shell interactivo.
  • /etc/zsh/zlogin Se utiliza para ejecutar comandos para todos los usuarios al final del progreso inicial, se leerá cuando se inicie como un shell de inicio de sesión.
  • $ZDOTDIR/.zlogin Se utiliza para ejecutar los comandos del usuario al final del progreso inicial, se leerá cuando se inicie como un shell de inicio de sesión. Normalmente se utiliza para autoiniciar las utilidades de la línea de comandos. No debe usarse para autoiniciar sesiones gráficas, ya que en este punto la sesión podría contener configuración destinada sólo a un shell interactivo.
  • $ZDOTDIR/.zlogout Se usa para ejecutar comandos cuando un shell de inicio de sesión sale.
  • /etc/zsh/zlogout Se usa para ejecutar comandos para todos los usuarios cuando un shell de inicio de sesión sale.

Ver la representación gráfica.

Nota:

  • $HOME/.profile no forma parte de los archivos de inicio de Zsh y no es originado por Zsh a menos que Zsh sea invocado como sh o ksh y se inicie como un shell de inicio de sesión. Para más detalles sobre los modos de compatibilidad de sh y ksh consulte zsh(1) § COMPATIBILIDAD.
  • Las rutas usadas en el paquete zsh de Arch son diferentes de las usadas por defecto en las páginas man (FS#48992).
Advertencia: No elimine la línea por defecto en /etc/zsh/zprofile, de lo contrario romperá la integridad de otros paquetes que proporcionan algunos scripts en /etc/profile.d/.

Configurar Zsh

Aunque Zsh es utilizable fuera de la caja, es casi seguro que no está configurado de la forma en que la mayoría de los usuarios le gustaría usarlo. Pero debido a la gran cantidad de personalización disponible en Zsh, la configuración de Zsh puede ser una experiencia desalentadora y que consume tiempo.

Simple .zshrc

A continuación se incluye un archivo de configuración de ejemplo. Proporciona un conjunto decente de opciones por defecto, así como dar ejemplos de muchas maneras que Zsh se puede personalizar. Para usar esta configuración guárdela como un archivo llamado .zshrc.

Consejo: Aplique los cambios sin necesidad de cerrar la sesión y volver a entrar ejecutando source ~/.zshrc.

Aquí tiene un sencillo .zshrc:

~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Esto establecerá el prompt por defecto al tema walterseprompt walters

Vea #Temas del prompt para más detalles sobre el sistema de temas del prompt.

Configuración de $PATH

Zsh vincula la variable PATH a un array path. Se sincronizan automáticamente. Esto nos permite manipular fácilmente PATH simplemente modificando el array. Ver A User’s Guide to the Z-Shell para más detalles.

La línea typeset -U PATH path, donde el -U significa único, instruye al shell para descartar duplicados tanto de $PATH como de $path:

~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /otras/cosas/in/path "$path")export PATH

Completar comandos

Tal vez la característica más convincente de Zsh es su avanzada capacidad de autocompletar. Como mínimo, habilite el autocompletado en .zshrc. Para habilitar el autocompletado, añada lo siguiente a su ~/.zshrc:

~/.zshrc
autoload -Uz compinitcompinit

La configuración anterior incluye el completado de nombres de host ssh/scp/sftp pero para que esta característica funcione, los usuarios no deben habilitar el hash de nombres de host de ssh (es decir.es decir, la opción HashKnownHosts en la configuración del cliente ssh).

Para el autocompletado con una interfaz dirigida por flechas, añada lo siguiente a:

~/.zshrc
zstyle ':completion:*' menu select

Para activar el menú, pulse Tab dos veces.

Para el autocompletado de los interruptores de la línea de comandos para los alias, añada lo siguiente a:

~/.zshrc
setopt COMPLETE_ALIASES

Para habilitar el autocompletado de los entornos privilegiados en los comandos privilegiados (e.p. ej., si completa un comando que comienza con sudo, los scripts de finalización también intentarán determinar sus finalizaciones con sudo), incluya:

~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Advertencia: Esto permitirá que los scripts de finalización de Zsh ejecuten comandos con privilegios sudo. No debe habilitar esto si utiliza scripts de autocompletado no confiables.
Nota: Este tipo especial de finalización consciente del contexto sólo está disponible para un pequeño número de comandos.

Enlaces de teclas

Zsh no utiliza readline, en su lugar utiliza su propio y más potente Zsh Line Editor (ZLE). No lee /etc/inputrc o ~/.inputrc. Lea Una mirada más cercana al editor de línea zsh y la creación de widgets personalizados para una introducción a la configuración de ZLE.

ZLE tiene un modo Emacs y un modo vi. Si una de las variables de entorno VISUAL o EDITOR contiene la cadena vi entonces se utilizará el modo vi; de lo contrario, se utilizará por defecto el modo Emacs. Establezca el modo explícitamente con bindkey -e o bindkey -v respectivamente para el modo Emacs o el modo vi.

Los enlaces de teclas se asignan asignando una secuencia de escape que coincida con una pulsación de tecla a un widget ZLE. Los widgets disponibles, con descripciones de sus acciones y sus combinaciones de teclas por defecto, están listados en zshzle(1) § WIDGETS ESTÁNDAR y zshcontrib(1) § FUNCIONES ZLE.

La forma recomendada de establecer combinaciones de teclas en Zsh es utilizando las capacidades de cadena de terminfo(5). Por ejemplo:

~/.zshrc
# crear un hash compatible con zkbd;# para añadir otras claves a este hash, ver: man 5 terminfotypeset -g -A keykey="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"# setup key accordingly}" ]] && bindkey -- "${key}" beginning-of-line}" ]] && bindkey -- "${key}" fin de línea}" ]] && bindkey -- "${key}" overwrite-mode}" ]] && bindkey -- "${key}" backward-delete-char}" ]] && bindkey -- "${key}" delete-char}" ]] && bindkey -- "${key}" up-line-or-history}" ]] && bindkey -- "${key}" down-line-or-history}" ]] && bindkey -- "${key}" backward-char}" ]] && bindkey -- "${key}" forward-char}" ]] && bindkey -- "${key}" beginning-of-buffer-or-history}" ]] && bindkey -- "${key}" end-of-buffer-or-history}" ]] && bindkey -- "${key}" reverse-menu-complete# Por último, asegúrese de que el terminal está en modo aplicación, cuando zle está# activo. Sólo entonces son válidos los valores de $terminfo.if (( ${+terminfo} && ${+terminfo} )); thenautoload -Uz add-zle-hook-widgetfunction zle_application_mode_start { echoti smkx }function zle_application_mode_stop { echoti rmkx }add-zle-hook-widget -Uz zle-line-init zle_application_mode_startadd-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi

Búsqueda del historial

Es necesario configurar la matriz key y asegurarse de que ZLE entra en modo de aplicación para utilizar las siguientes instrucciones; ver #Encuadernación de teclas.

Para habilitar la búsqueda en el historial añade estas líneas al archivo .zshrc:

~/.zshrc
autoload -Uz up-line-or-beginning-search down-line-or-beginning-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-search}" ]] && bindkey -- "${key}" up-line-or-beginning-search}" ]] && bindkey -- "${key}" down-line-or-beginning-search

Al hacer esto, sólo se mostrarán los comandos pasados que coincidan con la línea actual hasta la posición actual del cursor cuando se pulsen las teclas Up o Down.

Los modificadores Shift, Alt, Ctrl y Meta

los terminales compatibles con xterm pueden utilizar definiciones de teclas extendidas de user_caps(5). Son combinaciones de Shift, Alt, Ctrl y Meta junto con Up, Down, Left, Right, PageUp, PageDown, Home, End o Del. Consulte la fuente de zkbd para obtener una lista de nombres recomendados para las teclas modificadoras y las combinaciones de teclas.

Por ejemplo, para que Ctrl+Left se mueva al principio de la palabra anterior y Ctrl+Right se mueva al principio de la siguiente palabra:

~/.zshrc
key="${terminfo}"key="${terminfo}"}" ]] && bindkey -- "${key}" backward-word}" ]] && bindkey -- "${key}" forward-word

Prompts

Zsh ofrece las opciones de utilizar un tema de prompt o, para los usuarios que no estén satisfechos con los temas (o quieran ampliar su utilidad), la posibilidad de construir un prompt personalizado.

Temas de prompt

Los temas de prompt son una forma rápida y sencilla de configurar un prompt de color en Zsh. Ver zshcontrib(1) § PROMPT THEMES para información sobre los temas de prompt y cómo escribir su propio tema.

Para usar un tema, asegúrese de que el sistema de temas de prompt está configurado para autocargarse en .zshrc. Esto puede hacerse añadiendo estas líneas a:

~/.zshrc
autoload -Uz promptinitpromptinit

Los temas prompt disponibles se listan ejecutando el comando:

$ prompt -l

Por ejemplo, para utilizar el tema walters, introduzca:

$ prompt walters

Para obtener una vista previa de todos los temas disponibles, utilice este comando:

$ prompt -p
Instalación manual de los temas del prompt

Es posible instalar los temas manualmente, sin herramientas externas del administrador de configuración. Para una instalación local, primero cree una carpeta y añádala a la matriz fpath, por ejemplo:

$ mkdir ~/.zprompts$ fpath=("$HOME/.zprompts" "$fpath")

Ahora cree un enlace simbólico de su archivo de tema en esta carpeta:

$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup

Si en cambio deseas instalar un tema de forma global, haz:

# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup

Ahora deberías poder activarlo usando:

$ prompt mytheme

Si todo funciona, puedes editar tu .zshrc en consecuencia.

Añadir temas de prompt sin un archivo separado para cada uno

Además de añadir un tema de prompt a través de su propio archivo, es posible añadir temas desde dentro de otro archivo (como tu .zshrc), por ejemplo:

~/.zshrc
# Cargar promptinitautoload -.Uz promptinit && promptinit# Definir el themeprompt_mytheme_setup() { PS1="%~%#"}# Añadir el tema a promptsysprompt_themes+=( mytheme )# Cargar el themeprompt mytheme

Customized prompt

Tango-view-fullscreen.pngEste artículo o sección necesita ampliación.Tango-view-fullscreen.png

Razón: Añadir un simple ejemplo de PROMPT incoloro. (Discutir en Talk:Zsh#)

Además de un prompt primario del lado izquierdo PS1 (PROMPT, prompt) que es común a todos los shells, Zsh también soporta un prompt del lado derecho RPS1 (RPROMPT). Estas dos variables son las que querrás establecer con un valor personalizado.

Otros prompt de propósito especial, como PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) y SPROMPT, se explican en zshparam(1) § PARÁMETROS UTILIZADOS POR EL SHELL.

Todos los prompt pueden personalizarse con escapes de prompt. Los escapes de prompt disponibles están listados en zshmisc(1) § EXPANSIÓN DE SECUENCIAS DE PROMPT.

Colors

Zsh establece los colores de forma diferente a Bash, no es necesario utilizar las enrevesadas secuencias de escape ANSI o las capacidades de terminal de terminfo(5). Zsh proporciona convenientes escapes para establecer el color de primer plano, el color de fondo y otros efectos visuales; ver zshmisc(1) § Efectos visuales para una lista de ellos y sus descripciones.

Los colores pueden ser especificados usando un entero decimal, el nombre de uno de los ocho colores más ampliamente soportados o como un # seguido de un triplete RGB en formato hexadecimal. Ver la descripción de fg=colour en zshzle(1) § RESALTADO DE CARACTERES para más detalles.

La mayoría de los terminales soportan los siguientes colores por nombre:

Nombre Número
black 0
red 1
green 2
yellow 3
blue 4
magenta 5
cyan 6
white 7

Los números de color 0-255 para los emuladores de terminal compatibles con xterm 256 colores se pueden encontrar en la tabla xterm-256color.

Con una variable de entorno TERM correctamente configurada, el número máximo de colores soportado por el terminal puede encontrarse en la base de datos terminfo(5) utilizando echoti colors. En el caso de los colores de 24 bits, compruebe también la variable de entorno COLORTERM con print $COLORTERM. Si devuelve 24bit o truecolor entonces su terminal soporta 16777216 (224) colores incluso si terminfo muestra un número menor.

Nota:

  • Los colores 0-15 pueden diferir entre los emuladores de terminal y sus esquemas de color utilizados.
  • Muchos emuladores de terminal muestran negrita con un color más brillante.
Consejo:

  • Los escapes de los mensajes pueden probarse con el comando print -P "prompt escapes", por ejemplo:
    $ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
  • Si se utilizan colores de 24 bits, es posible que se quiera cargar el módulo zsh/nearcolor en terminales que no los soporten. Por ejemplo:
    }" -eq '16777216' ]] || zmodload zsh/nearcolor

    Ver zshmodules(1) § EL MÓDULO ZSH/NEARCOLOR para detalles sobre el módulo zsh/nearcolor.

Ejemplo

Este es un ejemplo de prompt de dos caras:

PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# 'RPROMPT=''

Y así es como se mostrará:

nombredeusuario@host ~ %

Para utilizar colores de la gama 16-255 y color verdadero de 24 bits, puede utilizar el número de 0 a 255 asignado al color deseado y su código de color hexadecimal, respectivamente:

PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# 'RPROMPT=''
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# 'RPROMPT=''

Muestra .zshrc

  • Para obtener la misma configuración que las versiones ISO mensuales (que utilizan Zsh por defecto), instale grml-zsh-config. Incluye los muchos ajustes y optimizaciones avanzadas de grml.
  • https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – configuración básica, con prompt dinámico y título de ventana/hardinfo.
  • https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc con múltiples características, asegúrese de revisar los comentarios en él. Características notables: función de confirmación para asegurarse de que el usuario quiere ejecutar poweroff, reiniciar o hibernar, soporte para GIT en el prompt (hecho sin vcsinfo), completado de pestañas con menú, impresión del comando actual ejecutado en la barra de título de la ventana y más.

Ver dotfiles#User repositories para más.

Consejos y trucos

Autostart X at login

Ver xinit#Autostart X at login.

Restablecer la configuración de la terminal después de que un programa salga anormalmente

Muchos programas cambian el estado de la terminal, y a menudo no restauran la configuración de la terminal al salir anormalmente (por ejemplo, cuando se bloquea o encuentra SIGINT).

Esto puede resolverse normalmente ejecutando reset(1):

$ reset

Las siguientes secciones describen formas de evitar la necesidad de restablecer manualmente la terminal.

El comando ttyctl

El comando ttyctl puede utilizarse para «congelar/descongelar» la terminal. Para congelar el shell interactivo en el lanzamiento, utilice lo siguiente:

~/.zshrc
ttyctl -f

Restablecimiento de la terminal con secuencias de escape

El conjunto de caracteres de dibujo alineado alternativo puede arruinar la terminal de una manera que ttyctl no puede evitar.

Una solución sencilla es dar salida a las secuencias de escape que reinician la terminal desde la función hook precmd, para que se ejecuten cada vez antes de que se dibuje el prompt. Por ejemplo, utilizando la secuencia de escape \e] && (( ${#dirstack} == 0 )); thendirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")}" ]] && cd -- "${dirstack}"fichpwd_dirstack() {print -l -- "$PWD" "${(u)dirstack}" > "$DIRSTACKFILE"}add-zsh-hook -Uz chpwd chpwd_dirstackDIRSTACKSIZE='20'setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME## Remove duplicate entriessetopt PUSHD_IGNORE_DUPS## This reverts the +/- operators.setopt PUSHD_MINUS

Now use

$ dirs -v

to print the dirstack. Use cd -<NUM> para volver a una carpeta visitada. Utilizar el autocompletado después del guión. Esto resulta muy útil si se utiliza el menú de autocompletado.

Nota: Esto no funcionará si tiene más de una sesión de zsh abierta, e intenta cd, debido a un conflicto en ambas sesiones escribiendo en el mismo archivo.

cdr

cdr le permite cambiar el directorio de trabajo a un directorio de trabajo anterior de una lista mantenida automáticamente. Almacena todas las entradas en archivos que se mantienen a través de las sesiones y (por defecto) entre los emuladores de terminal en la sesión actual.

Ver zshcontrib(1) § RECORDAR DIRECTORIOS RECIENTES para las instrucciones de configuración.

Comando Help

A diferencia de Bash, Zsh no habilita un comando help incorporado, en su lugar proporciona run-help. Por defecto run-help es un alias de man, puede ser ejecutado manualmente anteponiéndolo a un comando o puede ser invocado para el comando actualmente escrito con los atajos de teclado Alt+h o Esc h.

Como por defecto es sólo un alias de man, sólo funcionará en comandos externos. Para mejorar su funcionalidad, de forma que funcione en los buildins del shell y otras características del mismo, es necesario utilizar la función run-help. Vea zshcontrib(1) para más información sobre la función run-help y sus funciones asistentes.

Primero cargue la función run-help y luego elimine el alias run-help existente. Para mayor comodidad, help puede tener un alias de run-help. Por ejemplo, añada lo siguiente a su zshrc:

autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias help=run-help

Las funciones auxiliares tienen que habilitarse por separado:

autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn

Por ejemplo, el comando run-help git commit abrirá ahora la página de manual git-commit(1) en lugar de git(1).

Realización persistente

Típicamente, compinit no encontrará automáticamente nuevos ejecutables en el $PATH. Por ejemplo, después de instalar un nuevo paquete, los archivos en /usr/bin/ no se incluirían inmediata o automáticamente en la finalización. Por lo tanto, para que se incluyan estos nuevos ejecutables, se ejecutaría:

$ rehash

Este "refrito" puede configurarse para que ocurra automáticamente. Simplemente incluya lo siguiente en su zshrc:

~/.zshrc
zstyle ':completion:*' rehash true

On-demand rehash

Al igual que en el caso anterior, sin embargo pacman puede ser configurado con ganchos para solicitar automáticamente un rehash, lo que no incurre en la penalización de rendimiento del rehash constante como el anterior. Para habilitar esto, cree el directorio /etc/pacman.d/hooks, y un directorio /var/cache/zsh, luego cree un archivo hook:

/etc/pacman.d/hooks/zsh.hook
Operación = InstallOperation = UpgradeOperation = RemoveTipo = PathTarget = usr/bin/*Depends = zshWhen = PostTransactionExec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman

Esto mantiene la fecha de modificación del archivo /var/cache/zsh/pacmanconsistente con la última vez que se instaló, actualizó o eliminó un paquete. Entonces, zsh debe ser engatusado para rehacer su propia caché de comandos cuando se desactualiza, añadiendo a su ~/.zshrc:

~/.zshrc
zshcache_time="$(fecha +%s%N) "autoload -Uz add-zsh-hookrehash_precmd() { if ]; then local paccache_time="$(fecha -r /var/cache/zsh/pacman +%s%N)" if (( zshcache_time < paccache_time )); then rehash zshcache_time="$paccache_time" fi fi}add-zsh-hook -Uz precmd rehash_precmd

Si el hook precmd se activa antes de que /var/cache/zsh/pacman se actualice, la finalización puede no funcionar hasta que se inicie un nuevo prompt. Ejecutar un comando vacío, por ejemplo, pulsando enter, debería ser suficiente.

Alternativa de refrito bajo demanda utilizando SIGUSR1

Al igual que en el caso anterior, sin embargo el archivo de ganchos tiene el siguiente aspecto:

/etc/pacman.d/hooks/zsh-rehash.hook
Operación = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1
Warning: Esto envía SIGUSR1 a todas las instancias zsh en ejecución. Tenga en cuenta que el comportamiento por defecto para SIGUSR1 es terminar, así que cuando configure esto por primera vez, todas las instancias zsh en ejecución de todos los usuarios (incluyendo los shells de inicio de sesión) terminarán si no han recurrido a la trampa de abajo.
~/.zshrc
TRAPUSR1() { rehash }

La trampa de la función de arriba puede ser reemplazada con una trampa de lista trap 'rehash' USR1. Ver zshmisc(1) § Funciones Trap para las diferencias entre los tipos de traps.

Este método instantáneamente rehash todas las instancias de zsh, eliminando la necesidad de presionar enter para disparar precmd.

Enlazar tecla a aplicación ncurses

Enlaza una aplicación ncurses a una tecla, pero no aceptará interacción. Utilice la variable BUFFER para que funcione. El siguiente ejemplo permite a los usuarios abrir ncmpcpp usando Alt+\:

~/.zshrc
ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;

\a. Por ejemplo:

$ print -n '\e]2;My xterm title\a'

pondrá el título a

My xterm title

Una forma sencilla de tener un título dinámico es poner el título en las funciones hook precmd y preexec. Ver zshmisc(1) § Funciones de gancho para una lista de funciones de gancho disponibles y sus descripciones.

Al usar print -P puede aprovechar adicionalmente los escapes del prompt de Zsh.

Consejo:

  • La impresión de títulos puede dividirse en varios comandos siempre que sean secuenciales.
  • GNU Screen envía el título de xterm al hardstatus (%h). Si se desea utilizar los escapes de cadena de Screen (por ejemplo, para los colores) se debe establecer el hardstatus con la secuencia de escape \e_\e\. De lo contrario, si se utilizan escapes de cadena en \e]2;\a, el emulador de terminal obtendrá un título confuso debido a que es incapaz de interpretar los escapes de cadena de Screen.
Nota:

  • No utilizar la opción -P de print cuando se impriman variables para evitar que sean analizadas como escapes de prompt.
  • Utilice la bandera de expansión de parámetros q al imprimir variables para evitar que se analicen como secuencias de escape.
~/.zshrc
autoload -Uz add-zsh-hookfunction xterm_title_precmd () {print -Pn -- '\e]2;%n@%m %~\a'] &&print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-}\e'}function xterm_title_preexec () {print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1\a"] && { print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-} %# ' && print -n -- "${(q)1}\e\e"; }}if ]; thenadd-zsh-hook -Uz precmd xterm_title_precmd-zsh-hook -Uz preexec xterm_title_preexecfi

Título de la pestaña del emulador de terminal

Algunos emuladores de terminal y multiplexores admiten la configuración del título de la pestaña. Las secuencias de escape dependen del terminal:

Terminal Secuencias de escape Descripción
Pantalla GNU \ek\e\ Título de la ventana (%t).
Consola \e]30;\a Título de la pestaña de la consola.

Detección del entorno de la shell

Vea un repositorio sobre la detección del entorno de la shell para las pruebas para detectar el entorno de la shell. Esto incluye login/interactive shell, sesión Xorg, TTY y sesión SSH.

Equivalente a /dev/tcp: ztcp

Utiliza el módulo zsh/net/tcp:

$ zmodload zsh/net/tcp

Ahora puedes establecer conexiones TCP:

$ ztcp example.com 80

Corte para salir del shell en línea de comandos parcial

Por defecto, Ctrl+d no cerrará tu shell si la línea de comandos está llena, esto lo arregla:

.zshrc
exit_zsh() { exit }zle -N exit_zshbindkey '^D' exit_zsh

Extensiones de terceros

Marcos de configuración

Nota: Los marcos introducen un nivel de abstracción y complejidad. Pueden, y a menudo lo hacen, introducir un comportamiento indefinido. En caso de rotura del shell, el primer paso de depuración debe ser volver al shell simple.
  • oh-my-zsh – Un marco popular, impulsado por la comunidad para la gestión de su configuración Zsh. Viene con un montón de funciones útiles, ayudantes, plugins, temas.

https://github.com/ohmyzsh/ohmyzsh || oh-my-zsh-gitAUR

  • Prezto – Un marco de configuración para Zsh. Viene con módulos, enriqueciendo el entorno de la interfaz de línea de comandos con valores predeterminados sanos, alias, funciones, autocompletado y temas de aviso.

https://github.com/sorin-ionescu/prezto || prezto-gitAUR

  • ZIM – Un marco de configuración con una velocidad vertiginosa y extensiones modulares. Zim es muy fácil de personalizar, y viene con un rico conjunto de módulos y características sin comprometer la velocidad o la funcionalidad.

https://github.com/zimfw/zimfw || zsh-zim-gitAUR

Gestores de plugins

  • Antibody – Un gestor de plugins centrado en el rendimiento, similar a Antigen.

https://github.com/getantibody/antibody || antibodyAUR

  • zinit (antes «zplugin») – Gestor de plugins Zsh flexible con fpath limpio, informes, gestión de finalización, modo turbo

https://github.com/zdharma/zinit || zsh-zplugin-gitAUR

  • Antigen – Un gestor de plugins para Zsh, inspirado en oh-my-zsh y vundle. ABANDONADO

https://github.com/zsh-users/antigen || antigen-gitAUR

  • zgen – Un gestor de plugins ligero y sencillo para Zsh. ABANDONADO

https://github.com/tarjoilija/zgen || zgen-gitAUR

  • zplug – Un gestor de plugins de nueva generación para Zsh. ABANDONADO

https://github.com/zplug/zplug || zplugAUR

Resaltado de sintaxis y autosugestiones tipo Fish

Fish proporciona un resaltado de sintaxis y autosugestiones muy potentes. Para usar ambos en Zsh, puedes instalar zsh-syntax-highlighting, zsh-autosuggestions y, finalmente, obtener uno o ambos scripts proporcionados desde tu zshrc:

source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

El manejador de «comando no encontrado»

Tango-go-next.pngEste artículo o sección es candidato a ser movido a #Consejos y trucos.Tango-go-next.png

Notas: La función personalizada que utiliza pacman -F no es una «extensión de terceros». Sólo las cosas del pkgfile pertenecen a esta sección. (Discutir en Talk:Zsh#)

pacman -F «command not found» handler

pacman incluye funcionalidad para buscar paquetes que contengan un archivo. El siguiente manejador de comando no encontrado utilizará pacman directamente para buscar paquetes coincidentes cuando se ejecute un comando desconocido.

~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh: command not found: %s' "$cmd" # imprimir comando no encontrado lo antes posible, luego buscar paquetesficheros=(${(f)"$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if (( ${#ficheros}); thenprintf '\r%s puede encontrarse en los siguientes paquetes:\n' "$cmd "local res=() repo paquete versión archivopara archivo en "$archivos"; dores=("${(0)archivo}")repo="$res "paquete="$res "versión="$res "archivo="$res "printf ' %s/%s %s: /%s\n' "$repo" "$paquete" "$versión" "$archivo "doneelseprintf '\n'fireturn 127}
Nota: La base de datos de archivos de pacman está separada de la base de datos de sincronización normal y debe ser obtenida usando pacman -Fy. Consulte pacman#Search for a package that contains a specific file para obtener más detalles.

pkgfile «command not found» handler

pkgfile incluye un archivo de script Zsh que proporciona una función command_not_found_handler que buscará automáticamente en la base de datos de pkgfile cuando se introduzca un comando no reconocido.

Necesita el código fuente del script para activarlo. Por ejemplo:

~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Nota: La base de datos de pkgfile puede necesitar ser actualizada antes de que esto funcione. Consulte pkgfile#Installation para obtener más detalles.

Desinstalación

Cambie el shell predeterminado antes de eliminar el paquete zsh.

Advertencia: Si no se sigue el siguiente procedimiento, los usuarios pueden dejar de tener acceso a un shell que funcione.

Ejecute el siguiente comando:

$ chsh -s /bin/bash user

Utilícelo para todos los usuarios con zsh configurado como su shell de inicio de sesión (incluido el root si es necesario). Una vez completado, el paquete zsh puede ser eliminado.

Alternativamente, cambie el shell por defecto de nuevo a Bash editando /etc/passwd como root.

Advertencia: Se recomienda encarecidamente utilizar vipw(8) al editar /etc/passwd ya que ayuda a evitar entradas no válidas y/o errores de sintaxis.

Por ejemplo, cambie lo siguiente:

username:x:1000:1000:Full Name,,,:/home/username:/usr/bin/zsh

Por esto:

username:x:1000:1000:Full Name,,,:/home/username:/bin/bash

Vea también

Deja una respuesta

Tu dirección de correo electrónico no será publicada.