Hatena::ブログ(Diary)

hchbaw記

2010-05-26

zshで自動補完したい

Incremental completion on zsh(incr-0.2.zsh)を公開してくださっている y.fujii さん感謝です!本当に、本当にありがとうございます!!

zsh付属のincremental-complete-wordが使いづらくって、incr-0.2.zshにたどりつきました。そしてincr-0.2.zshをできればメニュー選択と一緒に使いたくって、改造してみてしまいました><

以下のような具合です。

http://gist.github.com/raw/414589/a3f9c30c464823eb7c46eb41558ed68ad99961c5/auto-fu.gif

(アニメーションgifです。)

使い方です。自分では、

% source auto-fu.zsh; zle-line-init () { auto-fu-init; }; zle -N zle-line-init

と、`zle-line-init` 内で `auto-fu-init` を呼ぶようにしています。

gistはコチラ http://gist.github.com/414589

改造した結果として、かなりじゃじゃ馬な使い心地になっちゃっております。そして既知のバグとかもあるのですけれども、自分にとってはどうにかなんとか使えないこともないかな、という水準まできたかしらん、と思っています。

y.fujii さん感謝です、ありがとうございます!!

追記

使い方のところで、

% source auto-fu.zsh; zle-line-init () { aufo-fu-init; }; zle -N zle-line-init

となっていたのを

% source auto-fu.zsh; zle-line-init () { auto-fu-init; }; zle -N zle-line-init

と、タイポの修正をしました。

追記その2

id:mooz さんに教えていただいたのですけれども、なんかスラッシュが余計についちゃいます。

moozさんのツイート: "@hchbaw 一つ質問なのですけれど, cd /ho などと入力して TAB を押すと, 僕の環境では cd /home// のように補完が行われてしまいます. これは想定された挙動でしょうか?"

とっても詳しいレポートをありがとうございます!

とりあえずの対応になっちゃうのですけれども、

zstyle ':completion:*' completer _oldlist _complete

のように、_oldlist を先頭に持ってきてください。ごめんなさい、創っているとき上のように設定しちゃっていて、この設定での挙動に依存しちゃっております><

追記その3

id:tyru さん、

http://gist.github.com/414589#gistcomment-2936

読み込みでエラーになっちゃうようです。レポートありがとうございます。

auto-fu.zsh を読み込むさいには、unsetopt sh_wordsplit してくださいませ。m(__)m

追記その4

id:tyru さん、

Twitter / ?

ハイ。correctほしいです。

補完候補とかけはなれた入力の扱いがダメなのでどうにかしたいです。

というのも、普段から

zstyle ':completion:*' completer _oldlist _complete _match _ignored _approximate

という completer にしています。ここでの苦肉の策として、今のところ自分では、入力していて'corrections (errors:' と出ちゃったり、_match 使ったりした場合には、

undo してタブを押す、

ということで凌いでいます。(スクリプトの XXX: のところ)

是非ともどうにかしたいです><

追記その5 (2010-05-27)

id:tyru さんからトラックバックでおしえていただきました!ありがとうございます。

こちらでもcorrectされてました!もしcorrectされなくなっちゃった向きには、

「zshで自動補完」 + correct - Humanity

を試してみてくださいね。教えていただいたとうりにやるとcorrectされるようになります、ありがとうございます!

参考までにこちらでは、

zstyle ':completion:*' completer _oldlist _complete _match _ignored _approximate

にしていました。_historyが名前からして便利そうですね!

_listと_prefixいろいろありますよね。

_expandについては、ふれられている id:voidy21 さんの、

zshのzstyleでの補完時の挙動について - voidy21の日記

% vim *.py

のときの挙動の方が、自分も好きです!

(_expandを抜いた場合にこの好きな挙動になるのだけれども違うかしらん…)

追記その6 (2010-05-27)

id:edvakf さん。

ブクマコメで教えていただいたレポートありがとうございます、そしてごめんなさい!

どうやら、

setopt autoremoveslash

してあるとスラッシュが2つついちゃうようです。

いまのところ、_oldlistを有効にしつつ、unsetopt autoremoveslashして使ってくださいませ。

ゴメンナサイごめんなさい><

追記その7 (2010-05-30)

id:hamaco さん。

トラックバックで教えていただきました。ありがとうございます!

auto-fu.zsh入れてみた - hamaco's diary


一度に画面に入りきらかなったときに出しているメッセージなどのタイポ修正しました。ありがとうございます!

追記その7 (2010-06-01)

id:tarao さん。

トラックバックで機能強化されているのを教えていただきました。ありがとうございます!

auto-fu.zshを使う+キャンセルできるようにする - 貳佰伍拾陸夜日記

そして、自分のコードが、zshのわりにいろいろ設定できるようになってなっていなくって本当にごめんなさい、精進します><

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証