どのzsh機能を使用していますか?[閉まっている]


33

私はターミナルで多くの仕事をしているので、選択したシェルであるzshについて多くを学びました。zshのどの機能を使用して、仕事をより生産的にするのですか?私のお気に入りの1つは、マルチディレクトリオートコンプリートです。それで、入力する代わりに、cd /fo{tab}/ba{tab}/ba{tab}私はちょうどcd /fo/ba/ba{tab}多くのキーストロークを実行して保存できます!


2
私はその機能について知らなかった、私はそれを試してみるつもりだ!
ロイ・リコ

1
そのディレクトリのオートコンプリートはどのオプションですか?
ホームトースト

回答:


50

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

cd old new

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

たとえば、作業ディレクトリがで/home/larry/code/backrub/serverあり、に切り替えたい/home/sergei/code/backrub/server場合、必要なことは次のとおりです。

cd larry sergei

7
OK、そのルール。
ホームトースト

21

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

  • 豪華な完成。はい、bashにはいくつかありますが、zshはより多くのコマンドを知っており、多くの場合より正確で、より多くの構成の可能性があります。

  • **グロブ、例えば、**/fooと呼ばれるファイルを探しますfoo再帰的にサブディレクトリに。(また***/foo、シンボリックリンクにも続きます。)長いfindコマンドの代わりに2文字(一部のファイル名にスペースや引用符などの特殊文字が含まれている場合、正しい文字を取得するのは困難です)。

  • 以下のようには少ないが、グロブ修飾子foo*(*)(のようなfoo*、しかし、唯一の実行可能ファイルを保持)、 foo(.)(のみ通常のファイルではなくディレクトリ)、 foo(-@) (のみシンボリックリンクをダングリング)、 foo*(m-5)(最後の5分に変更されたファイル)、 foo*(om[1])(最近変更されたファイル)など

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

関数 - {
  if [[$#-eq 0]]; それから
    cd "$ OLDPWD"
  他に
    組み込み-「$ @」
  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]]; それから
    bg
    zle再表示
  他に
    zleプッシュ入力
  fi
}
zle -N fancy-ctrl-z
bindkey '^ Z' fancy-ctrl-z
  • 最も重要な完了関連以外のオプション: setopt append_history autocd extended_glob no_match

3
^ Z ^ Zトリックが大好き、ありがとう!元々superuser.com/questions/378018で単一のキーにバインドするソリューションを探していましたが、^ Z ^ Zの方がはるかに理にかなっています
Evgeniy Dolzhenko

13

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

たとえば、gitパッケージをインストールすると、git-sh {tab}が表示されます:

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

1
はい、これは素晴らしいです!コマンドラインスイッチが何であるかがよくわからないときにも、これを使用しますが、manファイルを詳しく調べる必要はありません。
フリューシュミット

bashにもこの機能があると思います。
キーストンプソン14年


7

他の人が述べたように、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

pushdとpopdも非常に便利です。

# 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

2
スペルの訂正は、実際に役立つよりも厄介だと思う傾向があります。
フリューシュミット

@フリューへん、あなたは私にそれを言う最初の人ではありません。修正の優れた機能の1つは、修正されたバージョンが履歴に追加されるため、誤って同じことを再度実行しないことです。
もう1つは

5

scpリモートサーバーで使用する場合は、オートコンプリートを有効にします。

追加情報を表示するための正しいプロンプト。


確かに!非常に複雑ですが短いプロンプトがあります。ホスト名[現在の行] <エラー番号>%
フリューシュミット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.