Zsh
Zsh je vrlo močna ljuska (shell) koja radi i kao interaktivna ljuska i kao skriptni interpreter. Nativno nije kompitabilan sa Bash-em ( treba koristiti "emulate sh" ) no jednom kad se uspostavi kompitabilnost pruža mnoge prednosti kao :
- brzina
- poboljšana tab dopuna
- bolji globbing
- poboljšano rukovanje nizevima
- kranje prilagodljiv korisniku i njegovim potrebama
Zsh FAQ nudi više razloga zašto koristiti Zsh kao shell.
Sadržaj
Instalacija
Prije nego započnete instalaciju bilo bi zgodno da provjerite koj shell uopće koristite
echo $SHELL
Zsh se nalzi unutar repozitorija svih distribucija te ga je potrebno povući. Slackware pak sa druge strane dolazi sa Zsh shellom pa ga je potrebno odabrati kao user shell prilikom prvog boota nakon instalacije te konfiguriranja sustava i kreiranja korisnika( u protivnom Slackware će koristiti bash).
Inicijalna konfiguracija
Provjerite da je zsh uspješno instaliran
% zsh
vidjet će te zsh-newuser-install koj će vas voditi kroz neke osnovne konfiguracije.Ukoliko neželite pritisnite q.
Postaljanje ZSH kao nativne ljuske
Ako je ljuska unešena u /etc/shells promjenu nativne ljuske vršite sa chsha. Ako ste Zsh povukli sa repozitorija onda već je unešen u /etc/shells .
chsh -s $(which zsh)
Kako bi mogli koristiti Zs potrebno se odlogirati i ponovno logirati (na nekim distribicijama je potrebno napraviti reboot). Kad se ponovno ulogirate i pokrenete terminal vidjet će te da Zsh izgleda drugačije nego Bash.Da ne bi pomislili kako je neka zla magija napala vaše računalo unesite u terminal echo $SHELL i uvjerite se da zaista koristite Zsh.
Opaska|ukoliko vršite zamjenu bash bilo bi pametno da nešto koda iz ~/bashrc prenesete u ~/zshrc te sa ~/.bash_profile u ~/.zprofile .
Konfiguracijske datoteke
- /etc/profile
- ~/.zshenv
- ~/.zprofile
- ~/.zshrc
- ~/.zlogin
- ~/.zlogout
Postavke ~/.zshrc datoteke
Iako je Zsh kao i Bash iskoristiv out of the box odmah nakon instalacije, potrebno ga je podrediti svojim potrebama i zahtjevima. Zsh je iznimno bogat mogučnostima uređenja te može postati prava zaraza kao i igranje sa Conky skriptama ili uređivanje desktopa. Ovdje ćemo prikazati jednu osnovnu i jednostavnu ~/.zshrc konfiguraciju. Jedna od prednosti koje pruža Zsh je da nakon odrađenih izmjena u samoj ~/.zshrc skripti nemorate ponosno pokretati terminal kako bi promjene bile vidljive već u terminal unesete
source ~/.zshrc
Jednostavna ~/.zshrc datoteka
autoload -U compinit promptinit compinit promptinit # This will set the default prompt to the walters theme prompt walters
Automatsko završavanje naredba
ovo je možda najzanimljivija i najkorisnija značajka Zsh.Prije ili kasnije željet će te omogućiti automatsko završavanje naredba u svom ~/.zshrc a to će te ućiniti unosom ovih linija u vaš ~/.zshrc
autoload -U compinit compinit
Gornja konfiguracija uključuje automatsko ssh/scp/sftp hostove no potrebno da bi radila normalno potrebno je spriječiti ssh od hashinga imena hostova u ~/.ssh/known_hosts ( Upozorenje !! Imajet na umu da ta radnja čini vaše računalo osjetljivim na "Island-hopping" napade ). Sa tom mišlju potrebno je unutar /etc/ssh/ssh_config zakomentirati sljedeću liniju
#HashKnownHosts yes
te vrijednost postaviti na no. Također premjestite ~/.ssh/known_hosts negdje drugdje kako bi ssh mogao napraviti novu listu.
Završavanje strelicama
Ukoliko elite završavanje naredba strelicama u ~/.zshrc treba dodati
zstyle ':completion:*' menu select
Dok za završavanje naredba putem aliasa treba unjeti
setopt completealiases
Tipkovnične kratice
Zsh ne koristi readline. Umjesto toga ima svoj daleko moćniji zle. Ne čita /etc/inputrc ni ~/.inputrc, zle ima Emacs i VI modove. Nativno nema nijedna već naspram $EDITOR environment varijable pokušava odrediti koj editor koristite te se prilagoditi njemu.Ako je varijabla prazna postavlja Emacs.Kako bi dobili dodatne tipke u vaš ~/.zshrc
bindkey "\e[1~" beginning-of-line # Home bindkey "\e[4~" end-of-line # End bindkey "\e[5~" beginning-of-history # PageUp bindkey "\e[6~" end-of-history # PageDown bindkey "\e[2~" quoted-insert # Ins bindkey "\e[3~" delete-char # Del bindkey "\e[5C" forward-word bindkey "\eOc" emacs-forward-word bindkey "\e[5D" backward-word bindkey "\eOd" emacs-backward-word bindkey "\e\e[C" forward-word bindkey "\e\e[D" backward-word bindkey "\e[Z" reverse-menu-complete # Shift+Tab # for rxvt bindkey "\e[7~" beginning-of-line # Home bindkey "\e[8~" end-of-line # End # for non RH/Debian xterm, can't hurt for RH/Debian xterm bindkey "\eOH" beginning-of-line bindkey "\eOF" end-of-line # for freebsd console bindkey "\e[H" beginning-of-line bindkey "\e[F" end-of-line
Pretraživanje povijesti
Dodajte ove dvije linije u vaš ~/.zshrc
bindkey "^[[A" history-search-backward bindkey "^[[B" history-search-forward
Promptovi
U Zsh je vrlo jednostavno i brzo konfigurirati propmpt u boji. Provjerite da u ~/.zshrc imate
autoload -U promptinit promptinit
ako nemate ubacite. Dostupne promptove vidjet će te ukoliko pokrenete naredbu
prompt -l
Isprobajte ih i odlučite se za onaj koj vam odgovara.
Napredna ~/.zshrc datoteka
Za kraj evo jedne napredne ~/.zshrc datoteke.Riječ je o datoteci Archevog developera Robby Russela koja je forkana nešto više od 900 puta.
########################################################### # Options for Zsh export HISTFILE=~/.zsh_history export HISTSIZE=50000 export SAVEHIST=50000 eval `dircolors -b` autoload -U compinit compinit setopt autopushd pushdminus pushdsilent pushdtohome setopt autocd setopt cdablevars setopt ignoreeof setopt interactivecomments setopt nobanghist setopt noclobber setopt HIST_REDUCE_BLANKS setopt HIST_IGNORE_SPACE setopt SH_WORD_SPLIT setopt nohup # PS1 and PS2 export PS1="$(print '%{\e[1;34m%}%n%{\e[0m%}'):$(print '%{\e[0;34m%}%~%{\e[0m%}')$ " export PS2="$(print '%{\e[0;34m%}>%{\e[0m%}')" # Vars used later on by Zsh export EDITOR="nano" export BROWSER=links export XTERM="aterm +sb -geometry 80x29 -fg black -bg lightgoldenrodyellow -fn -xos4-terminus-medium-*-normal-*-14-*-*-*-*-*-iso8859-15" ################################################################## # Stuff to make my life easier # allow approximate zstyle ':completion:*' completer _complete _match _approximate zstyle ':completion:*:match:*' original only zstyle ':completion:*:approximate:*' max-errors 1 numeric # tab completion for PID :D zstyle ':completion:*:*:kill:*' menu yes select zstyle ':completion:*:kill:*' force-list always # cd not select parent dir zstyle ':completion:*:cd:*' ignore-parents parent pwd ################################################################## # Key bindings # http://mundy.yazzy.org/unix/zsh.php # http://www.zsh.org/mla/users/2000/msg00727.html typeset -g -A key bindkey '^?' backward-delete-char bindkey '^[[1~' beginning-of-line bindkey '^[[5~' up-line-or-history bindkey '^[[3~' delete-char bindkey '^[[4~' end-of-line bindkey '^[[6~' down-line-or-history bindkey '^[[A' up-line-or-search bindkey '^[[D' backward-char bindkey '^[[B' down-line-or-search bindkey '^[[C' forward-char # completion in the middle of a line bindkey '^i' expand-or-complete-prefix ################################################################## # My aliases # Set up auto extension stuff alias -s html=$BROWSER alias -s org=$BROWSER alias -s php=$BROWSER alias -s com=$BROWSER alias -s net=$BROWSER alias -s png=feh alias -s jpg=feh alias -s gif=feg alias -s sxw=soffice alias -s doc=soffice alias -s gz='tar -xzvf' alias -s bz2='tar -xjvf' alias -s java=$EDITOR alias -s txt=$EDITOR alias -s PKGBUILD=$EDITOR # Normal aliases alias ls='ls --color=auto -F' alias lsd='ls -ld *(-/DN)' alias lsa='ls -ld .*' alias f='find |grep' alias c="clear" alias dir='ls -1' alias gvim='gvim -geom 82x35' alias ..='cd ..' alias nicotine='/home/paul/downloads/nicotine-1.0.8rc1/nicotine' alias ppp-on='sudo /usr/sbin/ppp-on' alias ppp-off='sudo /usr/sbin/ppp-off' alias firestarter='sudo su -c firestarter' alias mpg123='mpg123 -o oss' alias mpg321='mpg123 -o oss' alias vba='/home/paul/downloads/VisualBoyAdvance -f 4' alias hist="grep '$1' /home/paul/.zsh_history" alias irssi="irssi -c irc.freenode.net -n yyz" alias mem="free -m" alias msn="tmsnc -l hutchy@subdimension.com" # command L equivalent to command |less alias -g L='|less' # command S equivalent to command &> /dev/null & alias -g S='&> /dev/null &'