it-swarm-es.tech

¿Qué funciones de zsh usas?

Trabajo mucho en la terminal, así que he aprendido mucho sobre mi Shell preferido, zsh. ¿Qué funciones de zsh utiliza para ser mucho más productivo en el trabajo? Uno de mis favoritos es el autocompletado de varios directorios. Entonces, en lugar de escribir cd /fo{tab}/ba{tab}/ba{tab} Solo puedo hacer cd /fo/ba/ba{tab} ¡y ahorre tantas pulsaciones de teclas!

33
Frew Schmidt

Seguiré con las cosas que, hasta donde yo sé, bash no puede hacer.

  • Terminación elegante. Sí, bash tiene algo de eso, pero zsh conoce más comandos, suele ser más preciso y tiene muchas más posibilidades de configuración.

  • El glob **, Por ejemplo, **/foo Busca archivos llamados foo en subdirectorios de forma recursiva. (Y ***/foo También sigue enlaces simbólicos.) Dos caracteres en lugar de un comando largo find (que es difícil de acertar si algunos nombres de archivos incluyen caracteres especiales como espacios y comillas).

  • Con menos frecuencia, los calificadores glob como en foo*(*) (como foo*, Pero solo retienen archivos ejecutables), foo(.) (solo archivos regulares, no directorios), foo([email protected]) (solo enlaces simbólicos colgantes), foo*(m-5) (solo archivos modificados en los últimos 5 minutos), foo*(om[1]) (el archivo modificado más recientemente), etc.

  • autocd: Al escribir un nombre de directorio como un comando cambia en él (cd o pushd dependiendo de cómo lo haya configurado). ¡El comando cd tiene tres caracteres de más! No puedo usar bash durante más de treinta segundos sin sentir el dolor. También tengo algunas funciones de un solo carácter, como

 función - {
 if [[$ # -eq 0]]; luego 
 cd "$ OLDPWD" 
 else 
 incorporado - "$ @" 
 fi 
} 
  • El zmv incorporado, y
 alias zcp = 'noglob zmv -C' 
 alias zln = 'noglob zmv -L' 
 alias zmv = 'noglob zmv' 
  • Mientras estoy en eso, el noglob incorporado.

  • Las funciones de gancho precmd y preexec: utilizo preexec para configurar el título de mi terminal para incluir el comando en ejecución, y precmd para reemplazar el comando con su salida código. Algo como

 term_title_base = '@% l:% 1 ~' 
 preexec () {
 print -nr $ '\ e] 2;' "$ {(%) term_title_base} $ * "'$\a' 
} 
 precmd () {
 print -nr $ '\ e] 2;'" $ {(%) term_title_base} ($?) "'$\a' 
} 
  • Ctrl + Z:
    • En una línea de comando vacía se ejecuta bg (de modo que Ctrl + Z Ctrl + Z suspende un programa y lo reanuda inmediatamente en segundo plano).
    • En una línea de comando que no esté vacía, suspenda la edición de comando actual: déjeme escribir otro comando, y cuando esa segunda línea de comando termine, recupero el primer comando para editar.
    • Esto usa la siguiente función:
 fancy-ctrl-z () {
 if [[$ # BUFFER -eq 0]]; luego 
 bg 
 zle vuelve a mostrar 
 else 
 zle Push-input 
 fi 
} 
 zle -N fancy -ctrl-z 
 bindkey '^ Z' fancy-ctrl-z 
  • Las opciones más importantes no relacionadas con la finalización: setopt append_history autocd extended_glob no_match

la capacidad de zsh para autocompletar cosas además de archivos y directorios.

Por ejemplo, con el paquete git instalado, git-sh {tab} muestra:

 - comando git - 
 shortlog - resume la salida del registro git 
 show-branch - muestra las ramas y sus confirmaciones 
 show-index - muestra el contenido de un paquete de archivo idx
13
Mark Thalman

Me gustan mucho los alias globales

alias -g L='|less
alias -g DN='>/dev/null'

déjame hacer cosas como

somecommand file arg L

y obtener paginación.

10
hometoast

Como han mencionado otros, el autocompletado de zsh es excelente.

También puede configurar su propio autocompletado para comandos personalizados sin demasiada molestia. Para tabular nombres de usuario completos como argumentos a dedo:

# ~/.zshrc
function userlist {
        reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES

Otras opciones que me gusta tener configuradas:

# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber

Pushd y popd también son bastante útiles.

# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME

Es molesto que las teclas de inicio y finalización no funcionen de forma predeterminada en zsh como lo hacen en otros shells, pero puede solucionarlo.

# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line
7
theotherreceive

Habilite la función de autocompletar cuando use scp en un servidor remoto.

El indicador correcto para mostrar información adicional.

5
Rob Wells