私はターミナルで多くの時間を費やしているので、すべてが美しく、速く、便利であることを望んでいます。 これから、さまざまなプラグインを試すために、それを設定するという絶え間ない欲求が生まれます。 シェルでは、約5年前に自分でzshを選択しました。数年前、私はその便利な構成のためにoh-my-zshを見つけました。
時間が経つにつれて、電力線とパーコルの形でいくつかの固着部分がこの構成に追加されました。
最近、不要なプラグインを取り除き、必要なプラグインを追加し、簡単なインストールと更新を行えるように、すべてを再構築することにしました。 その結果、 ansible-role-zshの役割が現れ、LANおよびサーバー上の端末を完全に構成しました。
機能:
- 1つのコマンドで設定(ターミナルクライアントのフォントとテーマを除く)
- 読み込みが速く、動作が速い
- ansibleを使用して完全に構成可能、
~/.zshrc
- 完全にローカル(システムに何も入れられず、すべてが
~/.oh-my-zsh
保存されます) -
~/.zshrc.local
を使用して設定を行う機会をユーザーに残します 同様にmacOS、古いDebian、Ubuntu、CentOSで動作します- 異なる配色では正常に見えます(ただし、ソラライズドダークで最適)
- 組み込みの構文の強調表示(ミスの頻度を減らし、長いコマンドを読みやすくするのに役立ちます)
- コマンドの履歴による自動補完(
Ctrl+R
頻度を減らすのに役立ちます) - 長時間実行コマンドの時間表示(
time
使用頻度を減らすのに役立ちます)
1分の機能のデモ:

以前はpowerlineを使用していましたが、これはコマンドプロンプト(ステータスバー)と対話型検索のpercolを担当していました。 どちらのユーティリティもpythonで書かれています。
percolを見つけたとき、彼らは良いです、ターミナルでの作業の速度がすぐに増加し、ブログでそれを満足しましたが、それはあまり美しくありませんでした(bashインストーラー)、同じサーバーで美しいターミナルを持つ複数のユーザーと作業するときにいくつかの問題がありました。
また、いくつかのケースでは、ユーティリティの欠陥が現れました:ターミナルはわずかな遅延(約1秒)でロードされ、大量のテキストでは馬鹿げています。
Pythonユーティリティは、個別の設定で設定することを望んでいました。 個々の設定をサポートしたくなかったので、デフォルト設定で使用しました。それらが悪いとは言いませんが、もっと良いかもしれません。
これらの理由から、私はそれらを置き換える方法を探し、それらを見つけました。
fzf、パーコル交換
ファジーファインダーは Goで書かれており、Vimでの作業のために投獄された説明によって判断される星の束を持っていますが、他の場所でも機能します。
選ぶとき、私はpecoを見て、それらは似ていて、どちらもGoの日本人によって書かれています。私はfzfを次の基準で選びました。
- より多くの貢献者、一般に、プロジェクトの脈動は約2倍頻繁に打ちます
- vimとtmuxによって研ぎ澄まされ、通常の端末でうまく機能する
- 個別の構成ではなく、コマンドラインパラメーターと環境変数によって構成されます。
- 1文字短く:)
Fzfには**<Tab>
を使用してさまざまなものを自動補完するクールな機能がありますが、チェックしませんでしたが、 fzf-zshプラグインの作成者はzsh-autosuggestionsと競合すると書いています。
Powerlevel9k、電力線の交換
私は偶然トピックpowerlevel9kを見つけ、それをチェックしました。Githubpowerline powerline zsh
での要求に応じて、2番目(powerlineの後)です。
テーマはだまされており、多くのことができます。私はいくつかの機能を利用しました。
- 環境変数(セグメント、その場所、色)によるすべてのカスタマイズ
- 同じ変数を介してカスタムセグメントを追加する
電力線と同様に、テーマにはパッチを適用した電力線フォントのインストールが必要です。私はフォントDroid Sans Mono、12ptを使用します。 フォントと配色は、手動で設定する必要がある2つの要素です。
zsh-autosuggestions
このプラグインを開くことは、私にとってパーコルを開くことに匹敵します。タイピングの速度が向上しました。
多くの場合、前回と同じパラメーターを使用して、または少し異なるパラメーターを使用してコマンドを入力する必要があります。 プラグインは両方の場合に役立ちます。
これは次のように機能します。コマンドを入力すると、プラグインはストーリーを読み取り、同じ方法でストーリーの最後のコマンドを灰色で追加します。
Enterキーを押すと、オートコンプリートからではなく、コマンドが実行されます(間違っているコマンドを誤って呼び出すことは困難ですが、一部のオートコンプリートにはこのような問題があります)。 拡張コマンドを置き換えるには、 autosuggest-accept
アクションにリンクされたボタンを押す必要があります。デフォルトでは→です。
しかし、常に右矢印に到達するのは不便なので、最初にbacktick
(ユニットの左側にある逆引用符)で自動補完をビニングしました。 それは非常に便利でした: Tab
すぐ隣でTab
と同様に動作しTab
。 しかし、後にこれによりミッドナイトコマンダーの仕事が中断されることが判明しました:一部のシステムでは、内部シェルのパスの切り替えを停止しました(mcを介して、目的のフォルダーに移動し、 Ctrl+O
押し、コマンドを入力し、内部シェルを終了するか、またはその逆の方が便利です)シェルを介してフォルダに移動し、mc)でアクションを実行します。他のシステムでは、mcは通常、いくつかのフォルダの移行後にハングします。 私は問題を4.8.18
ました、mcトラッカーにそのようなグリッチがあり、最新バージョン4.8.18
ハングが削除されましたが、パスは変更されなかったので、他のホットキーを試し始めました: Ctrl+Space
、 Ctrl+I
、それらはすべてバグがありました
その結果、私はmcを使用することはほとんどなかったので、mcを自分で使用することはめったにないので、訪問したのは自分だけではないすべてのシステムで、 Ctrl+U
にリンクし、個人の引用にもリンクしました。 プレイブックでは、矢印のみがバインドされています。
ansible-role-zshでも、プラグインの動作は15文字に制限されています。つまり、15文字を超えるとコマンドの提供が停止します。
これは、端末へのコマンドのコピーペースト中の遅延を削除するために行われます(自分で入力すると、遅延は感じませんが、バッファーから大きなコマンドを貼り付けると、これは顕著で、挿入が機能しなかったようです)。
zsh構文ハイライト
このプラグインについてあまり語ることはできません。入力された現在のコマンドを強調表示し、その場でペイントします。
主な利点は、単語の赤い色で封印されていることです。 これは必須だとは言いませんが、より便利になっています。
同時に、プラグインには一度にいくつかの妨害があります。
zsh < 4.3.17
が原因で端末セッションがクラッシュするシステムでは、Playbookはそのようなシステムでプラグインをアクティブにすることに対する保護を備えています。 まれなケースですが、Debian Squeezeのためにそれを行いました。
プラグインは最後に接続する必要がありますが、何が起こるかわかりませんし、知りたくありません。
zsh- .zshrc
、 .zshrc
を再適用しようとすると、セッションクラッシュが発生します。
これについては対応する問題があり、zsh-autosuggestionsの著者は、修正はすでにv0.3.4
ブランチにあると述べていますが、チェックしませんでしたが、そうであれば、 v0.3.4
のリリース後にすべてをv0.3.4
する必要があります。
この問題のプレイブックには修正があるため、競合は解決されています。
zshコマンド時間
このプロジェクトで物事を整理しながら、私は長年のウィッシュリストの1つに気付きました 。実行に時間がかかるコマンドの実行時間を出力します。 その前に、端末の右隅の時計を見て、前のコマンドの時計と比較するか、すぐにコマンドをtime
実行しましtime
。 これは必要ありません。
さまざまな配色でのテーマの外観
Solarized Dark配色を使用しますが、構成済みサーバーにアクセスする同僚を混乱させないために、標準のPuttyパレット、標準のUbuntuパレット、および組み込みのiTermテーマで端末がどのように見えるかを確認しました。

