13

すべてのシェルは、次のコマンドを認識します。

$ cd .
$ cd ..

また、zsh は次のことも理解します。

$ cd ...
$ cd ....

あなたが言うならば:

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

さて、入力を開始したときに適切なタブ補完を行うにはどうすればよいcd ..../<TAB>ですか? oh-my-zsh で実装されていたのを思い出しましたが、今は使用をやめました。

cdだけでなく、実行したいなどの場合にも機能していただければ幸いcat ..../a/b/..../c/d | lessです。

4

4 に答える 4

6

../..同じ問題に対処するために私がしたことは、入力時に zshに入力...させることであり、そのように展開することは理にかなっています. それはあなたに合うかもしれません(または:-P):

if is-at-least 5.0.0 && [[ ! $UID -eq 0 ]]; then                                                                                                                             
  ## http://www.zsh.org/mla/users/2010/msg00769.html                                                                                                                       
  function rationalise-dot() {                                                                                                                                             
    local MATCH # keep the regex match from leaking to the environment                                                                                                   
    if [[ $LBUFFER =~ '(^|/| |      |'$'\n''|\||;|&)\.\.$' && ! $LBUFFER = p4* ]]; then                                                                                  
        #if [[ ! $LBUFFER = p4* && $LBUFFER = *.. ]]; then                                                                                                               
        LBUFFER+=/..                                                                                                                                                     
    else                                                                                                                                                                 
        zle self-insert                                                                                                                                                  
    fi                                                                                                                                                                   
}                                                                                                                                                                        
zle -N rationalise-dot                                                                                                                                                   
bindkey . rationalise-dot                                                                                                                                                
bindkey -M isearch . self-insert                                                                                                                                         
fi

のエイリアスもありますが、...グローバルではありません。

コマンド ラインが (Perforce コマンド ライン ツール) で始まるかどうかを確認しp4、Perforce の引数にはしばしばliteral が含まれるため、その場合は変更しないことに注意してください...。使用しない場合p4は、明らかにそのチェックを削除できます。

于 2014-05-05T12:00:42.190 に答える
2

コンプリータとして使用compinitおよび使用する必要があります_expand_alias。次に例を示します。

zstyle ':completion:*' completer _complete _ignored _expand_alias
autoload -Uz compinit
compinit

_complete _ignoredは のデフォルト設定ですcompleter。これを only に設定できます_expand_aliasが、補完はエイリアスに対してのみ機能します。

compinitが ですでに設定されている場合は、 のリスト~/.zshrcに追加するだけです。次に例を示します。_expand_aliascompleter

zstyle ':completion:*' completer _expand _complete _ignored _approximate _expand_alias

デフォルトで_expand_aliasは、グローバルおよび通常のエイリアスを展開します。通常のエイリアスを展開したくない場合は、次のように設定します。

zstyle ':completion:*' regular false

注:これはもちろん、グローバル エイリアスが機能する場合にのみ機能します。したがって、それらは次のようなパス全体の一部として展開されませんa/b/..../c/d

于 2014-05-04T14:02:51.257 に答える