トップページunix
981コメント260KB

zsh その4

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。05/02/02 20:03:26
zshのスレその4です。

過去スレ
zsh入門
http://pc.2ch.net/test/read.cgi/unix/990283346/
zsh入門 パート2
http://pc3.2ch.net/test/read.cgi/unix/1036324177/
zsh その3
http://pc5.2ch.net/test/read.cgi/unix/1080002786/

>>2-3リンク
0585名無しさん@お腹いっぱい。2006/12/29(金) 19:08:30
>>583
ありがとです
>>584
そうです。ありがとうございます
コマンドラインスタックは push-line なんですね
ずっと buffer stack で探してました…。
0586名無しさん@お腹いっぱい。2006/12/30(土) 00:30:21
>>585
Esc-q にbindされている関数の名前だけ分かればいいなら
bindkey |grep q
すりゃわかると思う。
一覧ではないから>>580の答えではないが。

>>581はC-qがsttyで割り当てられてるって話でそ。
C-s/C-qなんて今更使わんが。
0587名無しさん@お腹いっぱい。2006/12/30(土) 01:41:47
stty で奪われてたら zsh で扱いたくても扱えないでそ

> C-s/C-qなんて今更使わんが。

「使わない」には同意だけど大抵設定はされてるでしょ
0588名無しさん@お腹いっぱい。2006/12/30(土) 11:53:03
>>586
普通 M-x describe-key-briefly でそ?
0589名無しさん@お腹いっぱい。2007/01/05(金) 01:43:53
HIST_SAVE_NO_DUPS と HIST_IGNORE_ALL_DUPS ってどう違うんですか?
zsh のマニュアルによると

HIST_SAVE_NO_DUPS
When writing out the history file, older commands that duplicate
newer ones are omitted.

HIST_IGNORE_ALL_DUPS
If a new command line being added to the history list duplicates
an older one, the older command is removed from the list (even
if it is not the previous event).

こういう違いがあるようなんですが、よくわかりません。
0590名無しさん@お腹いっぱい。2007/01/05(金) 04:50:28
重複削除をどの時点で行うかが違う。

よくわかりませんで思考停止するんじゃなくてもうちょっと考えてみなよ。

・どこまでわかっていて、よくわからないのはどの部分なのか、
・わからないところはどのような可能性が考えられるか、
・それらの可能性が本当かを確かめるにはどうすればいいか、

を自分で考えるようにすればもう少し読解力が高まると思われ。
0591名無しさん@お腹いっぱい。2007/01/05(金) 07:16:54
書き込みのあとそれぞれ設定して調べたところ、
前者はシェルを抜けた段階でヒストリファイルの重複を削除するのに対して
後者は即時にメモリ内?のヒストリ重複を削除してるっぽいことがわかりました。
いずれもシェルを抜けた段階でファイルの重複は消されるようなので
設定は片方だけでよさそうですが、
share_history などの設定もいろいろ影響してそうなので
それ以上はつきつめて調べてません。
590 さん、助言どうもありがとうございました。
0592名無しさん@お腹いっぱい。2007/01/05(金) 08:43:16
手元の .zshrc だと

setopt hist_ignore_dups # 前後のダブりのみ消す
setopt hist_ignore_all_dups # ヒストリに追加されるコマンド行が古いものと同じなら古いものを削除

と両方書いてあるな。
説明はmanualのまんまだ。
0593名無しさん@お腹いっぱい。2007/01/05(金) 16:40:36
wiki移転完了(たぶん)
ttp://wiki.fdiary.net/zsh/

XML-RPCでガーーーッと移動してちょこっといじっただけ。
変なとこあったら修正よろしく。
0594名無しさん@お腹いっぱい。2007/01/06(土) 18:38:01
>>593
おつかれ、サンクス
0595名無しさん@お腹いっぱい。2007/01/18(木) 20:02:39
同僚に薦められてzshに移行したばかりのものです。

いきなり質問で恐縮ですが、

コマンドラインで、第二引数だけをヒストリから補完とか可能でしょうか?
可能でしたら方法をお教えください。

