query: tag:zsh

ditzのサブコマンド用のZsh補完関数を作ってみました。

.ditz_completion.zsh

pre>>
_ditz () {
compadd ditz help | grep --color=no -o " \([a-z-]*\):" | grep -o --color=no "[^:]*" | xargs
}

compdef _ditz ditz
<<--

ついでに、ditz とtypeするのが結構大変なので

pre>>
alias di="ditz"
<<--

しています。

posted by genki genki on Wed 4 Nov 2009 at 02:44 with 0 comments

Zshでthor (トール)のタスクを補完するための補完関数を作ってみました。

sh>>
_thor () {
compadd thor list | awk "{print \\$1}" | grep "\w" | \ ruby -e "puts ARGF.read.gsub /\\e.*?m/,''" | xargs
}

compdef _thor thor
<<--

See Also

posted by genki genki on Mon 29 Dec 2008 at 17:24 with 0 comments

現在のディレクトリがgitの管理下にあるかどうか判定する方法を思いついたので、
walf443さんの方法
を改良してみました。
こんな感じに、gitで管理されてないディレクトリではブランチ名を表示しなくなります。

ss

実際のzshrcは以下の通り。

sh>>
_set_env_git_current_branch() {
GIT_CURRENT_BRANCH=$( git branch &> /dev/null | grep '^*' | cut -b 3- )
}

_update_rprompt () {
if [ "git ls-files 2>/dev/null" ]; then
RPROMPT="[%:$GIT_CURRENT_BRANCH]"
else
RPROMPT="[%
]"
fi
}

precmd()
{
_set_env_git_current_branch
_update_rprompt
}

chpwd()
{
_set_env_git_current_branch
_update_rprompt
}
<<--

git ls-filesがgitの管理下以外では何も返さない事を利用しています。

追記

  • 2>/dev/null が抜けていたので追加しました。
posted by genki genki on Fri 26 Dec 2008 at 16:33 with 0 comments

先日に参加したRailsイベントfishというものを紹介してもらった。zshbashのようにUnixで使うコマンドシェルですが、fishのフルネーム(Friendly Interactive SHell)からもわかるように、使いやすさと対話的な利用を目的としている。以下の特徴があるらしい:

  • 基本的に色付けをする
  • シンタクスハイライト
  • コマンドやオプションのスペルチェック
  • htmlヘルプ (help打ったらブラウザが起動する)
  • 説付きTAB補完
  • サブシェルがない
  • ミニマルかつシンプルな文法

Mac OS Xでインストールするには:
shell-unix-generic>>
% sudo port install fish
<<shell-unix-generic

Mac OS Xでfishchshしたければ、/etc/shellsfishを追加しなければならない。

shell-unix-generic>>

List of acceptable shells for chpass(1).

Ftpd will not allow users to connect who are not using

one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/opt/local/bin/fish
<<shell-unix-generic

使ってみるとこんな感じ:

  • 書きかけのコマンドが赤色
    fish01.jpg
  • 存在しているコマンドが緑色
    fish02.jpg
  • helpw3mが起動する
    fish03.jpg
  • funcedでビルトインの実装をみる(インデント、シンタクスハイライトあり)
    fish04.jpg
  • manもスマートに補完されている
    fish05.jpg

今までは正直zshbashのほとんどの機能を使っていませんし、しばらくはfishchshしてメインシェルとして使ってみることにする。

posted by lchin lchin on Tue 25 Nov 2008 at 19:43 with 0 comments

merb-genコマンド用にZshの補完関数を作りました。

pre>>
_merb-gen () {
compadd merb-gen | grep '^ *' | awk '{print \$1}' | xargs
}

compdef _merb-gen merb-gen
<<--

.zshrcなどに記述すれば、
以下のような感じで補完出来ます。

pre>>
% merb-gen [TAB]
--debug controller part
--no-color core plugin
-d, flat resource
-f, helper resource_controller
-h, layout session_migration
-p, mailer slice
-s, migration very_flat
app model
<<--

posted by genki genki on Tue 18 Nov 2008 at 03:03 with 0 comments

Macの環境でstat -cが使えなかったので、ついでに以前作成した
Rakeタスク補完関数を書き換えてみました。

sh>>
_rake () {
if [ -f Rakefile ]; then
compadd rake -T | awk "{print \\$2}" | xargs
fi
}

compdef _rake rake
<<--

posted by genki genki on Fri 12 Sep 2008 at 06:52 with 1 comment

Macportsでインストールしたzshは、通常/opt/local/bin/zsh
にありますが、これをchshしようとすると、無情にも

pre>>
chsh: /opt/local/bin/zsh: non-standard shell
<<--

と言われてしまいます。
どうやらMacにはstandard shellというものがあるらしく、
それは/etc/shellsファイルで指定されているようです。
そこで、'/etc/shells'ファイルにMacportsからインストールした
zshのPATHを追加してあげることにします。

/etc/shells

