Hangi zsh özelliklerini kullanıyorsunuz? [kapalı]


33

Terminalde çok iş yapıyorum, bu yüzden seçim kabuğum hakkında çok şey öğrendim, zsh. İşinizde kendinizi daha verimli kılmak için zsh'ın hangi özelliklerini kullanıyorsunuz? Benim favorilerimden biri çoklu dir otomatik tamamlama. Bu yüzden yazmak yerine o kadar çok tuşa basmayı bırakıp tasarrufta cd /fo{tab}/ba{tab}/ba{tab}bulunabiliyorum cd /fo/ba/ba{tab}!


2
o özelliği bilmiyordum, denemek zorunda kalacağım!
Roy Rico

1
Bu dizin hangi seçeneği otomatik tamamlar?
hometoast

Yanıtlar:


50

Sadece bu küçük gem bulundu:

cd old new

Bu form , mevcut dizinin tam yolundaki cdtüm oluşumlarını değiştirir ve çalışma dizinini sonuç yoluna değiştirmeye çalışır.oldnew

Örneğin, çalışma dizininiz /home/larry/code/backrub/serverve geçmek istiyorsanız /home/sergei/code/backrub/server, yapmanız gereken tek şey:

cd larry sergei

7
Tamam, bu kurallar.
hometoast

21

Bildiğim kadarıyla, bash'ın yapamayacağı şeylere devam edeceğim.

  • Süslü tamamlama. Evet, bash'ın bir kısmı var, ama zsh daha fazla komut biliyor, çoğu zaman daha kesin ve birçok yapılandırma seçeneğine sahip.

  • **Glob, örneğin **/foodenilen dosyaları arar fooyinelemeli altdizinlere. ( ***/fooAyrıca sembolik işaretleri izler.) Uzun bir findkomut yerine iki karakter (bazı dosya adları boşluklar ve tırnak işaretleri gibi özel karakterler içeriyorsa doğru olması zor).

  • Daha az sıklıkta, glob niteleyicileri foo*(*)( foo*yalnızca çalıştırılabilir dosyaları koruyanlar gibi ), foo(.)(yalnızca normal dosyalar, dizinleri değil), foo(-@) (yalnızca sarkan sembolik bağları), foo*(m-5)(yalnızca son 5 dakikada değiştirilen dosyaları), foo*(om[1])(en son değiştirilen dosya) , vb.

  • autocd: Dizin adını komut olarak yazmak, içine değişir ( cdveya pushdnasıl yapılandırdığınıza bağlı olarak). cdKomut çok uzun üç karakter olduğunu! Acıyı hissetmeden otuz saniyeden fazla bash kullanamıyorum. Ayrıca, birkaç tek karakterli fonksiyonum da var.

işlev - {
  eğer [[$ # -eq 0]]; sonra
    cd "$ OLDPWD"
  Başka
    yerleşik - "$ @"
  fi
}
  • zmvYerleşik ve
takma ad zcp = 'noglob zmv -C'
alias zln = 'noglob zmv -L'
diğer adı zmv = 'noglob zmv'
  • Ben onun içindeyken, noglobyerleşik.

  • precmdVe preexeckanca işlevleri: Kullandığım preexecçalışan komutu dahil etmek benim terminalin başlığını ayarlamak için, ve precmdonun çıkış kodu ile komutu yerine. Gibi bir şey

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:
    • Boş bir komut satırında çalışır bg(Ctrl + Z Ctrl + Z bir programı askıya alır ve hemen arka planda devam eder).
    • Boş olmayan bir komut satırında, geçerli komut basımını askıya alın: başka bir komut yazmama izin verin ve bu ikinci komut satırı bittiğinde, düzenlenecek ilk komutu geri alıyorum.
    • Bu, aşağıdaki işlevi kullanır:
fantezi-ctrl-z () {
  eğer [[$ # BUFFER -eq 0]]; sonra
    bg
    zle yeniden gösterimi
  Başka
    zle basma girişi
  fi
}
zle -N fantezi-ctrl-z
bindkey '^ Z' süslü-ctrl-z
  • Tamamlanmayanla ilgili en önemli seçenekler: setopt append_history autocd extended_glob no_match

3
^ Z ^ Z numarasına bayılırım, teşekkürler! Başlangıçta superuser.com/questions/378018 adresini tek tuşa bağlamak için bir çözüm arıyordu ama ^ Z ^ Z çok daha mantıklı
Evgeniy Dolzhenko

13

zsh'nin dosya ve dizinlerin yanı sıra işleri otomatik olarak tamamlama yeteneği.

Örneğin, git paketi kurulu iken, git-sh {tab} şunları getirir:

- git komutu -
shortlog - git log çıktısını özetler
Şube show - şubeleri ve taahhütlerini gösterir
show-index - bir paket kimliği dosyasının içeriğini görüntüler

1
Evet, bu mükemmel! Bunu ayrıca komut satırı anahtarının ne olduğundan emin olmadığım halde kullanıyorum ancak man dosyasına girmem gerekmiyor.
Schmidt,

Bash'in de bu yeteneğe sahip olduğuna inanıyorum.
Keith Thompson

10

Küresel takma adları gerçekten çok seviyorum

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

gibi şeyler yapmama izin ver

somecommand file arg L

ve çağrı almak.


Grep için de G'yi severim.
Frew Schmidt,

7

Başkaları tarafından belirtildiği gibi, zsh'ın otomatik tamamlama özelliği mükemmel.

Özel komutlar için kendi otomatik tamamlamanızı çok fazla güçlük çekmeden de ayarlayabilirsiniz. Kullanıcı adlarının tamamını parmağa argüman olarak sekmek için:

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

Ayarlamayı sevdiğim diğer seçenekler:

# 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 ve popd de oldukça kullanışlıdır.

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

Can sıkıcı bir şekilde ev ve sonlandırma tuşları, varsayılan olarak diğer mermilerdeki gibi zsh üzerinde çalışmaz, ancak bunu düzeltebilirsiniz.

# 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
Yazım düzeltmesini gerçekten yardımcı olmaktan daha sinir bozucu bulma eğilimindeyim.
Schmidt,

@ Ferh heh, bunu bana ilk söyleyen sen değilsin. Düzeltmenin en güzel özelliklerinden biri, düzeltilmiş sürümü tarihe koyacağı, böylece yanlışlıkla aynı şeyi tekrar çalıştırmayacağınızdır.
theotherreceive

5

scpUzak bir sunucuda kullanırken otomatik tamamlamayı etkinleştir .

Ek bilgi görüntülemek için doğru bilgi istemi.


Aslında! Çok karmaşık ama kısa bir mesajım var. Ana bilgisayar adı [geçerli satır] <hata no>%
Frew Schmidt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.