具体的には、あるコマンドを(第二引数の)ファイルに実行した後で、
別のコマンドをそのファイルに実行したい時に、簡単な操作で
第二引数を呼び出したいのです。
0596名無しさん@お腹いっぱい。2007/01/18(木) 21:10:44
M-. (insert-last-word) かな?
05975952007/01/18(木) 21:17:18
>>596
おお、ありがとうございました。
できましたw

zshの強烈な補完に感動してます。

ありがとうございました。
0598名無しさん@お腹いっぱい。2007/01/23(火) 06:52:27
predict-on, predict-off を同じキーに配置して
オンならオフ、オフならオンに変更するために predictの状態を知りたいんですが
どうやったら調べられるんでしょうか?
0599名無しさん@お腹いっぱい。2007/01/24(水) 04:17:04
状態を示す変数でも作ればいいじゃないの
0600名無しさん@お腹いっぱい。2007/01/24(水) 05:38:07
>>599
ああ、そうかなるほど。
助かりましたありがとうございます
アホなりになんとかできました
0601名無しさん@お腹いっぱい。2007/01/30(火) 04:58:45
このスレもぼちぼち立ってから2年か。読み返しみると結構レス書いてるな。
実は少人数で廻してるのか。
0602名無しさん@お腹いっぱい。2007/02/06(火) 17:24:08
for i in param1 param2 ...
do
いろんな仕事を param 毎に
done
ってやりますけど,各ループ実行に 2個づつ,3個づつみたいな
パラメータの渡し方って可能でしょうか?