設置
したがって、気に入った場合は、まずVagrantで作品をライブで見ることをお勧めします。
git clone https://github.com/viasite-ansible/ansible-role-zsh.git vagrant up
稼働中のシステムにインストールする前に、これを注意深く読んでください。
-
~/.oh-my-zsh
ディレクトリーが既にある場合、役割はインストールされません。ある場合は、名前を変更してください。 - ロールは
~/.zshrc
バックアップを上書きします! - ロールを適用した後、ansibleを介して端末を管理し続ける場合は、プレイブック変数または
~/.zshrc.local
に設定を書き込む必要があります。このファイルは~/.zshrc
最後に含まれており、ansibleはそれに触れません。
すべてがあなたに合っているなら、あなたはansible-galaxy
を通して役割を設定できます:
ansible-galaxy install viasite-ansible.zsh
次に、次のようなプレイブックを作成します。
hosts: all vars: zsh_autosuggestions_bind_key: "^U" roles: - viasite-ansible.zsh
たとえば、 zsh.yml
保存します。 その後、ロールをローカルユーザーに適用できます。
ansible-playbook -i "localhost," -c local zsh.yml
ansibleユーザーを他のユーザーとサーバーに適用する方法は、私が理解すると思います。
Debian 6、Ubuntu 14.04、Ubuntu 16.04、macOS 10.12、CentOS 7でテスト済み。
README.mdで利用可能な変数をすべて作成したわけではありません。
デフォルト/ main.ymlで 。
結論
端末設定は非常に個人的なものであることを理解しています。私のansibleロールを利用したい人が多いかどうかわかりません。そのため、可能な限りカスタマイズできるようにしました。 使用したい人がいる場合は、問題を残してください。
もちろん、これは最後の構成ではありません。たとえば、この記事を書いているときに、VSHのプラグインマネージャーであるAntigenを見つけました。これはVim for Vimと同様に記述され、oh-my-zshと連携して動作し、プラグインを手動でインストールする必要がありません。 これは、ロールを書くことで解決した問題の1つにすぎません。 使用した人を共有します。
UPD 04/03/2017:抗原を使用して役割を書き直しました。
新しいおいしいプラグインを見つけたいと思うコメントで、どのプラグインが「以前はこれなしで生きていたのですか?」
UPD:CentOSサポートが追加されました、 BeeVeeに感謝します !