■掲示板に戻る■ 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50



レス数が1000を超えています。残念ながら全部は表示しません。

zsh入門

1 :名無しさん@お腹いっぱい。 :2001/05/19(土) 23:42
なんかそろそろzshの補完機能をじっくりいじろうかなぁと思ったんですけど
compctl読みにくいですねぇ…
自分で書いたのもいまいちしっくり来ない…

ってことでみんなの.zshrc(主に補完部分)を見せ合いっこしませんか?
自分はまともなの書けてないですが…
zstyleも勉強したいので大歓迎
 というか参考文献が少なすぎるのでかなり喜ばれるはず

いままで他のshellを使ってきた方もこれを機に一緒に勉強しましょー

とりあえず自分のオプションはこんな感じです。tcshライクになってます。
bindkey -e
bindkey ' ' magic-space
bindkey '^W' kill-region
bindkey '^Q' reverse-menu-complete

setenv () {export $1="$@[2,-1]"}
unsetenv (){unset $1}

setopt prompt_subst
setopt nohup
setopt auto_cd GLOB_COMPLETE
setopt auto_remove_slash
setopt extended_history hist_ignore_dups
setopt prompt_subst
setopt pushd_ignore_dups rm_star_silent sun_keyboard_hack
setopt extended_glob list_types
setopt no_beep always_last_prompt
setopt cdable_vars sh_word_split auto_param_keys no_clobber
setopt complete_aliases setopt complete_in_word auto_list
unsetopt list_ambiguous auto_menu



754 :名無しさん@お腹いっぱい。 :02/09/09 23:38
backward-kill-word がすげー使いにくいけど、こういうものなの?
Emacs使いの人はどうしてます?

755 :名無しさん@お腹いっぱい。 :02/09/10 00:22
>>754
どういうこと?漏れは使いやすいと思うが。

756 :名無しさん@お腹いっぱい。 :02/09/10 00:47
C-r で履歴をインクリメンタルサーチするのに
キーワードを複数指定出来たらいいな〜。
そういうのはインクリメンタルサーチって言わないのか。

757 :名無しさん@お腹いっぱい。 :02/09/10 01:46
>>756
絶対言わないと思う。

758 :名無しさん@お腹いっぱい。 :02/09/10 01:48
と思ったが、インクリメンタル正規表現サーチとかできたら嬉しいかもね。
俺には絶対実装できんが。

759 :名無しさん@お腹いっぱい。 :02/09/10 02:38
>>758
% ls
% echo ls
ls
% ls
bck-i-search: ^ls_

って感じで標準で出来ると思うんだけど。


760 :名無しさん@お腹いっぱい。 :02/09/10 09:33
>>754
あー判る判る。多分、さくっと行き過ぎるということだね。
俺も tcsh から乗り換えたときに使いにくいと思ったところだ。

自分が昔書いた>>192 が参考になるんじゃないかな。

761 :名無しさん@お腹いっぱい。 :02/09/10 09:37
具体的にどう使いづらくて、どう動作して欲しいのか書いてくれると
「あ〜、そういう意見もあるのか〜」って参考にできるので嬉しいです

762 :名無しさん@お腹いっぱい。 :02/09/10 13:32
>>759
お、そんなのができるんですか。
でも、正規表現じゃないですよね。
指定できるのは先頭のアンカー ('^') だけで。

たとえば、"w3.*asahi" みたいに正規表現書ければ、
>>756 の言うキーワード複数指定のようなことができるな〜、
と思ったわけです。

763 :名無しさん@お腹いっぱい。 :02/09/10 15:47
つまりWORDCHARSに/がないとき
hoge/hage
ここで^w
hoge/
ここで^wをすると全部消えるのが嫌ってこと?
tcshやvimだと/だけ消えるね。




764 :754 :02/09/10 16:56
>>763
WORDCHARS ってものがあったのか。知らなかった。ありがと。
これで Emacs-like な動きにできそうだ。