python でいうところの
for i,j in ( (x1,y1), (x2,y2), ...)
とすると $i, $j でそれぞれ x1, y1 が参照できるみたいな
ことなんですが。
0603名無しさん@お腹いっぱい。2007/02/06(火) 19:23:28
関数の中で
while [ $# -gt 0 ]
do i=$1;shift;j=$1;shift
...
done
とかやればいいんじゃないの?
0604名無しさん@お腹いっぱい。2007/02/06(火) 19:42:32
for i j in param1 param2 ...
06056022007/02/07(水) 02:05:24
>603
なるほど〜 とおもったところで
>604 ってナンだろう? と目を擦って…

ガーン!!! そんなのアリだったのか〜

info zsh したら確かにそう書いてある!!

for NAME ... [ in WORD ... ] TERM do LIST done
.snip.
More than one parameter NAME can appear before the list of WORDs.

ありがとうございます
0606名無しさん@お腹いっぱい。2007/02/09(金) 09:38:07
MYCOM コラム『漢のzsh』
ttp://journal.mycom.co.jp/column/zsh/001/
こんなん始まったね。
0607名無しさん@お腹いっぱい。2007/02/09(金) 11:06:01
>>606
お、これ面白いね。早速ブクマクした
てゆーか数年zsh使ってたが、"ls -"の後の補完でオプション出るの知らんかった・・・アホだな俺。。
0608名無しさん@お腹いっぱい。2007/02/09(金) 12:40:10
これだけだと面白くなるかどうかまだわからんw
WEB上だけの連載なのかな。

UNIX USER の連載は書籍化もされず、WEB で公開されることもなく
埋もれていくのか。本誌は休刊しちゃったし。
0609名無しさん@お腹いっぱい。2007/02/09(金) 12:59:28
zshマスターだけちぎってUNIXUSER全部捨てた
0610名無しさん@お腹いっぱい。2007/02/09(金) 13:00:39
ん? だからPDF版買えって話じゃないの?
0611名無しさん@お腹いっぱい。2007/02/09(金) 13:54:16
>>610
あれ、そんなの売ってたっけ?
0612名無しさん@お腹いっぱい。2007/02/09(金) 15:08:15
>>606
http://pc10.2ch.net/test/read.cgi/linux/1170503611/351
この後にこんな記事ができるってのは、2chみてんのかね。
0613名無しさん@お腹いっぱい。2007/02/09(金) 15:34:33
その程度の基本的な機能の紹介で2chと結びつけるのは酷だなw
0614名無しさん@お腹いっぱい。2007/02/09(金) 15:36:41
>>612
compinitは設定じゃねーよ。
常識だ。

というわけで、>>606には一応期待しておくが、まだ評価はできん。
0615名無しさん@お腹いっぱい。2007/02/09(金) 16:02:12
>>612の351も>>606-607も本人と決め打つのが2ちゃんだろw
0616名無しさん@お腹いっぱい。2007/02/09(金) 20:21:31
ぜんぶ俺だから
0617名無しさん@お腹いっぱい。2007/02/09(金) 21:22:33
UUの連載も内容的にはけっこう古くなっているから、今更書籍化ってのも難しいんじゃないのかな。

今回のは常識だけど、まぁまだ第1回だから今後に期待だな
0618名無しさん@お腹いっぱい。2007/02/11(日) 15:24:29
MYCOM記事読んできますた
0619名無しさん@お腹いっぱい。2007/02/11(日) 17:14:19
誰かzshrc晒せ
0620名無しさん@お腹いっぱい。2007/02/11(日) 18:10:44
前にキチガイモーオタが晒してたなw
0621名無しさん@お腹いっぱい。2007/02/11(日) 19:22:49
perl -e "print 100"; とすると 100% と表示されます、% は色反転してます
この % を出したくないんですけど、どうすればいいですか
06226212007/02/11(日) 19:38:35
事故解決
0623名無しさん@お腹いっぱい。2007/02/11(日) 19:40:34
>>622
解決方法くらい書きたまえキミぃ。
06246212007/02/11(日) 19:43:17
\n を自動で補ってくれてただけなわけで
こんな機能があったとは
0625名無しさん@お腹いっぱい。2007/02/16(金) 12:59:46
MYCOMのzsh連載、早速第2回が掲載されているね。
今度はプロンプトのカスタマイズ。
0626名無しさん@お腹いっぱい。2007/02/16(金) 13:22:22
PROMPT="%B%{^[[31m%}%/#%{^[[m%}%b " # ただし ^[ は エスケープシーケンス
よりは
PROMPT=$'%B%{\e[31m%}%/#%{\e[m%}%b '
とか
autoload -U colors; colors
PROMPT="%B%{$fg[red]%}%/#%{$reset_color%}%b "
とかのほうがよさそうなもんだが
0627名無しさん@お腹いっぱい。2007/02/16(金) 13:37:22
> エスケープを直接設定ファイルに記述することを嫌って、
> echoやprintfコマンドを使う場合もある。好きな方を選べばいい。
> ただ、コマンドだとプラットフォームごとに動いたり動かなかったりするので、
> ここでは直接書いて使っている
echo も print も printf も組み込みコマンドですがなにか
06286262007/02/16(金) 13:39:46
誤)エスケープシーケンス
正)エスケープ
orz
0629名無しさん@お腹いっぱい。2007/02/16(金) 14:25:01
設定ファイルとかプロンプトとかどうでもいいからさっさと補完の事教えてくれよう
0630名無しさん@お腹いっぱい。2007/02/16(金) 21:36:58
あんまり期待できないな
0631名無しさん@お腹いっぱい。2007/02/17(土) 09:15:00
この程度の事はだれもが通る道だよな
それで記事が書けるなんて
0632名無しさん@お腹いっぱい。2007/02/17(土) 10:59:40
紹介記事(スレ住人的には既に通ってきた内容)と
使いこなし記事(スレ住人も新たな発見がある内容)
は違うよなぁ……
0633名無しさん@お腹いっぱい。2007/02/17(土) 12:02:36
このコラムはどういう層を対象にしてるんだろうか
0634名無しさん@お腹いっぱい。2007/02/17(土) 12:09:58
第1回の出だしに、こんなの書いてある
> ここ1年でzshへ移行しやすい状況が整ってきている。
> はじめるには悪くないタイミングだ。