pre>>
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/opt/local/bin/zsh
<<--

これでOk。あとはchshするだけです。

posted by genki genki on Thu 11 Sep 2008 at 20:13 with 0 comments

以前一度紹介しましたが、本来入るべきでないcompadd
が補完候補に出てしまっていたので、
xargsコマンドを使うように書き直しました。

sh>>
_cap () {
compadd cap -T | grep '^cap ' | sed 's/^cap //' | sed 's/ .*//' | xargs
}

compdef _cap cap
<<--

posted by genki genki on Wed 13 Aug 2008 at 17:45 with 0 comments

Zsh用のgit-svnサブコマンド補完関数を書いてみました。

pre>>
_git-svn () {
git-svn --help | grep "^ \w" | sed "s/^ //" | sed "s/ .*//" | sed 's/^/ compadd /'
}

compdef _git-svn git-svn
<<--

git-svn [TAB]でも、git svn [TAB]でも、どちらでも補完できます。

posted by genki genki on Wed 28 May 2008 at 20:30 with 1 comment

EC2onRailsを使うついでにCapistrano用Zsh補完関数を書きました。

.cap_completion.zsh

sh>>
_cap () {
cap -T | grep '^cap ' | sed 's/^cap //' | sed 's/ .*//' | sed 's/^/compadd /'
}

compdef _cap cap
<<--

posted by genki genki on Fri 25 Apr 2008 at 16:36 with 1 comment

RaptのサブコマンドをZshで補完するためのスクリプトです。

.rapt_completion.zsh

sh>>
_rapt () {
rapt help | grep "^ [a-z:][a-z:]*" | sed 's/^ *//' | sed 's/ *.*//' | sed 's/^/compadd /'
}

compdef _rapt rapt
<<--

何度か欲しいと思ったので書いてみました。

posted by genki genki on Thu 24 Apr 2008 at 10:59 with 0 comments

複数人で開発している場合に、新しく作成したファイルを
svn addし忘れて、Commitもれを発生させてしまうと、
テストが走らなかったり、開発を止めてしまったりと、
様々な悪影響が発生してしまいます。

今回は、Commitもれを防ぐために僕が使ってる方法を紹介します。

やってることは単純で、以下のalias設定を.zshrcに登録しています。

shell>>
alias svn_new='svn stat | grep "^?" | sed "s/? tmp.//" | sed "s/? log.//" | grep .'
<<--

svn statの結果から、log/とtmp/ディレクトリの中身を除外してるだけですね。
あとは、svn_newコマンドを実行すれば、svn add
し忘れてるファイルが無いかどうか簡単に確認できます。

しかし、実際にはconfig/database.ymltagsファイルなど、
svn addする必要が無いファイルがだんだん増えてくるので、
そのような場合には適切にsvn:ignoreプロパティを設定していきます。

僕は、手間を省くために、以下のようなzsh関数を作って使っています。

~/.zshrc

shell>>
svn_ignore () {
svn pset svn:ignore -F <(echo $1 && svn pget svn:ignore | sed '/^$/d') $2
}
<<--

使い方はこんな感じです。

shell>>
% svn_ignore something_new_file ./
<<--

svn:ignoreに設定されたファイルは、svn_newに出てこなくなります。

更新履歴

  • 2007/12/14 CometのやりすぎでComitになっていたのでCommitに訂正。
posted by genki genki on Thu 13 Dec 2007 at 12:45 with 0 comments
記事の引越しから漏れていたのでサルベージ。

zsh用のscript/generateおよびscript/destroyの補完関数です。
以下のスクリプトを.zshrcなどに書いておけば、
./script/generateに続けてTABキーを押す事で
generatorの入力を補完できます。

~/.zshrc

shell>>
_generate () {
if [ ! -f .generators ]; then
./script/generate --help | grep '^ [^ ]: ' | sed 's/[^:]:/compadd/' | sed 's/,//g' > .generators
fi
cat .generators
}

compdef _generate generate
compdef _generate destroy
<<--

RubyGems、Plugin、BuildInの3種類のgeneratorを検出して補完します。
検出動作が重いので、カレントディレクトリにキャッシュファイルを作成して
2度目以降の補完を高速化しています。
generatorを追加した場合など、キャッシュを無効化したい場合は

shell>>
$ rm .generators
<<--

でキャッシュファイルを削除してください。

補完が重くても余計なファイルが生成されるよりはマシ、
という場合はこちらをどうぞ。

shell>>
_generate () {
./script/generate --help | grep '^ [^ ]*: ' | sed 's/[^:]*:/compadd/' | sed 's/\,//g'
}

compdef _generate generate
compdef _generate destroy
<<--

誰かが作らないかなあ、と思って待っていたのですが、
なかなか出て来ないので自分で作りました。
もっと良いものがあったら教えていただけると嬉しいです。

posted by genki genki on Mon 26 Nov 2007 at 05:06 with 0 comments