うちだと ~/.z* にも /etc/z* にも設定してそうなところはないのに

% echo $WORDCHARS
*?_-.[]~=/&;!#$%^(){}<>

ってなってるのだけど、この値はデフォルトで設定されてるの?


765 :760 :02/09/10 21:01
>>763
例えば ls /usr/share/locale/ とした時点で backward-kill-word すると、
デフォルトではサクっと /usr/share/locale/ 全体が消えてしまいます。
tcsh の backward-delete-word だと /usr/share/ が残ります。

どちからと云うと自分は tcsh の挙動の方が嬉しいわけです。tcsh で
馴れたせいもあるでしょうが。

結局、

tcsh-backward-delete-word () {
local WORDCHARS="${WORDCHARS:s#/#}"
zle backward-delete-word
}
zle -N tcsh-backward-delete-word
bindkey '^[^H' tcsh-backward-delete-word

としています。^W は kill-region に割当てています。

>>764
> この値はデフォルトで設定されてるの?
zsh の実行ファイルに埋め込まれているようです。

グローバルに WORDCHARS をいじると他の機能の
挙動も変わってしまうので、止めておいた方が無難
でしょうね。

766 :名無しさん@お腹いっぱい。 :02/09/10 23:52
*(m-1)で1日以内に変更されたファイルを表すことができるのですが、
分、時間単位の指定はできるのでしょうか?

767 :760 :02/09/11 00:01
>>766
時分秒にそれぞれ h、m、s が使えるよ。
*(mh-1) で一時間以内に更新のあったファイル

768 :名無しさん@お腹いっぱい。 :02/09/11 01:03
>>767
mh,mm,msと指定しなければいけないのですか。
ありがとうございました。

769 : ◆CIDts34E :02/09/12 17:34
Cygwinでzshを使っているのですが,
ファイル名にcygpathをかませたい時はどう設定したらよいのでしょう?
例えば,
fiber `cygpath -w -a $(FILE)`
みたいに.
こうすることが出来れば, Win32のアプリケーションとの連携も楽になるのですが...

770 :名無しさん@お腹いっぱい。 :02/09/13 11:00
sudo したときに /sbin /usr/sbin が補完できるようにしたいんですがどうし
たらいいですか?

771 :名無しさん@お腹いっぱい。 :02/09/13 22:08
>>770
普段からPATHに追加しておけば?

772 :名無しさん@お腹いっぱい。 :02/09/14 07:39
*.aaa を *.bbb に一発で変える方法教えて下さい。
mv *.aaa *.bbb じゃ出来ないです。

773 :名無しさん@お腹いっぱい。 :02/09/14 08:42
>>772
% for name in `ls`
for> mv $name `echo $name|sed 's/aaa/bbb/'`


774 :名無しさん@お腹いっぱい。 :02/09/14 09:04
>>773
rename aaa bbb *.aaa
でいいじゃん

775 :名無しさん@Emacs ◆UMAAAAAA :02/09/14 11:41
(゚д゚)ウマー

776 :名無しさん@お腹いっぱい。 :02/09/15 13:23
Linuxじゃないとrenameって入ってないんじゃない?

777 :772 :02/09/15 13:29
そうなんですか。だからうちの FreeBSD には rename(1) がないのか。
>>723さんの方法を使わせてもらってます。

ってか zsh 関係なかったですね。
なんか zsh の機能でズバズバって出来ると思ったのですが。


778 :名無しさん@お腹いっぱい。 :02/09/15 19:11
結局、mv を使う限りループを作らないといけないしね。
もうちょっと簡単に書くと

% for f in *.aaa; do mv $f $f:r.bbb; done

ぐらいか。適当にいじってエイリアス、というより関数を作って
おけば、汎用的に使えるでしょう。

779 :名無しさん@お腹いっぱい。 :02/09/15 19:12
>>777
perl-5.6.1.tar.gz::perl-5.6.1/eg/rename
Linuxだからどうこうとかは関係ありません