これからzshを始める人向けだろう
0635名無しさん@お腹いっぱい。2007/02/17(土) 12:34:49
いや、それはわかってるけど…
0636名無しさん@お腹いっぱい。2007/02/17(土) 13:14:31
大地の記事がそんなにいいわけないだろ。
冷静になれ。
0637名無しさん@お腹いっぱい。2007/02/17(土) 18:20:30
むしろこのスレの住人がうなるようなコアな内容を出してきたらウケル。
0638名無しさん@お腹いっぱい。2007/02/17(土) 19:02:04
>>637
ありえない。

もうUNIXUSERの記事の焼き直しでいいよ。
0639名無しさん@お腹いっぱい。2007/02/17(土) 19:06:28
妙な記事書かれるより安心だなw
0640名無しさん@お腹いっぱい。2007/02/17(土) 19:17:27
zshに限らず最近シェル使わなくなってきた
0641名無しさん@お腹いっぱい。2007/02/17(土) 19:54:57
compctlの解説だけで終わったりして
0642名無しさん@お腹いっぱい。2007/02/17(土) 20:03:17
シェル使わないってなんだ。ログインすらしてないってことか。
0643名無しさん@お腹いっぱい。2007/02/17(土) 21:14:52
正直にいって細かく設定しても使わないよね
zshrcは千行あるけど
0644名無しさん@お腹いっぱい。2007/02/17(土) 23:16:31
>>641
compsysは無しかよw
0645名無しさん@お腹いっぱい。2007/02/18(日) 02:04:24
その1000行のzshrcを見せてもらおうか
0646名無しさん@お腹いっぱい。2007/02/18(日) 20:08:40
一行一レスでいいから
0647名無しさん@お腹いっぱい。2007/02/24(土) 10:43:48
htmlで終わるファイルが存在すれば"Exist"と表示させたいとして、
zsh で、
if [ -e *html ];then echo "Exist";fi
とすると、
zsh: no matches found: *url
となってしまいます。
shでは期待どおりの動作をします。
zshで期待のどおりの動作をするにはどうすればよいでしょうか?
0648名無しさん@お腹いっぱい。2007/02/24(土) 11:22:11
setopt NULL_GLOB
06496472007/02/24(土) 11:56:49
ありがとうございました。
こうすると、上の問題は解決しましたが、htmlで終わるファイル名を表示しようとして
ls *html
とすると、ディレクトリにhoge.htmlがあっても
ls: *html: そのようなファイルやディレクトリはありません
と出ようになりました。
この問題を解決避けるには、
いちいち、setopt NULL_GLOB, setopt GLOB
をしなければならないのでしょうか?
06506472007/02/24(土) 12:09:56
if noglob [ -e *html ];then echo "Exist";fi
としてもいいみたいですね。
0651名無しさん@お腹いっぱい。2007/02/24(土) 12:41:46
echo {1..3}

1 2 3
となります。
echo {a..c}
では
{a..c}
です。
これを
a b c
とするように出来ないでしょうか?
0652名無しさん@お腹いっぱい。2007/02/24(土) 12:50:38
出来ない
0653名無しさん@お腹いっぱい。2007/02/24(土) 12:51:43
bashならできる
0654名無しさん@お腹いっぱい。2007/02/24(土) 13:24:36
>>651
setopt brace_ccl
echo {a-z}
0655名無しさん@お腹いっぱい。2007/02/24(土) 13:33:21
{a..c}を、という質問なわけだが、、
06566512007/02/24(土) 13:55:06
>>652-655
ありがとうございます。
{a..c}
ではできない、やりたかったら、
>>654
のようにしろ、ってことですね。
ありがとうございました。
0657名無しさん@お腹いっぱい。2007/02/24(土) 20:36:40
mycomの連載、3回目は履歴に関して
0658名無しさん@お腹いっぱい。2007/02/24(土) 22:04:30
>647
noglob と nullglob を混同してない?

