zshやら便利コマンドのあれこれ備忘録。alias書いたり.zshrc読み書きする用。

キーバインドを追加する

zle -Nで関数fugaをウィジェット登録して、bindkeyで登録したウィジェットをキーにバインドする。

ワイルドカードの展開をしない

文字列操作

文字列置換

列で切り出し

条件切り出し

条件削除

単純集計

条件集計

aliasの定義とグローバルエイリアス

-gをつけるとグローバルエイリアスでどこの個所に書いても動く

変数のsubstring

変数計算

小数計算を含む場合はbcコマンドを使う

小数点以下切り捨て

四捨五入

変数展開

${var:=default}を使うときはそのままだと値が評価された後にコマンドとして再度評価されるので、何もしないコロンコマンドでエラーを回避すると良い

変数の文字列長

setコマンド

引数を再セットできたり色々できる

zshあれこれ

ZLE

キーバインドで関数を呼び出したときに、現在のzshに入力されているバッファの値を参照することができる

  • BUFFER => バッファ全体の値
  • LBUFFER => カーソルから左の値
  • RBUFFER => カーソルから右の値
  • CURSOR => カーソルの位置

BUFFERを操作したり、入力値をみてショートカットキーの振る舞いを変えたりすることが可能。

.zshrc vs .zshenv

.zshrcは対話シェルで読み込まれるが、シェルスクリプトの実行時には読み込まれない。シェルスクリプト実行時にも読み込みたい場合は.zshenvに書く

zshでコメントを打つとbad patternと怒られる

この場合は、以下の設定を.zshrcなどに入れればOK

nocorrect

zshはタイポと思われる入力コマンドに対して正そうとしてくる。

このお伺いを無効にするのがnocorrectコマンド

autoload

zshの関数を遅延読み込みする仕組み。ファイル名を関数名、ファイル内のスクリプトを関数の処理として関数が登録される。検索対象のディレクトリは環境変数FPATHで管理される。

はcompinitという補完をする関数を遅延読み込みしてくれる(Uオプションを付けるとaliasの展開をしない=自分の作ったaliasが関数内に干渉することがなくなる)

PROMPT

プロンプトを変更したい場合はPROMPT変数をいじるとか環境変数ベースで色々できる。

ビルトインコマンド

  • history コマンドは fc -l と同じらしい
  • declare コマンドは typeset と同じらしい

コマンドの有無

$commands => パスの通ってるコマンドのハッシュ

$commands[command_name] => コマンドのパス

$+commands[command_name] => パスの通ってるコマンドが存在すれば1、そうでなければ0

その他便利なコマンド

expect

対話シェルでの各入力を自動化できる。vagrantだとこんな感じで書ける

jq

json操作を色々やるコマンド。使い方は省略。

nkf

文字エンコードを操作するコマンド

urlエンコード

urlデコード

base64

文字通りbase64エンコード、デコードするコマンド

peco

インクリメンタルサーチをするコマンド。これとkeybind、alias、function、各種文字列操作を組み合わせるとめっちゃ捗る。

たとえばこんな感じで書くとディレクトリをインクリメントサーチして選択したディレクトリに移動できる。

keybind+ZLEの変数と組み合わせると更に便利

xargs

標準入力を引数に展開するコマンド。使い方は省略。

pbcopy

macOS限定コマンド。標準入力をクリップボードにコピーする。Clipy等のクリップボードアプリと組み合わせると更に便利。

GNUのdate

N日前とかの設定が簡単にできるので便利

参考URL