780 :名無しさん@お腹いっぱい。 :02/09/15 19:48
4.0.6に対応したeucパッチまだかなぁ、、、

781 :名無しさん@お腹いっぱい。 :02/09/15 19:50
sedはいらないのだ。ムフフ
for f in *.aaa; do mv $f $f:s/aaa/bbb/; done

782 :名無しさん@お腹いっぱい。 :02/09/15 20:12
>>779
明らかにそれとは別物だが…

783 :名無しさん@お腹いっぱい。 :02/09/15 22:28
zshっぽく書くなら
% for f (*.aaa) {mv $f ${f%aaa}bbb}
じゃない?


784 :名無しさん@お腹いっぱい。 :02/09/19 22:26
>>596
この、補完対象にディレクトリを含めるのってどうやればいいのですか?

785 :名無しさん@お腹いっぱい。 :02/09/24 16:30
zsh4.0.6を入れたのですが、StartupFiles/zshrcを使うと
command not found: bindkey
command not found: zstylec
などのエラーが大量にでます。
インストール失敗ですか?

786 :名無しさん@Emacs :02/09/24 17:04
>>785
(゚Д゚)ハァ?

787 :785 :02/09/24 21:51
>>786
スマソ。やり直したらできました。初心者のくせにMakefile弄ったからだ・・・

788 :名無しさん@お腹いっぱい。 :02/09/25 15:29
[質問]

$ cd tmp

と打つと、

cd ~/tmp

のように変換されてヒストリに記録することはできますか?


789 :名無しさん@Emacs :02/09/25 16:04
できません

790 :名無しさん@お腹いっぱい。 :02/09/26 00:04
>>788
その展開の規則が良く分からない。
カレントディレクトリに tmpがなければ、$HOMEを見に行って展開するってことか?


791 :名無しさん@お腹いっぱい。 :02/09/26 08:39
>>790
$CDPATH 見てるんじゃないの?