noglob は glob しなくするオプション(globの否定)だけど、
null_glob はそれとは違うよ。
オレの環境では null_glob をセットしてもそんなエラーにはならないんだけど。
0659名無しさん@お腹いっぱい。2007/02/24(土) 22:15:22
unsetopt nomatch してるんじゃ?
0660名無しさん@お腹いっぱい。2007/02/24(土) 23:08:41
まあ *.html(N) でいい
0661名無しさん@お腹いっぱい。2007/02/24(土) 23:32:56
mycomの今回のはあまり参考にはならんかった。zsh初心者向けぽいな。

ちなみに俺は履歴関連はこんだけオプション有効にしてる。
man zshoptions 読むだけでもマンドクセ状態だが・・・

setopt extended_history
setopt hist_expire_dups_first
setopt hist_ignore_all_dups
setopt hist_ignore_dups
setopt hist_ignore_space
setopt hist_reduce_blanks
setopt hist_save_no_dups
setopt hist_verify
setopt inc_append_history
setopt share_history
setopt csh_junkie_history
0662名無しさん@お腹いっぱい。2007/02/25(日) 00:08:02
漢漢と五月蝿い記事だなあ。
0663名無しさん@お腹いっぱい。2007/02/25(日) 09:20:45
誰か $path から存在しないディレクトリを削除するコードを書いてくれ
0664名無しさん@お腹いっぱい。2007/02/25(日) 10:22:44
手元の .zshenv より

addpath () {[[ -d $1 ]] && path=($path $1)}
# add $* to top of PATH list.
addpathlist() {
tmppath=
for newpath in $*
if [ -d $newpath ]; then
tmppath=($tmppath $newpath)
fi
path=($tmppath $path)
unset tmppath
}

addpathlist ~/bin /usr/local/bin /usr/local/gnu /usr/X11R6/bin /usr/local/X11R6/bin /usr/local/X11R5/bin
addpath /usr/local/gcc/bin
addpath /usr/ucb
...
06656472007/02/25(日) 12:49:04
>>658

すみません。ウソ言ってました。

>こうすると、上の問題は解決しましたが、htmlで終わるファイル名を表示しようとして
>ls *html
>とすると、ディレクトリにhoge.htmlがあっても
>ls: *html: そのようなファイルやディレクトリはありません
>と出ようになりました。

は間違いでした。正しくは、
(setopt NULL_GLOB とすると)
*htmlにマッチするものが無い場合、
カレントディレクトリ以下のファイル、ディレクトリが全て表示される、
です。
そして、NULL_GLOBはglobにマッチするものがなかったら何も渡さない、
ということでNO_GLOBはglobしない、という違いも理解しました。
だから、当前、setopt NULL_GLOB をして*htmlにマッチするものが無かった場合は
上のような動作をするのですね。
私が初めに書いたエラーがでるのは、setopt NO_GLOBとした場合ですね。


>>659
さんのようなオプションをつけていたわけではなく、単に私の間違いでした。

>>660
さんのおっしゃるように、
if [ -e *html(N) ];then echo "Exist";fi
でもOKでした。
0666名無しさん@お腹いっぱい。2007/02/25(日) 14:39:20
試さずにかいたが、-e *html(N) って常に真を返さないか
06676472007/02/25(日) 15:37:36
>>666
そうですね汗
またまたいいかげんなこと言ってしまいました。
if [ -e *html(N) ];then echo "Exist";fi
はつねにExistとでます。

>>647で書いたことをやりたい場合には、

1)
setopt NULL_GLOB
if [ -e *html ];then echo "Exist";fi
(この場合はls *htmlで*htmlがなかったらlsと同じになってしまうので)
そのあとで
setopt GLOB

2)
または、
if noglob [ -e *html ];then echo "Exist";fi

