2011-01-19 26 views
5

Sekme tamamlandığında, zsh'ı genel takma adları genişletecek şekilde yapılandırmak mümkün müdür?zsh takma adı genişletme

alias -g '...'='../..' 
alias -g '....'='../../..' 

ama yazarken, örneğin, cd .../some<tab> o cd .../something veya cd ../../something genişleyecektir olmaz: Örneğin, yaygın adlar var. Sonuç olarak, bu kullanışlı takma adları sık sık kullanmazlar çünkü sekme tamamlanma ile uyumsuzlar.

+2

Man zshcompsys dosyasına bakın ve "_expand_alias" için arama yapın. Üzgünüm, zsh tamamlanmasını derinlemesine öğrenemedim. Ayrıca unix.stackexchange.com adresinden sormayı deneyebilirsiniz. –

cevap

10

Ben Mikael Magnusson en rationalise-dot kullanıcı değilim. Benim zshrc:

# This was written entirely by Mikael Magnusson (Mikachu) 
# Basically type '...' to get '../..' with successive .'s adding /.. 
function rationalise-dot { 
    local MATCH # keep the regex match from leaking to the environment 
    if [[ $LBUFFER =~ '(^|/| |  |'$'\n''|\||;|&)\.\.$' ]]; then 
     LBUFFER+=/ 
     zle self-insert 
     zle self-insert 
    else 
     zle self-insert 
    fi 
} 
zle -N rationalise-dot 
bindkey . rationalise-dot 
# without this, typing a . aborts incremental history search 
bindkey -M isearch . self-insert 
+1

Bu çok ilginç ve örnek bir örneği çözüyor, ancak genel durumu çözmüyor. ("Çeşit" diyorum çünkü "" a basana kadar beklemiyor çünkü '...' - '../ ..'. – iconoclast

5

Bakmaya çalışın zsh kısaltmalar. Uzay gibi bir sihirli tuşa bastığınızda, otomatik olarak tam formla değiştirilen bir "kısaltma" girmenizi sağlar. Böylece ...<SPACE> ile ../.. arasındaki değişiklikleri yaratabilirsiniz.

Örneğin, bu profilinizde gerekenler:

typeset -A abbrevs 
abbrevs=(
     "..." "../.." 
     "...." "../../.."   
) 

#create aliases for the abbrevs too 
for abbr in ${(k)abbrevs}; do 
    alias -g $abbr="${abbrevs[$abbr]}" 
done 

my-expand-abbrev() { 
    local MATCH 
    LBUFFER=${LBUFFER%%(#m)[_a-zA-Z0-9]#} 
    LBUFFER+=${abbrevs[$MATCH]:-$MATCH} 
    zle self-insert 
} 

bindkey " " my-expand-abbrev 
+4

Bu konu için '' 'yazıp' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '''''''' basma '' ile sadece normal' diğer adı -g' aliaslarını kullanın. –

+0

@Dennis: can '' yapmak için yapılmalı * her ikisi de * normal tamamlanmasını * ve *' _expand_alias' ('Ctrl-X a') yapmak? Eğer öyleyse, problemi bu soruda belirtildiği gibi çözmez miydi? – iconoclast

+3

@dogbane: Bu bana "Bu tür bir widget' 'buy-expand-abbrev '' zsh içinde veriyor. 4.3.10 – iconoclast