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
Hacer de Zsh su shell por defecto
Cambie su shell a /usr/bin/zsh
. Ver Command-line shell#Cambiar su shell por defecto.
~/.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
- 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.
- 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.
-
$HOME/.profile
no forma parte de los archivos de inicio de Zsh y no es originado por Zsh a menos que Zsh sea invocado comosh
oksh
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).
/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
.
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
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
Este artículo o sección necesita ampliación.
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.
- 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.
- 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á:
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.
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/pacman
consistente 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
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.
- 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.
- No utilizar la opción
-P
deprint
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
- 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»
Este artículo o sección es candidato a ser movido a #Consejos y trucos.
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}
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
Desinstalación
Cambie el shell predeterminado antes de eliminar el paquete zsh.
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.
/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