が正しいようです。
0668名無しさん@お腹いっぱい。2007/02/25(日) 16:29:49
1) は setopt NO_GLOB では。
NULL_GLOB だと多分 *html(N) と変わらないよ。
あと、特に [ に拘らなければ
[[ -e *html ]] でもいいかな。
0669名無しさん@お腹いっぱい。2007/02/25(日) 17:29:32
$ touch test.html
$ [ -e test.html ] && echo found || echo not found
found
$ [ -e *.html ] && echo found || echo not found
found
$ [[ -e test.html ]] && echo found || echo not found
found
$ [[ -e *.html ]] && echo found || echo not found
not found
$ touch '*.html'
$ [[ -e *.html ]] && echo found || echo not found
found
0670名無しさん@お腹いっぱい。2007/02/25(日) 17:39:18
[[ ]] はグロブを展開しないぽい
[ はコマンド扱い? (これも builtin だよね)
0671名無しさん@お腹いっぱい。2007/02/25(日) 17:55:15
>>647
htmlで終わるファイルが存在すれば"Exist"と表示させたい(ただしzsh: no matches foundは嫌)は、

unsetopt nomatch するのが一番だろ。
その後は [ -e *html ] でも [ -n `echo *html` ] でもおk ( [[ -e *html ]] はだめぽい )

もしnomatchが嫌なら
[ -e *html(N) '' ] && echo Exist
{ [ -e *html ] && echo Exist } 2>/dev/null
みたいなw
0672名無しさん@お腹いっぱい。2007/02/25(日) 17:59:40
案外、簡単に処理できないもんだな。気付かずに罠にはまりそう。
昔ながらのやり方が安全かw
if ls | egrep '\.html$' >/dev/null; then echo Exists; fi
0673名無しさん@お腹いっぱい。2007/02/25(日) 18:13:15
glob関連はNOMATCH, NULL_GLOB, CSH_NULL_GLOB とオプションがあってよくわからん。

参考:
ttp://d.hatena.ne.jp/amt/20060907/nomatch
ttp://d.hatena.ne.jp/amt/20060806/ZshNoGlob
ttp://www.ayu.ics.keio.ac.jp/~mukai/translate/zshoptions.html (man zshoptions)
0674名無しさん@お腹いっぱい。2007/02/25(日) 18:33:09
nomatchは途中で処理が止まるから厄介
$ echo *UNKO; echo AAAAAAAAAAAAAAAAAAAAAAAA
zsh: no matches found: *UNKO
$
0675名無しさん@お腹いっぱい。2007/02/26(月) 07:55:40
>>669
> $ [ -e *.html ] && echo found || echo not found

↑は .html ファイルが2つ以上ある場合は動かない.

[ -e `ls -1 *.html|head -n 1` ] && echo found || echo not found
だとちゃんと動くが、もっとスマートなやり方はないものか...
0676名無しさん@お腹いっぱい。2007/02/26(月) 07:59:19
>>675 の訂正.
> $ [ -e *.html ] && echo found || echo not found
は zsh では動くね. bash では動かないけど.
でも混乱を避ける為に、↑のように書くのは良くないだろう
0677名無しさん@お腹いっぱい。2007/02/26(月) 08:34:32
サブシェル使ってよければ
(for f in *.html; do [ -f "$f" ] && return 0; done; return 1) && echo aru || echo nai
/bin/shで動く筈。
0678名無しさん@お腹いっぱい。2007/02/26(月) 11:03:52
もう外部コマンド使って
ls *.html | wc | awk '{print $1}'
でいいじゃん
0679名無しさん@お腹いっぱい。2007/02/26(月) 11:18:07
アホ現る
0680名無しさん@お腹いっぱい。2007/02/26(月) 21:05:11
[ `echo -n *.html(N) | wc -l` -gt 0 ]
0681名無しさん@お腹いっぱい。2007/02/26(月) 21:26:59
[[ -n `echo *html(N)` ]] && echo Exist || echo # うまくいく
[[ -n `echo` ]] && echo true || echo false # false

[ -n `echo *html(N)` ] && echo Exist || echo # 常にExist, だめ
[ -n `echo` ] && echo true || echo false # true
0682名無しさん@お腹いっぱい。2007/02/27(火) 02:46:16
[[ls *.html && $? ]] じゃ駄目なわけ?
0683名無しさん@お腹いっぱい。2007/02/27(火) 02:47:37
``わすれた・・・
0684名無しさん@お腹いっぱい。2007/02/27(火) 02:48:42
しかも-aだね。逝ってきます。
■ このスレッドは過去ログ倉庫に格納されています