zshとして知られるZシェルは、Linux/Unixライクなオペレーティングシステム用のシェルです。 sh
の他のシェルと類似しています (Bourne shell)bash
などのファミリ およびksh
、ただし、強化されたタブ補完など、多くの高度な機能と強力なコマンドライン編集オプションを提供します。
ここでzshのすべてのオプションを網羅することは不可能です。その多くの機能を文書化した文字通り何百ものページがあります。この記事では、zshでコマンドラインを使用して生産性を高めるための5つのヒントを紹介します。
1。テーマとプラグイン
何年にもわたって、オープンソースコミュニティはzsh用の無数のテーマとプラグインを開発してきました。テーマは事前定義されたプロンプト構成ですが、プラグインは特定のコマンドやプログラミング言語を簡単に使用できるようにする便利なエイリアスと関数のセットです。
テーマとプラグインの使用を開始する最も簡単な方法は、zsh構成フレームワークを使用することです。利用できるものはたくさんありますが、最も人気のあるのはOhMyZshです。デフォルトでは、いくつかの賢明なzsh構成オプションが有効になっており、何百ものテーマとプラグインがロードされています。
テーマは、Gitリポジトリや使用中のPython virtualenvのステータスなど、プロンプトに有用な情報を追加するため、生産性が向上します。この情報が一目でわかるので、同等のコマンドを入力して取得する手間が省け、見栄えがします。これが私の選択したテーマであるPowerlevel9kの例です:
テーマに加えて、OhMyZshにはzsh用の便利なプラグインが多数バンドルされています。たとえば、Gitプラグインを有効にすると、次のような多くの便利なエイリアスにアクセスできます。
$ alias | grep -i git | sort -R | head -10
g=git
ga='git add'
gapa='git add --patch'
gap='git apply'
gdt='git diff-tree --no-commit-id --name-only -r'
gau='git add --update'
gstp='git stash pop'
gbda='git branch --no-color --merged | command grep -vE "^(\*|\s*(master|develop|dev)\s*$)" | command xargs -n 1 git branch -d'
gcs='git commit -S'
glg='git log --stat'
多くのプログラミング言語、パッケージングシステム、およびコマンドラインで一般的に使用するその他のツールで使用できるプラグインがあります。 Fedoraワークステーションで使用しているプラグインのリストは次のとおりです。
git golang fedora docker oc sudo vi-mode virtualenvwrapper
2。巧妙なエイリアス
エイリアスはzshで非常に便利です。最もよく使用するコマンドのエイリアスを定義すると、入力の手間が省けます。 Oh My Zshは、ディレクトリをナビゲートするためのエイリアスや、次のような追加オプションを使用した一般的なコマンドの置換など、デフォルトでいくつかの便利なエイリアスを構成します。
ls='ls --color=tty'
grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
コマンドエイリアスに加えて、zshは2つの追加の便利なエイリアスタイプを有効にします:サフィックスエイリアス およびグローバルエイリアス 。
サフィックスエイリアスを使用すると、ファイル拡張子に基づいて指定されたプログラムを使用して、コマンドラインで入力したファイルを開くことができます。たとえば、vimを使用してYAMLファイルを開くには、次のエイリアスを定義します。
alias -s {yml,yaml}=vim
ここで、yml
で終わるファイル名を入力すると またはyaml
コマンドラインで、zshはvimを使用してそのファイルを開きます:
$ playbook.yml
# Opens file playbook.yml using vim
グローバルエイリアスを使用すると、最初だけでなく、コマンドラインの任意の場所に展開されるエイリアスを作成できます。これは、一般的なファイル名やパイプされたコマンドを置き換えるのに非常に便利です。例:
alias -g G='| grep -i'
このエイリアスを使用するには、G
と入力します パイプコマンドを入力する場所:
$ ls -l G do
drwxr-xr-x. 5 rgerardi rgerardi 4096 Aug 7 14:08 Documents
drwxr-xr-x. 6 rgerardi rgerardi 4096 Aug 24 14:51 Downloads
次に、zshがファイルシステムのナビゲートにどのように役立つかを見てみましょう。
3。簡単なディレクトリナビゲーション
コマンドラインを使用している場合、さまざまなディレクトリ間を移動することは、最も一般的なタスクの1つです。 Zshは、いくつかの便利なディレクトリナビゲーション機能を提供することにより、これを簡単にします。これらの機能はOhMyZshで有効になりますが、次のコマンドを使用して有効にできます:
setopt autocd autopushd \ pushdignoredups
これらのオプションを設定すると、cd
と入力する必要はありません。 ディレクトリを変更します。ディレクトリ名を入力するだけで、zshがディレクトリ名に切り替わります:
$ pwd
/home/rgerardi
$ /tmp
$ pwd
/tmp
戻るには、-
と入力します :
Zshは、アクセスしたディレクトリの履歴を保持するため、どのディレクトリにもすばやく切り替えることができます。リストを表示するには、dirs -v
と入力します :
$ dirs -v
0 ~
1 /var/log
2 /var/opt
3 /usr/bin
4 /usr/local
5 /usr/lib
6 /tmp
7 ~/Projects/Opensource.com/zsh-5tips
8 ~/Projects
9 ~/Projects/ansible
10 ~/Documents
~#
と入力して、このリストの任意のディレクトリに切り替えます ここで、#はリスト内のディレクトリの番号です。例:
$ pwd
/home/rgerardi
$ ~4
$ pwd
/usr/local
これらをエイリアスと組み合わせて、ナビゲートをさらに簡単にします。
d='dirs -v | head -10'
1='cd -'
2='cd -2'
3='cd -3'
4='cd -4'
5='cd -5'
6='cd -6'
7='cd -7'
8='cd -8'
9='cd -9'
これで、d
と入力できます リストの最初の10個のアイテムと、それに切り替える番号を確認するには:
$ d
0 /usr/local
1 ~
2 /var/log
3 /var/opt
4 /usr/bin
5 /usr/lib
6 /tmp
7 ~/Projects/Opensource.com/zsh-5tips
8 ~/Projects
9 ~/Projects/ansible
$ pwd
/usr/local
$ 6
/tmp
$ pwd
/tmp
最後に、zshはタブ補完でディレクトリ名を自動的に展開します。ディレクトリ名の最初の文字とTAB
を入力します 使用するには:
$ pwd
/home/rgerardi
$ p/o/z (TAB)
$ Projects/Opensource.com/zsh-5tips/
これは、zshの強力なタブ補完システムによって実現される機能の1つにすぎません。もう少し見てみましょう。
4。高度なタブ補完
Zshの強力な完了システムは、その特徴の1つです。簡単にするために、これをタブ補完と呼びますが、内部では複数のことが起こっています。通常、拡張とコマンド補完があります。ここで一緒に話し合います。詳細については、このユーザーガイドを確認してください。
コマンド補完は、OhMyZshでデフォルトで有効になっています。有効にするには、次の行を.zshrc
に追加します ファイル:
autoload -U compinit
compinit
Zshの完了システムはスマートです。たとえば、cd
と入力した場合など、特定のコンテキストで使用できるアイテムのみを提案しようとします。 およびTAB
、zshは、cd
を知っているため、ディレクトリ名のみを提案します。 他のものでは機能しません。
逆に、ユーザー関連のコマンドを実行する場合はユーザー名を、ssh
を使用する場合はホスト名を提案します。 またはping
、たとえば。
膨大な完了ライブラリがあり、さまざまなコマンドを理解します。たとえば、tar
を使用している場合 コマンドを押すと、Tabキーを押して、抽出の候補としてパッケージで使用可能なファイルのリストを表示できます。
$ tar -xzvf test1.tar.gz test1/file1 (TAB)
file1 file2
git
を使用したより高度な例を次に示します。 。この例では、TAB
と入力すると 、zshは、ステージングできるリポジトリ内の唯一のファイルの名前を自動的に完成させます:
$ ls
original plan.txt zsh-5tips.md zsh_theme_small.png
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: zsh-5tips.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git add (TAB)
$ git add zsh-5tips.md
また、コマンドラインオプションを理解し、選択したサブコマンドに関連するもののみを提案します:
$ git commit - (TAB)
--all -a -- stage all modified and deleted paths
--allow-empty -- allow recording an empty commit
--allow-empty-message -- allow recording a commit with an empty message
--amend -- amend the tip of the current branch
--author -- override the author name used in the commit
--branch -- show branch information
--cleanup -- specify how the commit message should be cleaned up
--date -- override the author date used in the commit
--dry-run -- only show the list of paths that are to be committed or not, and any untracked
--edit -e -- edit the commit message before committing
--file -F -- read commit message from given file
--gpg-sign -S -- GPG-sign the commit
--include -i -- update the given files and commit the whole index
--interactive -- interactively update paths in the index file
--message -m -- use the given message as the commit message
... TRUNCATED ...
TAB
と入力した後 、矢印キーを使用してオプションリストをナビゲートし、必要なものを選択できます。これで、これらすべてのGitオプションを覚える必要はありません。
利用可能な多くのオプションがあります。自分にとって最も役立つものを見つける最良の方法は、それを使用することです。
5。コマンドラインの編集と履歴
Zshのコマンドライン編集機能も便利です。デフォルトでは、emacsをエミュレートします。私のように、vi / vimを好む場合は、次のコマンドでviバインディングを有効にします。
$ bindkey -v
Oh My Zshを使用している場合は、vi-mode
プラグインは、プロンプトで追加のバインディングとモードインジケーターを有効にします。これは非常に便利です。
viバインディングを有効にした後、viコマンドを使用してコマンドラインを編集できます。たとえば、ESC+/
を押します コマンドライン履歴を検索します。検索中にn
を押します 次の一致する行を取得し、N
前のもの。最も一般的なviコマンドは、ESC
を押した後に機能します 0
など 行の先頭にジャンプするには、$
最後にジャンプするには、i
挿入するには、a
追加するなど。cw
などのモーション作業が続くコマンドでも 単語を変更します。
コマンドライン編集に加えて、以前に使用したコマンドを修正または再実行する場合、zshはいくつかの便利なコマンドライン履歴機能を提供します。たとえば、間違えた場合は、fc
と入力します。 お気に入りのエディタに最後のコマンドを表示して修正します。 $EDITOR
を尊重します 変数であり、デフォルトではviを使用します。
もう1つの便利なコマンドはr
です 、最後のコマンドを再実行します。およびr <WORD>
、文字列WORD
を含む最後のコマンドを実行します 。
最後に、ダブルバングを入力します(!!
)行の最後のコマンドを戻します。これは、たとえば、sudo
と入力するのを忘れた場合に便利です。 昇格された特権を必要とするコマンドを実行するには:
$ less /var/log/dnf.log
/var/log/dnf.log: Permission denied
$ sudo !!
$ sudo less /var/log/dnf.log
これらの機能により、以前に入力したコマンドを簡単に見つけて再利用できます。
ここからどこへ行くの?
これらは、生産性を高めることができるzsh機能のほんの一部です。もっとたくさんあります。詳細については、次のリソースを参照してください。
Zシェルの概要
ZSHのユーザーガイド
Archlinux Wiki
zsh-lovers
共有するzsh生産性のヒントはありますか?以下のコメントでそれらについて聞いてみたいです。