xyzshとは何か?
インタラクティブシェルです。perl, rubyなどスクリプト言語からテキスト処理コマンドを輸入しています。例えば
$ cat data
土井 イデオ
楠木 正信
辻 京子
$ cat data | each ( | chomp | split | lines 1 0 | join | pomch )
イデオ 土井
正信 楠木
京子 辻
という感じです。
あとはzshから便利な機能(メニュー選択、右プロンプト、コマンドラインスタック、カスタマイザブル補完)を輸入しています。
珍しいのはmigemoを使った、日本語ファイル名の補完で、例えば
~ $ ls
あああいいい あああ
~ $ ls a[TAB]
~ $ ls あああ
あああいいい あああ
~ $ ls あああi[TAB]
~ $ ls あああいいい
という感じです。
配布元
ライセンスはMITライセンスです。好きに改変、改良、コピーを行なって構いません。
githubでのプロジェクトのforkも歓迎します。
コンパイル
xyzshはディストリビューションであまりパッケージになっていません。例外はFedoraでyum install xyzshでインストールできるはずです。(しかも、バージョンは新しいことが多い)
コンパイルするためには、以下の依存パッケージを解決する必要があります。
gcc, GNU make, libc, libm, libncurses(w), oniguruma, iconv, (cmigemo)
ncursesはncurseswでないと端末制御を行なうコマンドで日本語が扱えません。
onigurumaなどはyum系ではoniguruma-devel, debian系ではlibonig-devなどと-devel, -devと開発バージョンをインストールする必要があります。開発バージョンにはヘッダーやライブラリが含まれています。それが必要です。
cmigemo-devel,cmigemo-devは任意ですが、あるとmigemoでファイル名の補完が行なえることが出来ます。
migemoの拡張ライブラリは動的ライブラリになっていて、ロードは実行時に任意で行なえるので、一応コンパイル時に指定しておくことをお勧めします。
依存関係が解決できたら、以下をタイプしてください。
./configure --with-optimize --with-system-migemodir=/usr/local/share/migemo/ --with-migemo
make
sudo make install
./configureでこけたら、何か依存関係が足りません。もう一度確認してください。
巧くコンパイルできれば、/usr/local/binに実行ファイルが、/usrlocal/ext/xyzshに設定ファイルがインストールされます。
xyzshはライブラリを作成するので、ライブラリが作成されたディレクトリ、通常は/usr/local/lib、を/etc/ld.so.confに追加して
以下を実行してください。(linuxでは)
sudo ldconfig
OSXでは
export DYLD_LIBRARY_PATH=/usr/local/lib
と~/.bashrcに書いておいてください。
xyzshの実行にはlibxyzshが必要なので、それをサーチさせる必要があります。
マニュアル
詳しくはソースに同封してあるUSAGE.jaを読んでみてください。
migemoの補完ができないよ。
デフォルトではロードされていません。
load -dynamic-library migemo.so
を実行しないといけません。
便利な使い方
xyzsh上でプログラム開発中、vim上でマクロでも対処できない不規則な大量の文字列の変換が出てきた場合
xyzshのテキスト処理の出番です。
そのテキストをV --> :w dataとして保存して
/home/ab25cq/repo/xyzsh > cat data | ここにテキスト処理を書く > data2
のようにして処理してします。
で、data2の内容をまた元のソースに張り付ければ良いです。
テキスト処理は、sub, sub -global, split, join, scan, =~ , x, combine, count, index, rindex, lc, length, lines, lstrip, rstrip, strip, printf , quote, squeeze, succ, substr, tr, uc, chompなどが使えます。詳しい使い方はhelpしてみてください。
xyzshはインタラクティブにも使えるので実際に試せば使い方は、すぐ分かるはずです。
あとはコマンドライン補完はxyzsh自身で書くことが出来るので、それの補完カスタマイズ処理を書くとかですね。
あまり巧い使い道が思いつかない、、、orz
まあ、普段のperlやrubyの代わりに、xyzshのワンライナーで書くと面白いかもよ、程度です。上の処理もperl, ruby,sed, awkで出来ますよね、、、。
そうそうCTRL-Xでワンライナーの実行結果を張り付けることができます。
~/.xyzsh/macroを編集してみてください。
CTRL-Xを押すとその一覧が出てきて、ワンライナーの実行結果を張り付けることが出来ます。
whoami | chompならユーザー名を張り付けたりします。
あとmenuコマンドも便利です。
~/.xyzsh/menuに書いたワンライナーを選択して一発実行ができます。
僕はxyzshで書いた便利なスクリプトは全部ここに書いていってます。他の環境へ持っていくのも簡単ですし。
mfiler4の設定ファイルの記述言語としては、mfiler2時代のRubyの方が良かった気がしてますが、Rubyの組み込み予定はありません。
最終更新:2014年01月26日 23:55