私はターミナルで多くの作業を行っているので、選択したシェルzshについて多くのことを学びました。仕事での生産性を大幅に向上させるために、zshのどの機能を使用していますか?私のお気に入りの1つは、マルチディレクトリオートコンプリートです。したがって、cd /fo{tab}/ba{tab}/ba{tab}
と入力する代わりに、cd /fo/ba/ba{tab}
を実行して、その数のキーストロークを節約できます。
この小さな宝石を見つけました:
cd old new
この形式のcd
は、現在のディレクトリのフルパスで発生するすべてのold
をnew
に置き換え、作業ディレクトリを結果のパスに変更しようとします。
たとえば、作業ディレクトリが/home/larry/code/backrub/server
で、/home/sergei/code/backrub/server
に切り替えたい場合は、次の操作を行うだけです。
cd larry sergei
私の知る限り、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' }
bg
を実行します(そのため、Ctrl + Z Ctrl + Zはプログラムを一時停止し、すぐにバックグラウンドで再開します)。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ファイル
私はグローバルエイリアスが本当に好きなので
alias -g L='|less
alias -g DN='>/dev/null'
次のようなことをさせて
somecommand file arg L
ページングを取得します。
他の人が述べたように、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
リモートサーバーでscp
を使用するときにオートコンプリートを有効にします。
追加情報を表示するための適切なプロンプト。