web-dev-qa-db-ja.com

どのzsh機能を使用していますか?

私はターミナルで多くの作業を行っているので、選択したシェルzshについて多くのことを学びました。仕事での生産性を大幅に向上させるために、zshのどの機能を使用していますか?私のお気に入りの1つは、マルチディレクトリオートコンプリートです。したがって、cd /fo{tab}/ba{tab}/ba{tab}と入力する代わりに、cd /fo/ba/ba{tab}を実行して、その数のキーストロークを節約できます。

33
Frew Schmidt

この小さな宝石を見つけました:

cd old new

この形式のcdは、現在のディレクトリのフルパスで発生するすべてのoldnewに置き換え、作業ディレクトリを結果のパスに変更しようとします。

たとえば、作業ディレクトリが/home/larry/code/backrub/serverで、/home/sergei/code/backrub/serverに切り替えたい場合は、次の操作を行うだけです。

cd larry sergei
50
Agnel Kurian

私の知る限り、bashができないことは続けます。

  • 派手な完成。はい、bashにはその一部がありますが、zshはより多くのコマンドを認識しており、多くの場合、より正確であり、より多くの構成の可能性があります。

  • _**_ glob、たとえば_**/foo_は、サブディレクトリ内のfooというファイルを再帰的に検索します。 (また、_***/foo_もシンボリックリンクに従います。)長いfindコマンドの代わりに2文字(一部のファイル名にスペースや引用符などの特殊文字が含まれている場合、これは正しく理解できません)。

  • あまり頻繁ではありませんが、foo*(*)(_foo*_のようですが、実行可能ファイルのみを保持します)、foo(.)(ディレクトリではなく通常のファイルのみ)、foo(-@)(ぶら下がっているシンボリックリンクのみ)、foo*(m-5)(過去5分間に変更されたファイルのみ)、foo*(om[1])(最後に変更されたファイル)など。

  • autocd:コマンドとしてディレクトリ名を入力すると、ディレクトリ名が変わります(設定方法に応じて、cdまたはpushd)。 cdコマンドは3文字長すぎます!痛みを感じずに30秒以上bashを使用することはできません。また、次のような1文字の関数もいくつかあります。

 function-{
 if [[$#-eq 0]];次に
 cd "$ OLDPWD" 
 else 
組み込み-"$ @" 
 fi 
} 
  • zmvビルトイン、および
エイリアスzcp = 'noglob zmv -C' 
エイリアスzln = 'noglob zmv -L' 
エイリアスzmv = 'noglob zmv' 
  • 私がそれにいる間、noglobビルトイン。

  • precmdおよびpreexecフック関数:preexecを使用して端末のタイトルを設定し、実行中のコマンドを含め、precmdを使用してコマンドを出口で置き換えますコード。何かのようなもの

 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:
    • 空のコマンドラインでbgを実行します(そのため、Ctrl + Z Ctrl + Zはプログラムを一時停止し、すぐにバックグラウンドで再開します)。
    • 空でないコマンドラインで、現在のコマンドエディションを一時停止します。別のコマンドを入力して、2番目のコマンドラインが終了したら、最初のコマンドを編集します。
    • これは次の関数を使用します:
 fancy-ctrl-z(){
 if [[$#BUFFER -eq 0]]; then 
 bg 
 zle redisplay 
 else 
 zle Push-input 
 fi 
} 
 zle -N fancy -ctrl-z 
 bindkey '^ Z'fancy-ctrl-z 
  • 最も重要な非完了関連オプション:_setopt append_history autocd extended_glob no_match_

zshがファイルとディレクトリ以外のものを自動補完する機能。

たとえば、gitパッケージがインストールされている場合、git-sh {tab}は次のように表示します。

-gitコマンド-
 shortlog-gitログ出力を要約します
 show-branch-ブランチとそのコミットを表示します
 show-index-の内容を表示しますパックidxファイル
13
Mark Thalman

私はグローバルエイリアスが本当に好きなので

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

次のようなことをさせて

somecommand file arg L

ページングを取得します。

10
hometoast

他の人が述べたように、zshのオートコンプリートは優れています。

あまり面倒なく、カスタムコマンドの独自のオートコンプリートを設定することもできます。 fingerの引数として完全なユーザー名をタブにするには:

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

私が設定したい他のオプション:

# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber

プッシュとポップもかなり便利です。

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

厄介なことに、ホームキーとエンドキーは、デフォルトでは他のシェルのようにzshで機能しませんが、これを修正できます。

# 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
7
theotherreceive

リモートサーバーでscpを使用するときにオートコンプリートを有効にします。

追加情報を表示するための適切なプロンプト。

5
Rob Wells