792 :名無しさん@お腹いっぱい。 :02/09/26 11:24
>>790
最終的には `cd ' と入力したあとに、M-p でヒストリを検索したいのです。

たとえば、

~ $ cd tmp
~/tmp $ cd foo
~/tmp/foo $ cd bar
~/tmp/foo/bar $ cd

ここで、M-p で
cd ~/tmp/foo/bar, cd ~/foo/foo, cd ~/tmp がヒットして欲しい。



793 :名無しさん@お腹いっぱい。 :02/09/26 12:04
AUTO_PUSHD を有効にして cd -TAB... じゃ駄目ですか。

794 :名無しさん@お腹いっぱい。 :02/09/26 14:16
>>793
792じゃないけどサンクスそれカコイイな。

795 :名無しさん@お腹いっぱい。 :02/09/26 14:33
>>793
792だけど、それ(・∀・)イイ!!



796 :名無しさん@お腹いっぱい。 :02/09/26 14:36
(・∀・)イイ!! と思ったが、やっぱ使いにくかった


797 :名無しさん@お腹いっぱい。 :02/09/26 14:39
2つのディレクトリ間を行ったり来たりするのは、「cd -」を
連発すればいいのだが。
3つ、4つのディレクトリ間を行き来するとき、なんかいい方法がないかな。


798 :名無しさん@お腹いっぱい。 :02/09/26 14:46
>>797
pushd, popd とか?

799 :709 :02/09/26 15:22
man見たらわかりました。
autoload -U compinit;compinit -u
でできました。


800 :793 :02/09/26 15:43
>>796
書いておいて何ですが、実は自分も滅多に使いません(w

「-」を打つのがどうも面倒。それに履歴に cd -3 などが残っても
使い廻しに利かないというのもあります。まあ、HIST_IGNORE_SPACE を
有効にしていれば、頭にスペースを入れれば済む話ですが、cd を使うのに
そこまで神経を使いたくないし。

>>797
以前どこかで手に入れた
alias gd='dirs -v; echo -n "select number: "; read newdir; cd -"$newdir"'
というのはどうですか。対話的になってしまいますが。AUTO_PUSHD を有効に
しないと余り効力はありません。

これはそこそこ使ってます。

801 :名無しさん@お腹いっぱい。 :02/09/26 18:55
漏れはgd使ってるけどcd -の方がいいな。
まあ履歴のことは気にしない。
「-」を打つのが面倒ってのはよくわからんが。

802 :名無しさん@お腹いっぱい。 :02/09/26 19:36
*~hogeでhoge以外のファイルに展開されるけど,
ディレクトリを指定して./*~hogeとするとhogeも入ってしまう。
なぜだろう。

803 :名無しさん@お腹いっぱい。 :02/09/26 20:00
>>802
手許ではちゃんと動作しているように思えるが…
具体例キボンヌ

804 :名無しさん@お腹いっぱい。 :02/09/26 21:17
>>803
まじですか。3.05,4.01,4.06で試したけど全部なりました。
具体例ってそのままなんですが、
ls -d *~hogeだとhoge以外のファイルが表示されるのですが、
ls -d ~/*~hogeだとhogeも表示されます。

805 :名無しさん@お腹いっぱい。 :02/09/26 21:53
>>804
すまん、試したときにワイルドカードを使っていた。
確かにそのとおりの結果になるねえ。
ls -d ~/*~*hoge
だと大丈夫なのだが。

~の解釈が変わってしまうのだろうか

806 :名無しさん@お腹いっぱい。 :02/09/26 23:43
E の文字のエコーバックが1秒くらい遅れるんだけど、うちだけ?
おなじターミナルでbashやtcshだとなんともないんですが。

807 :名無しさん@お腹いっぱい。 :02/09/27 00:11
>>802
./*~./hoge としないとだめなのかな?

808 :名無しさん@お腹いっぱい。 :02/09/27 01:41
>>797
screenを使うとか。
いや、おれは実際にそうしてる。

809 :名無しさん@お腹いっぱい。 :02/09/27 09:07
>>801
> 「-」を打つのが面倒ってのはよくわからんが。
ホームポジションから離れているという意味合いだったんですが、
その割には「=」を打つのは苦にならない(w

多分、「~-」としなけりゃならなかった時代の感覚が残っているのかも
しれません。今でもサブディレクトリに入っていこうと思えば省略は
できませんし、当然ながら補完もしてくれません。

手許の zsh(4.0.4) では、^I を expand-or-complete にしていると補完時
の動作が嬉しくないですね。menu 系だと大丈夫ですが。

>>808
実際 screen は使っているのですよ。ただ X 上では幾つか端末窓がある
方が便利なので(移動も早い)、screen はそのうちの一つでしか使ってません。
一画面一窓で使っているので、窓の切替えを screen ではなく X 上の
window manager に頼っている感じです。でもまあ、固定窓に限ったような話
ですかね。

810 :名無しさん@お腹いっぱい。 :02/09/27 14:17
>>805>>807
なるほど。./*~./hogeとしないといけないのか。
実はサブディレクトリのあるファイル以外のファイルを全て削除しようと
おもってやったら、全部消えてしまったという話なんです。
たまたまどうでもいいファイルだったから良かったんですけどね。
削除するまえにechoなりlsなりで確かめなくてはいけませんね。

811 :名無しさん@お腹いっぱい。 :02/09/27 15:14
>>810
> 実はサブディレクトリのあるファイル以外のファイルを全て削除しよう
何通りにも解釈できて事情が判然としない。済まないが、もう少し詳しく
説明してくだされ

812 :名無しさん@お腹いっぱい。 :02/09/27 17:43
>>811
すんません。あるディレクトリにa,b,cの3つのファイルがあったとして、
a以外のファイル(b,c)を削除するということです。
素直にそのディレクトリにcdすればよかったんですけどね。

813 :名無しさん@お腹いっぱい。 :02/09/28 12:15
>>812
ああ、なるほど。そう書いてもらうと、それ以外の解釈のしようがないように
思えてきた(w

試行錯誤したところ、./(*~hoge) のように括弧でくくるとうまくいくみたい。

814 :名無しさん@お腹いっぱい。 :02/09/28 16:43
zsh-4.0.5/Functions/Misc/zmvは便利


zmv -w '**/*.txt' '$1$2.lis'
zmv '(*).txt' '$1.lis'



などね。

815 :名無しさん@お腹いっぱい。 :02/09/29 02:30
>>814 は神!!!

と思った漏れは逝ってヨシ?

816 :名無しさん@お腹いっぱい。 :02/09/29 10:15
どうやって使うの?
zmv っていうコマンドはないんだけど。

817 :816 :02/09/29 10:19
~/.zshrc に
autoload -U zmv
か。Google で調べたらあった。

818 :816=772 :02/09/29 10:22
>>772 なんですが zmv 使えばよかったのですね。
こういうのを探していたんです。

>>814 ありがとう!

819 :名無しさん@お腹いっぱい。 :02/09/29 12:16
FreeBSD 4.7RC zsh 4.0.6 です。

% /usr/local/bin/jman ls
とやると日本語で man が表示されます。

>>725 のように ~/.zshrc に書いて ESC-h で man を表示
させると 英語の man が出ます。
run-help () { LC_CTYPE=ja_JP.eucJP w3mman "$@" }
こんな感じでやれば日本語 man が表示されると思ったのですが駄目でした。

zsh から w3mman で日本語 man を表示させる方法を教えて下さい。

820 :名無しさん@お腹いっぱい。 :02/09/29 13:22
share/zsh/4.0.6/functionsにzなんとかってのたくさんあるね。
なんかzmvの他に便利なものありますか?
でもなんでMiscってのがないんだろ?

821 :819 :02/09/29 13:32
zsh と関係ないっぽいので w3m のスレ行きます。

822 :名無しさん@お腹いっぱい。 :02/09/29 13:35
>>820
> でもなんでMiscってのがないんだろ?
ソースと配置が変わっているだけ

823 :名無しさん@お腹いっぱい。 :02/09/30 20:15
亀レス。
>>800,801
> 漏れはgd使ってるけどcd -の方がいいな。
> まあ履歴のことは気にしない。
> -」を打つのが面倒ってのはよくわからんが。
'cd -'をタイプするのが面倒なので alias bk='cd -' としてます。
2つのディレクトリ間を行き来して作業するには便利。
もちろん gd も使ってますけど。

824 :814 :02/09/30 20:16
ああ、ごめんごめん。
/usr/local/src/zsh-4.0.5/Functions/Misc/zmv
ってのはソースディレクトリ。
tarボール展開したら、この構成になっているはず。
その下にインストールされていないものも色々あるので、
三徳とよいよ。



825 :名無しさん@お腹いっぱい。 :02/09/30 20:37
こういうのをUUの連載でやってほしいな〜。


826 :名無しさん@お腹いっぱい。 :02/09/30 20:37
http://examples.oreilly.com/cookbook/pcookexamples.tar.gz
のなかの
ch09/rename

標準の
/usr/bin/rename
もつ買い方、嫉妬区と良いよ。
とくにperlのrenameはzmvよりある意味強力かも。


827 :名無しさん@お腹いっぱい。 :02/09/30 20:39
日本語変換に何使っているんだ?

828 :814 :02/09/30 21:38
IME2000

829 :名無しさん@お腹いっぱい。 :02/09/30 22:12
>>596 を使って mplayer の補完が便利になった。

% ls -R
a.mp3 b.mp3 a/ b/

./a:
a.mp3 b.mp3

./b:
a.mp3 b.mp3

こういうディレクトリ構成だったとする。

% mplayer a[TAB]

した時に a.mp3 だけが選択されてしまう。a/b.mp3 を補完したかったかも
しれないのに。(この例では a/ が短いからいいけど長いと大変)

どうにか対処出来ないでしょうか?


830 :名無しさん@お腹いっぱい。 :02/10/01 02:33
>>829
infoより。

zstyle ':completion:*' file-patterns \
'%p:globbed-files *(-/):directories' '*:all-files'

mpalyerだけこうしたいなら、 ':completion:*:*:mplayer:*'

831 :829 :02/10/01 02:42
>>830
> mpalyerだけこうしたいなら、 ':completion:*:*:mplayer:*'

それをどこに書くのでしょうか?

832 :名無しさん@Emacs :02/10/01 11:56
>>831
info

833 :829 :02/10/01 11:59
info に書くのですね。ありがとうございました。

834 :829 :02/10/01 12:01
と、いうのは冗談で、~/.zshrc に書いたら望みように動きました。
ありがとうございました。

835 :名無しさん@お腹いっぱい。 :02/10/01 12:17
>>602 のように zstyle だけで済ましてもよかったのではないか

836 :名無しさん@Emacs :02/10/01 17:49
${PATH//:/ } を展開すると

/usr/bin\ /bin\ /usr/X11R6/bin\ /usr/local/bin

と展開される。
backslash が出ないようにするにはどうしたらいいでしょうか?


837 :名無しさん@お腹いっぱい。 :02/10/01 18:24
${(s/:/)PATH} とか

838 :836 名無しさん@Emacs :02/10/01 19:10
>>837 できました、サンクス。


839 :名無しさん@お腹いっぱい。 :02/10/02 23:47
PATH限定なら $path とか。


840 :名無しさん@お腹いっぱい。 :02/10/08 03:17
zshって、cshみたく
while
 処理
 @ num++
end


ってな書き方できますか?

841 : :02/10/08 04:23
まずやってみれ。

842 :名無しさん@お腹いっぱい。 :02/10/08 17:59
>>841同意

843 :名無しさん@お腹いっぱい。 :02/10/08 21:12
UNIX USER11月号

・GLOBオプション有効時のファイル名|ディレクトリ名展開
・EXTENDED_GLOBオプション有効時のファイル名|ディレクトリ名展開

844 :マルチホームディレクトリ :02/10/09 00:49
$HOME を変えても ~ が変わらない...
どうやったらいいんでしょうか?

845 :名無しさん@お腹いっぱい。 :02/10/09 02:18
>>844
ハァ?何がしたいの?

846 :名無しさん@お腹いっぱい。 :02/10/09 04:43
>>844
ちょっと面白かった。3点

847 :名無しさん@お腹いっぱい。 :02/10/09 05:27
あだ名を付けてもらっても 戸籍が書き換わらない...
どうやったらいいんでしょうか?

みたいな感じ?

848 :名無しさん@お腹いっぱい。 :02/10/09 08:52
>>844
$ HOME=/home/foo/bar zsh


849 :844 :02/10/09 12:04
>>845
mkdir ~/tcsh ~/zsh
echo 'export HOME=$HOME/zsh;zsh' > .bash_profile
とやると,zsh専用のホームディレクトリができるのですが,
$HOMEはだませても~がだませない.それではまっています.
スクリプトの「~」は「$HOME」に変更したけど,
「vi ~/.vimrc」とかできない!
>>847
そんな感じです.たいていの場合困らないけど,ときどき困る.

850 :名無しさん@お腹いっぱい。 :02/10/09 13:03
>>848
ありがとう!できました.848は神

851 :名無しさん@お腹いっぱい。 :02/10/09 13:24
(´-`).。oO(不思議なことをするひとがいるものだ・・・)

852 :名無しさん@お腹いっぱい。 :02/10/09 16:48
( ゚Д゚)ポカーン

853 :名無しさん@お腹いっぱい。 :02/10/09 17:04
ほんとだ。これ結構おもしろいかも。
当然.zshrcがないからデフォルトになってたよ。


次100 最新50 (10:00PM - 03:00AM の間一気に全部は読めません)

read.cgi ver5.26+ (01/10/21-)