Quali funzionalità di zsh usi? [chiuso]


33

Faccio molto lavoro nel terminal, quindi ho imparato molto sulla mia shell preferita, zsh. Quali caratteristiche di zsh usi per renderti molto più produttivo sul lavoro? Uno dei miei preferiti è il completamento automatico multi-dir. Quindi, invece di digitare, cd /fo{tab}/ba{tab}/ba{tab}posso semplicemente fare cd /fo/ba/ba{tab}e salvare tante sequenze di tasti!


2
non sapevo di quella caratteristica, dovrò provare quella!
Roy Rico,

1
Quale opzione è il completamento automatico di quella directory?
hometoast,

Risposte:


50

Ho appena trovato questo piccolo gioiello:

cd old new

Questa forma di cdsostituisce tutte le occorrenze di oldnel percorso completo della directory presente con newe cerca di cambiare la directory di lavoro nel percorso risultante.

Ad esempio, se la tua directory di lavoro è /home/larry/code/backrub/servere vuoi passare a /home/sergei/code/backrub/server, tutto ciò che devi fare è:

cd larry sergei

7
Ok, questo regola.
hometoast,

21

Terrò cose che, per quanto ne so, Bash non può fare.

  • Completamento operato. Sì, bash ne ha una parte, ma zsh ha più comandi, è spesso più preciso e ha molte più possibilità di configurazione.

  • Il **glob, ad esempio, **/foocerca fooricorsivamente i file chiamati nelle sottodirectory. (E ***/foosegue anche i collegamenti simbolici.) Due caratteri anziché un findcomando lungo (che è difficile ottenere se alcuni nomi di file includono caratteri speciali come spazi e virgolette).

  • Meno spesso, i qualificatori glob come in foo*(*)(come foo*, ma mantengono solo i file eseguibili), foo(.)(solo file regolari, non directory), foo(-@) (solo collegamenti simbolici sospesi), foo*(m-5)(solo file modificati negli ultimi 5 minuti), foo*(om[1])(il file modificato più di recente) , eccetera.

  • autocd: Digitando un nome di directory come comando si modifica in esso ( cdo in pushdbase alla modalità di configurazione). Il cdcomando è troppo lungo di tre caratteri! Non posso usare bash per più di trenta secondi senza provare dolore. Ho anche alcune funzioni a carattere singolo, come ad esempio

funzione - {
  if [[$ # -eq 0]]; poi
    cd "$ OLDPWD"
  altro
    builtin - "$ @"
  fi
}
  • Il zmvbuiltin e
alias zcp = 'noglob zmv -C'
alias zln = 'noglob zmv -L'
alias zmv = 'noglob zmv'
  • Mentre ci sono io, l' noglobintegrato.

  • Le funzioni hook precmde preexec: utilizzo preexecper impostare il titolo del mio terminale in modo da includere il comando in esecuzione e precmdper sostituire il comando con il suo codice di uscita. Qualcosa di simile a

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:
    • Su una riga di comando vuota viene eseguito bg(in modo che Ctrl + Z Ctrl + Z sospenda un programma e lo riprenda immediatamente in background).
    • Su una riga di comando non vuota, sospendi l'edizione corrente del comando: fammi digitare un altro comando e quando quella seconda riga di comando è terminata, torno indietro il primo comando da modificare.
    • Questo utilizza la seguente funzione:
fancy-ctrl-z () {
  if [[$ # BUFFER -eq 0]]; poi
    bg
    visualizzazione di zle
  altro
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^ Z' fancy-ctrl-z
  • Le più importanti opzioni non correlate al completamento: setopt append_history autocd extended_glob no_match

3
Adoro il trucco ^ Z ^ Z, grazie! Inizialmente cercavo superuser.com/questions/378018 per una soluzione che lo
legasse

13

La capacità di zsh di completare automaticamente le cose oltre a file e directory.

Ad esempio, con il pacchetto git installato, git-sh {tab} visualizza:

- comando git -
shortlog - riassume l'output del log git
show-branch: mostra i rami e i relativi commit
show-index: visualizza i contenuti di un file idx del pacchetto

1
Sì, questo è eccellente! Lo uso anche quando non sono del tutto sicuro di quale sia un'opzione della riga di comando, ma non ho bisogno di approfondire il file man.
Ha ricevuto Schmidt il

Credo che anche bash abbia questa capacità.
Keith Thompson,

10

Mi piacciono molto gli alias globali

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

lasciami fare cose del genere

somecommand file arg L

e ottieni il paging.


Mi piace anche G per grep.
Ha ricevuto Schmidt il

7

Come menzionato da altri, il completamento automatico di zsh è eccellente.

Puoi configurare il tuo completamento automatico per comandi personalizzati senza troppi problemi. Per tab nomi utente completi come argomenti da dito:

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

Altre opzioni che mi piace aver impostato:

# 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 e popd sono anche abbastanza utili.

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

Le chiavi home e end in modo fastidioso non funzionano di default su zsh come fanno su altre shell, ma è possibile risolvere questo problema.

# 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

2
Tendo a trovare la correzione ortografica più fastidiosa che effettivamente utile.
Ha ricevuto Schmidt il

@Frew heh, non sei la prima persona a dirmelo. Una delle caratteristiche più belle della correzione è che inserirà la versione corretta nella cronologia, quindi non eseguirai accidentalmente di nuovo la stessa cosa.
theotherreceive,

5

Abilita il completamento automatico quando si utilizza scpsu un server remoto.

Il prompt giusto per visualizzare informazioni aggiuntive.


Infatti! Ho un prompt molto complesso ma breve. Nome host [riga corrente] <errore no>%
Frew Schmidt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.