俺たちの zsh スレが復活したぞ!!
3 :
名無しさん@お腹いっぱい。:2008/12/13(土) 20:44:29
前スレは6レスで落ちたけどねw
今日本買ってきたで
>>3 あの本は流し読みしたけど、大体知ってることだし、
screenも触りだけだったので買わなかった。
とりあえず 帰ってきた zsh スレ おめ
ついに立ったな
今度こそはスレ落ちさせないからな覚悟しろ!
Alt押しキーをキーバインドする方法ってありますか?
↓みたいな感じでできるといいんですが
bindkey "Alt+F" forward-char
bindkey "^[f" forward-char
>>11 ありがとうございます
^[はAltに対応してるということですか?
かなりググったつもりですが、全然情報が見つからなくて・・・
調べ方が悪いのかしら
stanakaならともかくnaoyaか。あまり期待できなさそう。
ユーザ名やホスト名の補完って抑制できんの?
scp でタブ押すとカレントの一覧に混じって大量のユーザ名が混じってくれやがる
後藤大地の記事よめ
_ssh にあるよ
なんつーか話題がないね
困ったときの.zshrc晒し
21 :
14:2008/12/20(土) 21:25:11
_ssh見てみたけど、zsh歴半月の自分には分かるわけもなく・・・
さんざんググってzstyleの勉強をしようと思ったけど、日本語じゃ初心者向けの解説サイトは皆無だね。
まぁ実際むずいしハンパな素人にはそもそも無理か。
で、結局compdef -dというのを知った。
補完やりすぎなんじゃゴラァってときは、とりあえずこれで解除しとけばいいわけだな。
また少人数で廻すスレ復活か
#compdef scp
_arguments ¥
'(-2)-1[forces ssh to try protocol version 1 only]' ¥
'(-1)-2[forces ssh to try protocol version 2 only]' ¥
'(-6)-4[forces ssh to use IPv4 addresses only]' ¥
'(-4)-6[forces ssh to use IPv6 addresses only]' ¥
'-p[preserve modification times]' ¥
'-r[recursively copy directories]' ¥
'-v[verbose mode]' ¥
'-B[batch mode]' ¥
'-q[disables the progress meter]' ¥
'-P+[specify port on remote host]:port number on remote host' ¥
'-S+[specify ssh program]:path to ssh:_command_names -e' ¥
'-c+[select encryption cipher]:encryption cipher:(idea des 3des blowfish arcfour tss none)' ¥
'-C[compress data]' ¥
'-F+[specify alternate config file]:config file:_files' ¥
'-i+[select identity file]:SSH identity file:_files' ¥
'*-o+[specify extra options]:option string:->option' ¥
'*:file or directory:_files'
これでどうかな・・・
_ssh から _scp オプションの部分だけを抜き出したんだけど。
デフォルトログインシェルをzshにしてるディストリはねーのか?
ちんたらやってたらいつまで経っても普及せんぞ
grml
27 :
名無しさん@お腹いっぱい。:2008/12/31(水) 13:28:18
bashでは--rcfileで初期化ファイルを指定できますが
zshでも同じことができませんか
zsh -h したけど、それらしいのはありませんでした。
man zshoptions
>>28 だからそれらしいのは見つからないんですけど。
年の瀬の逆切れは趣きがあってよい
>>27 zshには--rcfile相当の機能はないよ。
28がマニュアル読めっていっているのは、自分もしらないから。
自分が知らないから、マニュアル読めというしかないじゃん。察してやれ。
>>30 これは・・・自分の無知をごまかすだけの自称上級者様ではないですか!
あけましておめでとうございます。
必死にマヌアル読んだ俺カワイソス
--rcfileか、なるほど。
でもどーいう時に使うんだ?
--rcfileがないからZDOTDIRで代替してます
37 :
名無しさん@お腹いっぱい。:2009/01/07(水) 20:27:02
zshって名前にしたの誰だ?
我最強なり的な傲慢さがあっていいよな
omega shell
>>37 これから次世代シェルを作ろうって思ってた奴は歯がゆく思ってんだろうな
俺がzを使うはずだったのにィってw
bzsh でどうだ
…っと bazsh だな。
zzsh
Ω-shell
zashじゃないのか
zhだろ
日本語訳がないと変態すぎておぼえられない
日本語訳があってもなくても変態すぎる
誰か日本語でわかりやすく補完用関数の書き方教えてくれー。
後藤に頼め
GOTO大地
orzsh
bindkey -v だとコマンドラインスタック使えんのか
>>52 なんか(・∀・)イイ!!
使えるだろ
>>54 bindkey '^Q' push-line
scp のリモート側に*を使ってるとno matches found:ってなる。接続前に展開しようとするからかな?
なんか方法ないすかね?
\*
>>59 ありやす!エスケープするのね
#でも、リモートのパス中の*はデフォで\*として解釈してくれたらいいのに
>>60 > #でも、リモートのパス中の*はデフォで\*として解釈してくれたらいいのに
だれが解釈してると思ってんの?
62 :
52:2009/01/10(土) 21:55:10
うっかり書いてしまった。
今は反省している。
つかどんなシェルだよw
使ってるとだんだん気分がorzになるシェルだろ
% readlink /bin/orzsh
csh
>>61 誰も何も、ローカル側のzshでしょ?
リモート側で*を展開する仕事をするのはリモート側のsshdとか、そんなんでしょ?
>>55-56 良く調べもしないですんません、ありがとう!
すごく…快適です…
( なお、うちの環境では
setopt NOFLOWCONTROL
の追加が必要でした )
>>65 > 誰も何も、ローカル側のzshでしょ?
シェルがsshの構文知ってるわけないやん。
> リモート側で*を展開する仕事をするのはリモート側のsshdとか、そんなんでしょ?
sshd が、* を解釈するわけないやん
alias scp='noglob command scp'
>>68 それやったらローカルの*も効かなくなるじゃん。bashのように
scp hoge* remote:
scp remote:hoge* .
ってやりたいってことだろ。
まぁzshの慣習に従って素直に\使えってこったな。長いものには巻かれろ。
> zshの慣習に従って素直に\使え
そんな慣習? zsh???
unix の shell の慣習って言うんならわかるけどサ
>>69 glob の挙動は、setopt で制御できる。
> scp hoge* remote:
> scp remote:hoge* .
こういう書き方するやつは信用できない。
おまえらみんな信用できない。
2ch を信用するやつが一番信用できない
bindkey "^/" undo
と.zshrcに書き込んでもC-/でundoができるようにならないのですが、
どう表記すれば良いのでしょうか?
^/ なんて文字は存在しないから。
たぶん "^_"
>>76 "^_"と設定すると、C-_では動きますがC-/はやはり動きません。
ぐぐってみたら"^/"や"^\/"と書かれた.zshrcを見かけたので、
環境が悪いんですかね?
man ascii (FreeBSD限定?)とかして
ASCII コードのビットコードをよーく眺めるんだ
H と ^H と BS の関係とかな
>>76,78
asciiコード表とにらめっこしてきました。
Ctrl+/で生成される制御文字は存在しないから"^/"にはbindkey
しても意味がない、ということですか?
そんなところだね。
Ctrl+/で端末が何を送ってくるか、あるいは何も送らないのか、
cat | od -c を実行して Ctrl+/、改行、Ctrl+Dを入力するとかして調べてみれば。
setopt glob_complete にすると、マッチしたものを展開しなくなり、
同時に最初の候補に切り替わりますよね。例えば
% ls
tmp1 tmp2 tmp3
% ls tmp* ← この状態でタブを押すと
% ls tmp1 ← 最初の候補「tmp1」になるのですが
tmp1 tmp2 tmp3
tmp*のままにしておくにはどう設定すればいいんでしょうか?
bindkeyで設定したものが子プロセスのzshに反映されないので困ってます。
.zshrcに
bindkey "^P" history-beginning-search-backward-end
と書いていて、ログイン時のzshでは動くんですが、
% zsh
でサブシェルを立ち上げたときにこのキーバインドが反映されないのです。
screenで起動したときも同じ現象になるのでどうにかしたいのですが、どうすればいいか教えてほしいです。
>>82です。
具体的にはこんな感じです。
% bindkey "^p"
"^P" history-beginning-search-backward-end
% zsh
% bindkey "^p"
"^P" up-line-or-history
% zsh --version
zsh 4.3.4 (powerpc-apple-darwin9.0)
よろしくおねがいします。
zsh -xv でトレースしてみたら
85 :
名無しさん@お腹いっぱい。:2009/01/28(水) 19:11:05
zshだと、
@# date "+%s"
A# echo foo
B# date "+
ここで↑キー押しても「echo foo」と1つ前のヒストリが表示されてしまいますが、
tcshのようにBで↑キー押すと「date "+%s"」と補完するようにはできないでしょうか?
ESC-p
あるいは適当なキーをhistory-search-backwardにバインドすれば?
87 :
名無しさん@お腹いっぱい。:2009/01/28(水) 20:06:57
↑キーにキーバインドってできるんですかね。。
88 :
87:2009/01/28(水) 20:33:14
すいません、できました。
>>86 ありがとうございます。
zsh最強シェル入門買ったー今から読むー
普通はそんなもん買わんよ
ネットと2chで事足りるj
>>90 うん,ネットと2chで事足りることしか書いてない…orz
あははははは
補完の書き方とか超絶難解な変数展開とか、zsh独特でかつややこしいところが
書いてあれば欲しいのだけど、目次みた限りでは書いてなさそうね……
zsh スクリプト書きまくりだと何が互換性があるのかないのか判らなく
なってくる。まあ自分だけしか使わないから一向に構わないのだが。
シェルスクリプトの互換性がよく問題になるのは、「純正sh」用のスクリプトとして書くせいだからね。
zsh専用のスクリプトとして書くぶんには、他のシェルとの互換性なんか気にする必要はない。
そうやって堕落していくのが恐い
なぁに、世の中に zsh 以外など(実用上)存在しないと
見切れば問題ない
移植性を気にするぐらいならシェルスクリプトなど使うな
堕落すればいいじゃん
つ安吾
や…安吾
でもまだzshスクリプトは奇異の目で見られるよな
エロ画像連番スレでは定番の言語だが
勉強になります
for i in {000..123}; do wget …
が期待通り動いた時には感動した
これ使っちゃうと他使うのがつらくなるので
zshは封印気味
他のシェルなんて、本当に必要な時以外使わなければいいじゃない、とか言ってみる。
堕落すると楽になるぞ〜w
>>104 なるほどなw>エロ画像
つーかエロ画像って言葉自体が懐かしいな
淡い青春時代を思い起こさせるw
新スレおめでとうございます
禁止禁止!安吾禁止!
質問です。何も入力がない状態で
途中カキコしてしまいました。すいません
何も入力がない状態でTABキーを押すと、lsを実行し、候補の一つを表示させるにはどうしたらいいでしょうか?
素の状態ではTABでカーソルが移動するだけです・・・
何も入力がない状態だと欲しいのはコマンドの候補じゃないの? そこにあるファイルではなく。
114 :
113:2009/02/08(日) 22:27:34
コマンド候補だと数が多いので…
使うコマンドも多くありませんし、それならカレントディレクトリの内容を表示したほうが有益かと思いました
昔 zsh を推奨するためのネタ一覧で
「ディレクトリを移るのに一々 cd と打つ必要がない」
ってので目を丸くしたのを思い出すな…
auto_cdは使えるだろ
もちろん、使ったほうが速い場合だけ使うわけだが
zshスクリプトで~/.zshrcを自動で読ませる方法ないですか?
今は #!/bin/zsh の真下に source ~/.zshrc を入れてるんですが、毎回書くのも面倒なので
.zshenv
インストールしたパッケージのコマンド (ns) に対する補完が期待した挙動ではなかったので
(具体的には、ns [tab] でカレントディレクトリのファイル名を補完して欲しいのに、host が補完
されてしまう) 。
$FPATH を調べてみたところ _hosts ファイルで compdef されているのが見つかりました。
そこで _hosts ファイル一行目の #compdef から ns を削ったのですが、それでも ns コマンドに
対する補完は期待した挙動にはならず _hosts ファイルでの設定を引きずっています。
デフォルトで設定された挙動を解除するためには他にどのような手順を取るべきでしょうか。
>>120 $HOME/.zshrcでcompinitより後に
compdef _files ns
とか
>> 121
すばらしい。ありがとうございます。
r って押すと直前のコマンド実行するのを抑制する設定ありますか?
タブをどんどん押していって補完ディレクトリ名を次々切り替えていくとき、
名前の最後に/を付加しないようにできませんかね?
そのディレクトリでおkってときは手動で/を付加する、という形にしたい
むしろデフォルトはそうなってますけど
AUTO_PARAM_SLASH <D>
If a parameter is completed whose content is the name of a
directory, then add a trailing slash instead of a space.
126 :
124:2009/03/03(火) 12:27:15
いや、それじゃなくて
例えば、カレントディレクトリにhoge hoge1 hoge2というディレクトリがあって
$ ls h
と打ってタブを押すと
$ ls hoge
まで補完されて、さらにをタブ押すと
$ ls hoge
hoge hoge1 hoge2
と候補が下にリストされ、さらにタブを押すと
$ ls hoge/
となる。このディレクトリ 以下に行きたいときは/を追加して
$ ls hoge//
とすると補完対象がhogeディレクトリ以下に切り替わる。
で、この/がダブるのが何か気持ち悪いってだけの話っす。
まぁ見た目だけの問題だけど・・・
>>126 自分では
ls hoge/
のところでEnterを押して確定していた。
/を押しても確定するって初めて知ったから試してみたけど、
ls hoge//にはならずに、ls hoge/のままの表示になるぞ。
>>127 autoremoveslashしてるとそうなるね。
確定するときはその方が/をダブらないぶんスマートだけど、ディレクトリで終わるコマンドの場合
末尾の/が取り除かれた状態でhistoryに残るが嫌なんだよね。(ディレクトリの最後は常に/で終えたい)
まぁこの辺は個人の嗜好だし、しょうがないか・・・
最近attr.cでコンパイルエラーになる
早く直してくれ > 誰か
チミのところだけぶっこわれているのさ
attr.cって3月4日に入ったんだ。
*attr関数をLinuxあたりに決め打ちしてるんだな。
ちゃんとconfigureしろとレポート送っておきました。
後藤乙
function chpwd()を使って、cdを行った後、画面クリア>ls -lを実行、としようと思いました。
function chpwd() { clear;ls -l } だと、画面最上部にプロンプトが出ません。
今、PROMPTとRPROMPTにはパスやユーザ名やマシン名を出しているのですが、
画面クリア後、両プロンプトを出してからls -lの結果を出すようにはできませんか?
>>134 clear; echo $PROMPT; ls -l
じゃダメ…だよね。右プロンプト出ないしな。
zsh の completion で
rm <TAB>
としたときは、補完候補にディレクトリを含めず
rm -r <TAB>
としたときは、補完候補にディレクトリを出して欲しいのですが、どのような補完関数を書けば出来ますかね。
>>136 > としたときは、補完候補にディレクトリを含めず
それではカレントディレクトリ以外にあるファイルを対象にできないのでは?
>>137 あーなるほど。なかなかうまくいかないもんですね……
tar xvf hoge.tar.gz
した後に
rm ho<TAB>
とすると hoge/ に先にマッチするのが嫌だったのです。
シェル関数の中で、その関数からだけ見えるローカル関数って
定義できませんか?
下請的に何度も使うけど、人が直接呼ぶことはないので、
表に出したくない、といったところです。
初歩的な質問で申し訳ないのですが、モジュールとファンクションの違いがよくわかりません。
モジュールの読み込みにはzmodload、ファンクションの読み込みにはautoloadを使うんでしょうか?
モジュール
Cで書かれた機能拡張。
zshコンパイル時に組み込むように指示することも出来る。
ファンクション
シェルスクリプトで定義する。
142 :
140:2009/04/11(土) 15:47:30
>>141 ありがとうございます。なるほど、そういうことですか。
というか普通、モジュールという言葉はコンパイル済みの部品を指すものですよね。変に考えてしまいました・・・
ファイルの場所は、私のzshのバージョンだと以下ですね。
モジュールは /usr/lib64/zsh/4.2.6/zsh/
ファンクションは /usr/share/zsh/4.2.6/functions/
autoload -U などのオプションの意味を知ろうとググっても、日本語ではなかなかヒットしないものですね。
結局
http://zsh.sunsite.dk/Doc/Release/zsh_toc.html などのdocに辿り着きました。
でもなんでmanが用意されてないんでしょう・・・zshの全情報のmanを作ると膨大な量になるからでしょうかね?
zshのマニュアルは長大なので、いくつかに分割されている(とman zshすると書いてある)。
man zshbuiltinsでautoloadを探すと、
Equivalent to functions -u, with the exception of -X/+X and -w.
(-X/+X -wを除いて functions -u と等価)
ということなので、functionsの説明を参照すると
Equivalent to typeset -f, with the exception of the -M option.
(-Mオプションを除いて typeset -f と等価)
ということなので、typesetの説明を参照すると
-U <略> This flag has a different meaning when used with -f; see below.
(このフラグは-fと一緒に使うと違う意味になる。下記参照)
ということなので、もうちょっと下にある -f の説明を読む。
The -u and -U flags cause the function to be marked for
autoloading; -U also causes alias expansion to be suppressed when
the function is loaded.
(-uおよび-Uフラグは関数に自動ロードの印を付ける。-Uはさらに関数ロード時の
エイリアス展開を抑制する)
typesetは(も)複雑すぎる。
144 :
140:2009/04/11(土) 17:24:46
>>143 manあるんですね。失礼しました。
zshのドキュメントの多さと複雑さには気が遠くなりますが、食らい付くしかないですね・・・
どうもありがとうございました。
コマンドスタックってEsc+qの他にCtrl+qでもできるんだ
こっちのほうがやりやすいな
>>142-144 探すの面倒だから、ついman zshallとかしちゃうw
そういえば、未だにLISTMAX=-1が無制限とか大嘘書いてるサイトがあるんだな
LISTMAX=-1は問答無用で表示だと思ってたが違うの?
LISTMAX=-100とかやっても変わらないんだが
ちゃんとmanに書いてある
LISTMAX=N とすると、
N > 0 -- N行以上のとき訊く
N = 0 -- 画面からはみ出るとき訊く
N < 0 -- (-N)行*以下*のとき訊く
-1は兎も角、-100はすぐ気付くと思うけど
>>148 あほんとだ、/binや/usr/binしか見てなかったから気づかんかった・・・アホスw
まぁ普通はLISTMAX=0だよな
ところでmanには↓のように書いてあるが
If the value is negative, the list will be shown if it spans
at most as many lines as given by the absolute value.
「the list will be shown」ってのは「the asking message will be shown」みたいに言うべきじゃないかな?
ls -1 ./dir/* > tmp
見たいにして、ディレクトリ中のファイルの一覧を作ってるんだけど、 zsh でやると
^[0m^[0m./dir/a^[0m
^[0m./dir/b^[0m
^[0m./dir/c^[0m
^[m
見たいにエスケープシーケンスがついてしまう。
このエスケープシーケンスがつかないようにするにはどうすればいいんでしょうか?
とりあえずは、
sh -c "ls -1 ./dir/* > tmp"
で回避できるんだけど。
>>151 ありがとう。エスケープシーケンスなくなった。
でも、なぜこれだとだいじょうぶなんだろう。
ls だけだと 組み込みの ls を使うとかそういうことですか?
zsh -f できどうしてもそうなる?
>> 153
zsh -f だとだいじょうぶみたい。
これは、zshrc のせいってことでしょうか?
ミスった
alias ls="ls --color"
のせいか・・・
zsh 関係ないのね。
どの色付きlsかにもよるが、GNU coreutilsのlsだと、
ls --color=auto
で、出力先が端末の場合だけ色が付く。
ただ、ページャに食わせた場合も色が付かないことになるので、
色を認識できるページャを使っている場合に味気ないかもしれない。
>>157 うちは --color=auto だったから
>>150と同じ結果にならなかったのね
知らなかった
なるほど、--color= を指定しないとalwaysになるのか
>>153 -fって何?
.zshrcを読み込まないとか?
そうだったthx
csh系はほとんど使わないんで忘れてた
fpathの設定ってzshがログインシェルじゃないと自動でやってくれないみたいですね。
自分で設定すればいいかと思ったのですが、ログインシェルがbashの状態で、.zshrcに
fpath=(${fpath} /usr/share/zsh/site-functions /usr/share/zsh/4.2.6/function)
を追加した上でzshを起動しても、相変わらず↓のエラーが出るのですが、何故でしょうか?
zsh: compinit: function definition file not found
補完候補、アルファベット名より漢字名が先に並ぶんだけど
$ ls <Tab>
亜 a あ
どゆルール?
俺の手元ではそんなことにはならないなぁ。
日本語なんて使うなって話じゃね
OSのロケールがそういう奇天烈なcollationを定義しているからじゃないのかな?
補完についての質問です。
cdでカレントディレクトリのhomeにというディレクトリに移動したいとき
cd h[Tab]
と入力すると、~hogeなどのユーザーのホームディレクトリも補完候補
にでてしまます。これを消すにはどうすればいいですか?
>>169 setopt nocdable_vars
bashのnohupと類似の方法で、&!とかdisownとかあるようですが、どういう風に使い分けるものですか?
&! は & の代わりに使う。
disownは&で実行開始してしまったものに対して使う。
174 :
名無しさん@お腹いっぱい。:2009/05/24(日) 17:59:55
あんまりエロ画像落とさないからzsh使わないなw
たまに連番が必要になってもbashで
echo {0..9}{0..9}
とかやるだけ。
もうzshからkshに乗り換えた
bashは0で始まる数字が8進数扱いになるので
ファイル名から数字を切り出して処理するときとかにやりにくくてしょうがない。
時代はzsh
おまいたちも普及活動に励んでください
zshは、
> file
で、ファイル内容を切り詰めできないからやりにくくてしょうがない。
>>179 設定ファイルを理解せずに、コピペする方ですか?
179のような脳味噌の足りてない奴にはzshも宝の持ち腐れってことだな。猫に小判。
>>177 それが理由でbashから乗り換える気になった
zshは本当に便利杉
CFLAGS='-O2 -fomit-frame-pointer'
って設定してる時、
gcc $CFLAGS hoge.c
ってやると、$CFLAGSのオプションがくっついてしまって、
cc1: error: invalid option argument '-O2 -fomit-frame-pointer'
となるから、zshはやりにくくてしょうがない。
>>183 export CFLAGSしてmake hogeする位の頭はないのか?
>>184 それが面倒だろ。
Makefileには別のことを書いていて、
make hoge だと別のオプションまで付いてしまう。
臨時で、Makefileとは別に
gcc $CFLAGS を直接実行したい時に困る。
zsh以外のシェルならできるんだよ。
${=CFLAGS} かね。
>>185 お前はmanもロクに読まずに偉そうな奴だな
${=CFLAGS}使うかSH_WORD_SPLITでも設定しとけ馬鹿が
>>187 そんな余分な手間が増えるだけ面倒だろ。
従来のシェルと非互換になってると問題が多いってこと。
zshは、
stty -echo
しても、コマンドラインでは勝手にもとに戻されてしまうから、
やりにくくてしょうがない。
従来のシェルって何のことだよ
そんなに互換性がお望みならshでも使えばいいだろうが
自分の無知を棚に挙げてわめくような人にzshを使うのは難しいでしょう。
>>187 「manも読まずに」という言い方は論点がずれてる。
回避方法を質問してるんじゃなく、
回避しなければならないような仕様が問題だ、って主張してるわけだから。
>>192 >>183でも
>>185でも「回避しなければならないような仕様が問題だ」
なんて主張をしてないだろうが。お前こそが論点をずらしているだろうが。
わざわざ違えて作ったものを別のものと同じと決めつけて
自分の思い込みと違うからと文句を言うのはキチガイでしかない。
婉曲な自己紹介乙。
>>193 「やりにくくてしょうがない」
→「やる方法はあるが手間がかかる」
→「わざわざ手間を増やすのは問題だ」
→「回避しなければならないような仕様が問題だ」
主張してるねw
もし、やる方法を本当に知らない場合は、
「やりにくくてしょうがない」じゃなくて「できないので困る」と言うだろうし、
それを質問してるなら、「やる方法はありますか?」って言うはず。
朝から基地外が登場かよ。全く大概にしろ。
>>194 kshやbashも違えて作って(独自)拡張もしてる。
が、shとの互換性は保ってる。
zshは、独自拡張したのは言いが、互換性を犠牲にしたのが大きな欠点。
もちろん、互換モードで回避はできるけど、通常状態では互換性がないし、
互換モードにしてしまうとzshの特徴がなくなってしまうので本末転倒だし。
http://zsh.dotsrc.org/FAQ/zshfaq02.html 2.1: Differences from sh and ksh
The classic difference is word splitting, discussed in question 3.1;
this catches out very many beginning zsh users. As explained there,
this is actually a bug in every other shell. The answer is to set
SH_WORD_SPLIT for backward compatibility. The next most classic
difference is that unmatched glob patterns cause the command to abort;
set NO_NOMATCH for those.
FAQも読まずに筋違いな文句をつけるあたり、気違いと言わざるを得ない。
ふぁqなんて誰も読まねえよ
>>202 お前が英語も読めない馬鹿なのは分かったから黙ってろ
>>204 明らかに読んでないだろ。読んでいれば、こういう回避法があるのは知ってるが
それは気に食わないという言い方にになる。
ふぁqなど読まずに寝ラーを利用するのが賢いzsher
英語も読めない馬鹿が賢いとは笑止千万だわ
>>203や
>>207みたいに読まない=読めないって決め付ける奴って何なんだろう
自分がロクに読めないから他人もそうだと思うんだろうか
日本語で書かれてても読まないものは読まないのにね
ドキュメントを読みもせずに偉そうな物言いをするなってこった
シャドーボクサーはお帰りください
ログインシェルを変えることができない環境で擬似的にzshをログイン
シェルにすることはできますか?
exec zsh
rootでzshをログインシェルにするのは、やっぱやめたほうがいい?
自分で判断できないなら止めとけ
>>215 ずっとそうやってたんだけど、知り合いに言ったら呆れられてしまった
理由を聞いても、rootではそもそもzshみたいなもんは使うな、の一点張りで
確かにbashのほうが安心だとは思うけどさ・・・
オレはrootでこそzsh使いたいんやけどやっぱ甘いんかねえ
自分の鯖で自分しかrootにならないんならいいんじゃね
zshが駄目なら同じ理由でbashも駄目だろ。/bin/shのみ許可とか。
もちろんvimも駄目だ。viかed。
>zshが駄目なら同じ理由でbashも駄目だろ。
ズンドコベロンチョみたいなもんか
>>220 一行目には同意だがvimは関係ないな。使えれる環境なら使えばいいだけの話。
viはディスク復旧時に/var/tmpだのtermcapが見えないと云々というのは
最近でも言うのかね。
純正viはSolarisとかの商用系にしか存在しない。ソース非公開だから。
それ以外のOSでは、viの正体はvimかnviだな。
>>223 vimならtermcap/terminfoがなくてもデフォでbuilt-inのvt100で立ち上がる。
>>222 「ら抜き」ならぬ「れ入れ」やめれ
typoか? 最近こういう言葉流行ってると思うが
zshのソースはどこのFTPサイトから落せれますか?
FWのせいか、一部のサイトには行けれないようなんですが。
あと、手元のCD-Rは何故か読めれなくなってしまいました。
それは教えれません
>>229 それは「れ入れ」じゃなくて「ら抜き」
ハイ、やり直し
それは教えれられません
>>232 は「れ入れ」の意味を理解していないようだ。
それは教えられれません
られれのおじさん
その答えは、ここには書けれません
お前ら、zshの話しろよ
zshのことは、これ以上話せれません
いい加減にしれよ
zshの読み方はズシュッ!でいいのでしょうか
雑種
ツェッシュ
ズィーッシュ
昨日bashからzshに引越したんですけど,
bashではalias rma='rm -f *~ .*~ *#'で通じたんですけど,zshだと
zsh: no matches found: *~
となります.
bashだと存在しなかったらなにもコメントがでてこないんですけど
>>217 /bin/sh に比べれば bash も zsh も等しくリッチすぎる環境
純粋のshなんて何年も触ってないや
最近のLinuxは/bin/shがbashのシボリックリンクだし
他のお堅いunix系から見れば甘過ぎなんだろうけど
純正の定義を頼む
>>248 sh:
libedit.so.5 => /lib/libedit.so.5 (0x28096000)
libncurses.so.6 => /lib/libncurses.so.6 (0x280ab000)
libc.so.6 => /lib/libc.so.6 (0x280ed000)
# ldd /usr/local/bin/zsh
/usr/local/bin/zsh:
libzsh-4.3.4.so => /usr/local/lib/zsh/libzsh-4.3.4.so (0x2807d000)
libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x2810f000)
libncurses.so.6 => /lib/libncurses.so.6 (0x28207000)
libm.so.4 => /lib/libm.so.4 (0x28249000)
libc.so.6 => /lib/libc.so.6 (0x28260000)
# ldd tcsh
tcsh:
libncurses.so.6 => /lib/libncurses.so.6 (0x280c6000)
libcrypt.so.3 => /lib/libcrypt.so.3 (0x28108000)
libc.so.6 => /lib/libc.so.6 (0x28121000)
リモートでプロセスをnohupなり&!なりdisownなりで動かした状態でexitすると、
ターミナルが固まってしまうんですが、こういう場合はどうすれば良いですか?
お前も一緒に固まればいい
どうやったらそんなことになるのか謎
254 :
250:2009/06/12(金) 13:32:53
sshやrshなどの仕様として、入出力ストリーム(標準入力、標準出力、標準エラー出力)が
EOFを返すまでコネクションを維持するんですね。スレチで失礼しました。
history共有はOFFのほうが好みなので切っています。
この場合、historyファイルへの保存はログアウトするときにされると思いますが、
ログアウトせずにその場で強制的に書き込ませるコマンドなどはないでしょうか?
tcshのように
何もない所からtabを押したら
カレントディレクトリにあるファイル一覧を表示したいのだが、
どうすればよろしいですか?
tcsh使っとけハゲ
ハゲじゃないもん!
>>255 fc -W
好みに応じて -I オプションをつける
zshでmanでコマンド調べたときに引数のところに色がつくのってどうすればいい?
teratermから接続したときは色づけされてるけど、Xの端末からmanで調べたときに色が付いてない。
zshrcの色関係はdircolorしかしてません
それはたぶん
「強調」のエスケープシーケンスを
「ターミナル」がどう表現するかを設定すべきトコロだと思うぞ。
263 :
260:2009/06/27(土) 21:41:16
>>261 setopt prompt_subst
でもだめだった他になにかあるんですかね?
>>260 ちゃんとlsで色がつくんだったら、
alias lv='/usr/bin/lv -c'
とか
alias less='/usr/bin/less -r'
とか
alias man='/usr/bin/w3mman'
compdef _man w3mman
とかpagerのオプション変えてみたら?
265 :
名無しさん@お腹いっぱい。:2009/06/29(月) 11:54:58
みなさん、はじめまして。じつは、これが2ちゃんねるデビューです。ところで、zsh を愛用しているのですが、
たとえば
% ls ~/documents/hoge
と打ったあとで、hoge のhにカーソルを持ってきて、fと打ってtabおすと、つまり
% ls ~/documents/f[tab]hoge
bashだと
% ls ~/documents/fuga/hoge
となりますが、zshだと補完してくれません。何かオプションの設定があるのでしょうか。
bindkey "^i" として出てきたものを man zshall で検索してその周辺を読む
267 :
名無しさん@お腹いっぱい。:2009/06/29(月) 14:25:43
266さん ありがとうございます。 さて、bindkey "^i"と、プロンプトで入力
すると、menu-expand-or-complete と出ます。というのは、.zshrcでそういう設定
をしているからなのですが、デフォルトはexpand-or-completeですよね。
それで、man zshall とかinfoファイルなどを読んでもどうも関連のありそうな
ものは見当たらないのですが。。。
じゃあそういうものだと思って諦める。
ubuntuのデフォルトbashでインストールしてないコマンド打つと
パッケージリストから探してきてこれ入れれって感じのメッセージ出るんだけど、
zshではどうやるの?
>>269 source /etc/zsh_command_not_found
command-not-foundパッケージの機能だな。
bashでコマンドが見付からなかったときに実行されるシェル関数
command_not_found_handleを定義することで実現している。
コマンドとパッケージの対応DBは別途作るみたいだね、これ。
相当するものはzshにはないと思うけど、入力文字列の先頭語を
whenceで探し、見付かれば実行、見付からなければパッケージを提案
という動作をするwidget(シェル関数)を作って^M(Enterキー)にバインド
すれば出来るはず。
あら、zsh用も含んでるのか、これ。
最近流行ってるの?
>>274 書店でめくってみたけど、最強〜よりはまともな感じ。
補完関数の書き方とか詳しかった。
>>274 「tcshなんてうんこ」の広瀬さんが本出してたのか
俺はマニュアル読むのに6年かかった
読み終わったら仕様が変わってた
あるあるw
>274
買ってみた
まあ日本語レファレンス的な感じかな
zshが巨大でマニュアル自体が巨大なので
仕方ないとは思うし,ちょっと手にとって
見るために置いておくのも悪くないかな.
できれば冒頭の「デモンストレーション」の章で
ヲラヲラ,すげーだろ
的なノリのzsh魅力紹介がもっとあると良かったかなぁ
一般的に言って、zshがあればファイラなんてものはいらない、て感じなんでしょうか。
人それぞれ
タイプしたコマンドの末尾に空白があると、ヒストリにはその空白を削った形で記録されるようですが、
末尾の空白を削らずにそのまま記録させるには、どうしたらいいでしょうか?
>>288 なんでそんなことしたいのかが、さっぱり分からん。
bashならスペースも含めてヒストリに記録されるよ。
unsetopt hist_reduce_blanks
>>291 それは「末尾の空白削らずに」にはならない。
というか、最初から unsetopt hist_reduce_blanks 状態だし。
293 :
288:2009/07/15(水) 23:25:10
少し勘違いしてました。仰る通り、最初からunsetopt hist_reduce_blanksでした。
何がしたかったかというと、例えば、(■はカーソルです)
ls /etch/zshr■ ・・・@
まで打ってからTAB押すと
ls /etc/zshrc ■ ・・・A
と補完され、■の直前にスペースが挿入されますが、これを実行するとヒストリには
このスペースが取り除かれます。Aの状態でさらにスペースを押すと、見た目上は
名にも変化しませんが、履歴にはスペースも含めて記録されます。
デフォルトではこういう設定なのだと思いますが、見た目通りにヒストリに
記録できたほうが使いやすいなと個人的に思った次第です。
zshrcで、PROMPTの中に改行を含めて2行で表示しています。
この状態でRPROMPTを設定すると、2行目の右端に表示されます。
1行目の右端にも文字を表示したいのですが、どうしたらいいですか?
「zshの本」って買いですか?
当方 zsh 歴1ヶ月の noob です。
コマンドラインの展開で、
$ ls
a1.txt a2.txt a3.txt
として
$ echo a{1,2,3}.txt
a1.txt a2.txt a3.txt
$ echo a*.txt
a1.txt a2.txt a3.txt
と、なりますが、
$ echo --option=a{1,2,3}.txt
--option=a1.txt --option=a2.txt --option=a3.txt
$ echo --option=a*.txt
zsh: no matches found: --option=a*.txt
こういった感じに、展開したファイル名の前に、同じ文字列を付け足したいのです。
上記の操作で、行われていない理由は、理解しています。
展開したファイル名の前 or 後に文字列を足す方法って、ありませんでしたっけ?
# 前に、どっかで見た気がするんだよな〜。
% setopt histsubstpattern
% echo a*.txt(:s/#/--option=/)
--option=a1.txt --option=a2.txt --option=a3.txt
zshのインストールの時点でつまりました><
zsh-4.3.9.tar.bz2は解凍できたんですけど…
システム管理者じゃないのでスーパーユーザーになれません。
ここで質問なんですけど
スーパーユーザーじゃなくてもzsh-4.3.9はインストール出来ますか?
出来る。回答終了。
>>298 +-----------------------+ +------+
G o o g l e | configure --prefix | | 検索 |
+-----------------------+ +------+
zsh以前の問題だな
/etc/shellsに書かないとログインシェルに使えない環境なら
ログインシェルからzshをexecすれ。
素人がそれをやると無限ループしたりするけどな
昔はよくやらかして死す缶に怒られたもんだ><
>>298だが…
返信ありがとう!
configure --prefix したんだが
「checking if tcsetpgrp() actually works... error
configure: error: unexpected return status」と最後の2行に出て
インストールできなかったorz
Solalis 10 のバージョンが低いのが原因か…?
ncursesとかいれている?
「zshの本」に「うんこ」の単語発見
>>307 ありがと。あやうく買うところだったよ。やっぱくそ本なんだな。
309 :
307:2009/07/28(火) 18:23:41
>>308 いや、買うなとは言ってないんだけど。
一見「tcshはうんこ」みたいな表現を抑えたのかなと思ったら消し忘れがあってちょっと笑った、て程度の話。
>>309 え,あれ,消し忘れだったのかw
なんでいきなりtcshの仕様をうんこで修飾してるんだろうとは思ったがw
ls
Desktop/ aa.file bb.file cc.file
ってあって,D入力してタブでDesktopって補完してほしいけど
他にDBUS_SESSION_BUS_ADDRESS DESKTOP_SESSION DISPLAY
やらがでて来てうっとうしいんですけども,どうすればいいですか?
cp でフォルダ渡したときに 頭よく再起でフォルダごとコピーしてくれないかね?
フォルダかファイルで判別するとか
>>314 あっ ほんとだ・・・・・ 恥ずかしいっす
ESC-h で$#0を引数にrun-helpしてくれますが
これを $#0がniceだとかsudoだとかのときに$#1を引数にrun-helpしてくれる
ようにできませんかね。ESC-H とかで。
zshって、ゼットシェルって発音でおk?
で、英語発音だとズィーシェルになるんかね?
>>317 Cシェルのもじりでもあるので、Cに濁点を付けたイメージで。
俺の職場の人は雑種って呼んでたけど少数派かな
ズィーシュ
ズシュ(刀で切られた感じで)
デジャヴです
zsh使いは「ゼッシャー」でおk?
Z武
$SHELLがbashの環境で、screen起動時に、rcを指定したzshを起動しようとしています。
ただのzshならscreenrcに shell zsh と書けばいいのですが、自分のzshrcを指定する方法が分かりません。
今はscreenの各ウィンドウでいちいち source /path/to/myzshrc としてます。
どうしたらrcを指定してzshを起動できますか?
環境変数でも使えば。
>>316 こんなんで COUNT 指定で COUNT-th の arg を run-help している。
似たかんじでやればいいかな。
autoload -U run-help-arg
zle -N run-help run-help-arg
% cat .zfunc/run-help-arg
emulate -L zsh
if (( NUMERIC )); then
local bufwords
# This splits the line into words as the shell understands them.
bufwords=(${(z)BUFFER})
zle .push-line -N
BUFFER="$WIDGET $bufwords[NUMERIC]"
zle .accept-line
return
fi
zle .run-help
return 0
330 :
名無しさん@お腹いっぱい。:2009/08/10(月) 22:33:12
質問させてください。
vim app/views/users/show.html.rb
まで打ったのを
vim app/views/users/
まで戻したいとき、何かコマンド一発でできないでしょうか?
Ctrl+wのような感じです。
/とか、デリミタっぽいところまで一気にbackspaceさせたいのです。
教えていただけると幸いです。
>>330 WORDCHARS=`echo "$WORDCHARS" | sed 's!/!!'` とでもしてWORDCHARSから / を抜いてしまうのはグローバルに影響するから 宜しくないかな?
最近tcshから乗り換えたんだが…
tcshでは「/!* &」をaliasで設定するとbgで常に実行されて便利だったので
zshでも設定したんだがうまくbgで実行されなかったorz
>>332 関数を使って、
xv() { command xv "$@" & }
とかすればOK。
ただ、全部これを定義するのは厄介だと前から
思ってるんだけど、何かいい方法はないだろうか。
334 :
名無しさん@お腹いっぱい。:2009/08/11(火) 05:37:22
地震をzshでなんとかするには?
地震後一定時間キー入力がなかったら
生存していないとみなして
rm -rf /erodata を実行するようにしておくとか
…なんていうタイムアウトがないかと
info 見てみたけどなさそうだぬ
>>330 一発ではないけどvi-backward-kill-wordを使えば多少は楽になる。
>>336 bindkey "^W" vi-backward-kill-word
でいい感じになった。
>>330 じゃないけどthx
>333
emacsで設定したらエラーが出てしまうなぁ…
>>330 昔は 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
割当キーはお好きなように。
>>316 ちょっと外れるけど
久しぶりに man zshall してたら
run-help-ssh() {
コマンドラインが ssh ... command だったら run-help command
}
とかすると
% ssh ... command
で run-help したときに
run-help-ssh が呼ばれる → run-help command
ってなるらしい。
昔はこんなんなかった気がするけど。
run-help-nice とか書いとけば要求も満たされるんじゃない?
Parameter Expansion Flags ってよく覚えられないな〜
そう頻繁には使わないし、以前使ってても正確に思い出せない
for i ( ${(f)"$(ls)"} ) echo $i
みたいなのも $〜(f)〜 だか $〜(F)〜 だった気がする程度しかわからん
man zshexpn せんとわからん
もっというと Modifiers も $i:h 使おうとして
dirname の Modifiers って h とか r だっけってかんじだったりする
$i:[補完] でオプション補完みたいに説明付きで補完候補出れば
覚えなくてもいいかな
でもこれけっこう面倒そうさな
csh由来のmodifierは
head ⇔ tail
root ⇔ ext
extの意味は勘違いしないだろうから、そこからはじめれば他もわかるでしょ。
そういやなんで a/b.ext の a/b が root name なんだろう
なに root name って。
$dirname/$(basename file ext) ?キモ
345 :
名無しさん@お腹いっぱい。:2009/08/18(火) 05:29:48
質問
補完候補からディレクトリを除外するにはどうしたらいいですか?
% vi でタブを押したときにディレクトリがマッチして使い辛いです。
間違ってディレクトリを開くこともしばしば……
その動作で構わんだろ。サブディレクトリ中のファイルを指定することも考えろよ。
347 :
345:2009/08/18(火) 15:33:00
詳しい方のみ回答をお願いします。
また回答者の主義・主観の主張はご遠慮ください。
次の方どうぞ
349 :
345:2009/08/18(火) 18:39:18
自己解決しました。
350 :
名無しさん@お腹いっぱい。:2009/08/20(木) 05:54:44
変数値の展開(?)についての質問です。
PAGER='less -Rf' という設定で以下のシェル関数を定義して使うと、
function Diff {
svn diff $1 | ${PAGER}
}
% Diff some_file
Diff:1: command not found: less -Rf
svn: ストリームに書き込めません: Broken pipe
となり、'less -Rf' が一続きのコマンド名として扱われてしまいます。素直に
svn diff $1 | less -Rf
と解釈してもらうにはどう書けばいいのでしょうか?
352 :
350:2009/08/20(木) 06:40:46
>>351 うは、同じスレに答えが、しかもFAQネタorz
ありがとうございました。
${=PAGER} でいけましたっす。
実際使っててどっちが使いやすいんだろうな?
zshのデフォがno_sh_word_splitということは、それはそれでメリットがあるからやってるんだろうけど
大してzsh使い込んでないんでよう分からん
個人的には no_sh_word_split だけど migemo 補完って誰かやってる? (前半と後半に関係は特にありません。)
いつのバージョンからかわからないんだけど
ファイルa aaがカレントディレクトリにあるときに
% rm a
の状態でTABを押したときの補完が
% rm a
a aa
と候補が出るのではなく
% rm aa
とaaにだけ補完されるんだけど
どなたか治し方しらないですか
ファイル消えまくりorz
menu complete の動作が嫌ということ? 自分もこの動作があまり好きでないので、
setopt NO_AUTO_MENU にしている。適当なキーに menu-expand-or-complete を
割り当てて、欲しいときは明示的に menu complete を呼び出すようにしているけど。
でも、デフォルトの動作って途中で変わったかな。tcsh から移行したときに
設定したような気がするが、もうよく覚えてない。
違うっす
lsコマンドなどでは、
% ls aの時点でTABを押すと
a aa
と補完候補が出て、次の文字の入力待ちになるにもかかわらず
rmコマンドの時だけ
% rm aの時点でTABを押すと
% rm aa
となり、aは一切無視されるんです
Gentooで4.3.x(失念)です
おいらは
% touch a aa
% rm a[tab]
すると
rm a [かーそる]
になるけど。
aで(他の候補はあれど)完結しているときに
tab 打つとそこで確定、ってことかな?
(tab でなく ^D だと a aa が表示されます)
compdef -d rm
で対処しました。お手数掛けました
zshでbashのhistignoreみたいなのできませんかね?
zsh その4で
255 :名無しさん@お腹いっぱい。[sage]:2005/10/19(水) 23:09:46
setopt histignorespace で
alias ls=' ls' cd=' cd'
とあるんですが、引数付きの時は残したいのですが、何か手法はありますか?
completion の matcher-list にも正規表現が使えるといいんだけど。
というか、 PATTERN MATCHING でも (a|b) は使えるのにこれも
matcher-list じゃ使えないからなあ。残念な話だ
>>355 _rm が編集行の指定済ファイルを補完対象外にしていて、
入力中の語もその中に入っちゃってるみたいね。
多分期待動作じゃないんだろうな。
_rm 内の↓がそれっぽい。ここらへんの記法が何するものかは忘れたけど
ignored=(${line//(#m)[\[\]()\\*?#<>~\^]/\\$MATCH})
>>363 細かい解説どうも。いつからか_rmが追加されて、それ以降の挙動のようですね
期待動作というかlsのような補完と挙動が違うのは バグ だと思ってます
_rm採用以前はすべての対象ファイルが補完されてたわけだですし
cd でディレクトリのみを補完対象にするのとはワケが違うと思うんですけどね
自分でいじったんじゃなくて?
もちろん。自分ではいじってないですよGentooがいじってる可能性はあるかもしれませんが
バージョンは4.3.9でした
>>364 lsとかの単なるファイル補完と違うのは
rm a a
みたいに同じファイルを2回指定することはないから
補完対象から外しているんだと思う。
(lsも2回指定することはない気はするけど、外すようにはしてない。
必要はないしね)
これ自体は個人的には悪くないと思う。
menulistで補完してると、
2つ目にも指定済のファイルが候補にあると邪魔だからね。
通常のファイル補完でこれをやると、例えば
cat a a
とかはありうるから、うまくない。
まあ rm でやっていて ls でやってないことが気になる人もいるってことかな。
_rm が入力中の語も補完対象外にしているのは
バグっぽいなあと思うけど。
その語は入力が完了しているから補完する必要がないとも
強引には考えられるけど。いや無理があるか。他の補完動作とも合ってないしね。
ていうか、
[[ -e file* ]]
みたいなことって、できないんだっけ?(file* にマッチするファイルがあるか判定)
[[ でできないってだけだけど。
これ普通どうやるんだっけな。
そうか。そうだね。
tmp=(file*(N)); (( ${#tmp} ))
↑なん考えちゃったよ。
# tmp が消せなかった
それなら
: file*
でよさそうだね。
thx.
( : file* ) 2>/dev/null
としないと errmsg とともに終わる(forが)
そんだけ
補完の設定でフィルタ関数みたいなのはないのかな。
入力語と補完候補をとってマッチするか否かを判定するようなやつ。
内部コマンドの getopts で POSIXLY_CORRECT=0 に相当する
動作にできないものだろうか。履歴を使い回して末尾にオプションを
付け足したいときがままあるので。
bashのスレはどこですか?
環境変数でなくてプロンプト記法における %l だね
.zshenvっていつでも読まれるはずだよね?
ログインシェルだと.zshenv読んでくれないんだけど,なんでかな
.zprofileはマニュアル通り(ログインシェル時のみ読み込む)なんだけど,
.zshenvがその反対(ログインシェル以外のとき読み込む)になってるみたい
なんでかなって、1行目の思い込みが間違っているからに決まってる。man読め。
もちろん読んだよ
> Commands are first read from /etc/zshenv;
> [...]
> Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login shell, commands are read
> from /etc/zprofile and then $ZDOTDIR/.zprofile. Then, if the shell is interactive, commands are
> read from /etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login shell,
> /etc/zlogin and $ZDOTDIR/.zlogin are read.
これ見るといつでも(NO_RCSでない限り).zshenvを読み込むと思うんだけど
もしかして違ってる?
>>379 ログインシェルでも .zshenvを読む。
ただし、zshが sh互換モードで起動されると .zshenvは読まない。
ログインシェルの時だけ /bin/sh -> zsh の symlink 経由で起動してるんじゃない?
ありがとう
compatibilityの項読んだよ
> The usual zsh startup/shutdown scripts are not executed. Login shells source /etc/profile fol‐
> lowed by $HOME/.profile.
けど /bin/sh -> bash になってるし,.zprofileはちゃんと読んでくれてるから違うと思う
>>379 もしかしなくても違ってる。
そのセクションを全文読んでから、ありえる解釈を列挙して
一つ一つ検討してもっとも妥当なものを選べ。
それができなきゃソース読め。
>>382 違ってはいないだろ。
オレの環境では login shellでも .zshenv をちゃんと読み込んでるから。
setopt globcomplete
man (\\|e)[Tab]
ってやると ex* がヒットするよ〜。
(e|\\)
(\*|e)
('*'|e)
も同じ。
(\\|a) だと ax* がヒットする。
(記号|文字列) で 文字列x にヒットするようだ。
(\\|\\) だと何故か ex がヒットする。
まるでバグのようだ。
zstyle ':completion:*' matcher-list 'm:a=日本語文字'
ってやるとうまく動かない。動く日本語文字もある。
ab とか、 aの後に文字があると ab[Tab] で m:a=日本語文字 が適用されない。
% printenv LANG LC_ALL
ja_JP.UTF-8
ja_JP.UTF-8
% touch 名yy 二yy 椎yy xxyy yyああ あyy アyy 一yy
% ls
xxyy yyああ あyy アyy 一yy 椎yy 二yy 名yy
% zstyle ':completion:*' matcher-list 'm:a=x'
% : aay[Tab] → xxyy
% zstyle ':completion:*' matcher-list 'm:a=あ'
% : a[Tab] → あyy
% : ay[Tab] → あyy
% : yyaa[Tab] → yyああ
% zstyle ':completion:*' matcher-list 'm:a=x m:a=あ m:a=ア m:a=一 m:a=二 m:a=名 m:a=椎'
% : a[Tab]
↓
% : 名yy
file
名yy 二yy 椎yy xxyy あyy アyy 一yy
% : ay[Tab]
↓
% : あyy
file
あyy アyy 一yy
% touch yy名 yy二 yy椎 yyxx yyあ yyア yy一
% ls
xxyy yyxx yyあ yyああ yyア yy一 yy椎 yy二 yy名 あyy アyy 一yy 椎yy 二yy 名yy
% : yya[Tab]
↓
% : yy二
file
yy二 yy椎 yy名 yyxx yyあ yyア yyああ yy一
↑ みたいに、「あ」、「ア」、「一」は動くけど、「名」、「二」、「椎」はうまく動かない。
もう書けない。
アッー!
スンマセン言ってみたかっただけです
388 :
330:2009/09/15(火) 19:12:50
すいませんお礼忘れてました。
レス下さった方々ありがとうございましたm(_ _)m 参考になりました。
実行したプロセスすぐに終了しなかった場合にそのプロセスをkillする
方法ってありますか?
rshなどでタイムアウトのときに使いたいと思っています。
zshって最強なの?
最低です
最強は Version 7 の Bourne Shell
ソースは最狂だが。
残念ながら buggy な zsh
誰か pulseaudio 0.9.15 向けの _pactl 持ってない?
欲しい。
やっぱり反応ないなあ。
自分で使う pactl move-sink-input だけ実装した。
と一応の自己レス。
zshユーザって日本にどんくらいいるんだろ
たしか5人くらいって効いたよ
じゃあおれアシュラマン役な
じゃあ僕はサンシャイン
アシュラマンと組んだ時のサンシャインって
なんで砂にならなかったの?
ログインシェルがデフォでzshなディストリが出てこないと増えないよなやっぱ
SH_WORD_SPLITがデフォじゃないと増えないよなやっぱ
自分のzshスクリプトをbash野郎に説明すんのにすごいストレス溜まる
zshでスクリプトなんて書かねーよ
01,02,・・・,99が{01..99}でできるってだけで有り難いわ
bashでもできるよ
>>408 マジで?うちの環境ではbashは3.2だが古すぎるのか
bash使ってた頃はいちいちprint文とか使って桁を整えてたわ
ぶっちゃけbashは4でzshに近づくことができたのか?
>407
エロ画像連番スレの基本技5ヶ条の1だね
>>409 CHANGES によると { .. } は bash-3.0-alpha で実装された模様。
でもうちの 3.1.17 だとこうなってしまう。
$ echo {01..10}
1 2 3 4 5 6 7 8 9 10
$ bash -c 'echo {01..10}'
01 02 03 04 05 06 07 08 09 10
bash-4.0.33
>>413 bash-4.0-alpha からそうなったみたいね。TNX
ksh93なら
$ echo {01..010}
1 2 3 4 5 6 7 8
$ echo {0x0..0x10}
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
>>413 すげー、bashも進化してんだなw
他シェルの便利機能を取り込む姿勢はたいへん宜しい
ただ、3→4へのメジャーバージョンアップはgccのそれを思い出して
ついまともな出来なのかと疑ってしまうw
>>415 そんなことできるのかksh
bashもtcshもいつの間にか機能増えてたりするんで
なかなか機能差異を説明するのも難しい
まだ鍛錬が足らぬだけか
でもよく調べると、やっぱzshに及ばないジャンwって結論に至る
fish!!
x68000にfishというシェルがありました。
Cシェル系だったけどナー。
いや fishshell.org のことでしょ。
zshの配列のインデックスって1からなのかよ!
小半時悩んじまったじゃねーかハゲ
$ bash -c 'foo=("bar" "baz"); echo ${foo[1]}'
baz
$ zsh -c 'foo=("bar" "baz"); echo ${foo[1]}'
bar
zsh金玉
ズィーエスエイチ袋
_7z _convmv 誰か持ってる?くれ。
zftpの使い方がいまいち分からない
これ便利なの?
cd - [TAB]で表示されるディレクトリ一覧の、降順・昇順を切り替えるオプションってありますか?
やっと規制解除きた
>>430 cd +[TAB]
とすれば良いのでは?
+ と - の意味を切り替えるのは
setopt pushd_minus
コマンドを実行せずにヒストリに登録する方法は無いのかな?
zle accept-line のコマンドを実行しない版が欲しいんだが。
# HISTFILE を編集するのは無しの方向で。
過去の話題から。適当なキーに割り当てる。
history-register-line () { fc -R <(<<<$BUFFER); zle send-break }
zle -N history-register-line
434 :
432:2009/11/07(土) 09:44:36
>>433 thx, うまくいきました。
# history-register-line でググったら
>>20 がヒットした orz
# FAQ だったか。スマソ
ディレクトリの移動履歴だけを対象にして C-r みたいなことがしたいのですが、
どうやったらいいですか?
436 :
430:2009/11/10(火) 14:39:29
437 :
名無しさん@お腹いっぱい。:2009/11/14(土) 17:38:35
cd aaa/bbb/ccc
と入力した後に、backward-delete-word で aaa/bbb/ccc をすべて消すのではなく、
最後のスラッシュまで (cccのみ ) 消すことはできるでしょうか。
たしか何かのシェルではできていたのですが、調べてみましたが、zshでのやり方がわかりません。
よろしくお願いします。
全く同じ質問を2ちゃんねるのzshスレで見た記憶があるんだが
/'⌒`ヽ、この質問定期的に来るNE!
ヽ、┗ ノ
`ーー' γ⌒`ヽ /'⌒⌒ヽ、
,-ーー-、 .|| ̄ ̄ ( ┃ ⌒ヽ
/ ┃ ) || /⌒ヽ \ ━┛ )
.(. ┃ ) ||. ( ^ω^ )
ヽ、__,ノ || _(つ¶¶と)__
/||'''''| 三 | |'(⌒)
/ '―――――`  ̄ \
`============'
>>330
440 :
437:2009/11/14(土) 17:57:05
ありがとうございます。
それなりにzshのまとめブログを内外、見て回って使っていたんですが、ここを利用させていただくのは初で。。
これからは過去ログをチェックします。
これは需要があるとおもうんですが、意外と共有されていないのが不思議です。
441 :
sage:2009/11/14(土) 18:14:40
tab で補完完了時に, もう一度 tabを押すのがいやなのですが、自動的に補完内容を表示する事は可能でしょうか。
例)
aaa code/ru
-> [tab]
aaa code/ruby/ # 補完完了
-> [tab]
( やっと一覧表示 )
を、
aaa code/ru
-> [tab]
aaa code/ruby/ # 補完完了
( ここで自動的に一覧表示。)
zstyleを調べていたのですが、よくわからす、よろしくお願いします。
443 :
441:2009/11/15(日) 13:46:37
補完完了時に何かトリガーするってできないのかな、、、
zshの補完にmigemo使えるようにならない?
そりゃmuripo
C-wで削除するときに直前の文字が日本語だと空白区切りまでじゃなく
その一つ前の単語も一緒に削除されちゃうんだけど、これってどうなのよ。
なんか設定で変更できない?
echo だよもん[C-w] → 行頭まで削除されちゃう
echo hoge だよもん[C-w] → echo になる(hogeも削除される)
俺が
>>444 書いたんじゃないよな…
migemo補完しようとは思ったけど…
これ[
ttp://ja.pastebin.ca/1691159 ]を fpath に入れて
zstyle ':completion:*::::' completer _complete _migemo
とかするとなんとなく migemo補完するかも。
migemo展開パターンに記号が入ってたり、なんかすると
動かなかったりして、補完しようとするケースの半分くらいで
使えないという残念仕様だけど。
# 補完に利用している globcomplete が上記ケースで何故か動かない。
一応、PWD直下のファイル名補完なら、migemo入力を3文字程度以上
打ち込んどけば補完したはず。
後、completer 指定から分かる通り、通常補完が優先なので
それにヒットするとmigemoは動かない。
# _complete は外せるけど。
ちなみに俺は使ってない。使えないので。
もっと汚くて使えるものを今書いてるので、
また上げるかもしれない。
# 使えるといっても、対象をファイル名補完に絞った
# 個人的には使用に耐える程度のものだけど。
そういえば、_migemo って名前は compdef migemo で使いそうな名前なので、
_migemo_complete とかにした方がいいかも。
>>441 よくわかってないけど、こんなん?
complete-and-list () { zle complete-word ; (( _lastcomp[nmatches] == 1 )) && zle list-choices }
zle -N complete-and-list
bindkey "^I" complete-and-list
>>446 ならないよ
>>448 ならない人もいるのか。
バージョン・環境・ロケールなど教えてもらえる?
わり、 ~/.zfunc/ の widget を bind してたわ
でも ↓ でも同じだった
bindkey "^W" backward-kill-word
bindkey "^W" .backward-kill-word
% echo $ZSH_VERSION
4.3.9
% uname -rs
Linux 2.6.30-gentoo-r6
% printenv LANG LC_ALL
ja_JP.UTF-8
ja_JP.UTF-8
ちなみに、消した後、"^[r" (redisplay) するとどうなる?
変化なし。表示だけおかしいというわけでもない。
バージョン等は4.3.10、FreeBSD 8.0/amd64、ja_JP.UTF-8。
ebuildを見たけど、別段portsと変わっているようにも見えないしなあ。
この件、450と451の違い通り、原因はOSのロケール情報だった。450さんありがとう。
ざっくり言うとzshではiswalnum(3)で単語文字を識別していてLinuxでは
これが漢字かなに対して真になるけどFreeBSDではならないことによる。
glibcのロケール定義をみると、Linuxではctypeのalphaクラスに各言語の文字がずらずら入っている。
これに比べてFreeBSDのshare/mklocale/UTF-8.srcの方はヨーロッパ文字以外はお寒い。
ロケール周りはそのほか比べてみると全体的にFreeBSDは見劣りするね。
おつかれ
svn a[TAB] b
すると
unknown svn command: a
ってなる。どうにかならんかな?
svn a[TAB]
だとちゃんと補完するけど。
_subversion の _svn() 内の最初の
_arguments -C \
'(-)--help[print help information]' \
'(- *)--version[print client version information]' \
'1: :->cmds' \
'*:: :->args' && ret=0
で '1: :->cmds' に当たらず '*:: :->args' が効いてるみたい。
_arguments って 1: と *:: を同時に使っちゃいけないんかな?
よくわからん。
TABで補完したときに、ファイル名が一意に定まらない時は
必ずリスト表示してほしいんだけど、いい設定とかないかな?
ls .zs[TAB] → ls .zsh
ここで[^d]すると
.zshenv .zshrc
と出てくるけれど、それなら最初から出してほしい。
autoload predict-on
predict-on
で、先方予測を有効にしているのですが、しばらくログインシェル
として使っていると、何かの拍子に先方予測が利かなくなっている
ことがあります。(source ~/.zshrc するとまた効き始める)
何か、ショートカットで有効になったり無効になったりするもの
なのでしょうか?
あと、先方予測を有効にしていると
apt-get install hoge
と入力したとして、あ、sudo しなきゃ…と思って戦闘に戻って
sudo と打ち込んだ瞬間、今までの apt-get... がそっくり消える
のですが、これは何か回避のしようがないものでしょうか?
zsh使い始めたばかりですが、余りの素晴らしさに感動しきりです
この点のみ未熟なばかりに不便に感じているのでご教示いただければ
>>457 setopt autolist ?
デフォルトで利いてるはずだけど。
>>460 レスありがとう。
autolistがデフォで利いてること、
noautolistでリスト表示は^Dで明示的に指示した時のみとなることを確認しました。
457 に示した用に、autolistが設定されている場合でも、
一意に定まらない場合にリスト表示がされないことがある、のが個人的な不満というか…。
それとも、上記の例の場合でも、常にリスト表示されているということでしょうか?
>>461 unsetopt listambiguous
これは良いことを聞いた
>>458 predict-off とか bindkey してない?
じゃなきゃ zstyle :predict toggle yes してるとか。
それか BUFFER 末尾以外で ^D すると predict-off するかも。
# predict-on 使ってないからよく判らんけど。
# なんか重そう(でもないかな?)なのと、
# 動きを把握できない(仕様がよく解っていない)ので避けてたんだよね。
あと、source ~/.zshrc するより
zle -N predict-on
bindkey '^X^Z' predict-on
とかしといた方がいいような。まあ個人のスタイルかも知れないけど。
いや、predict-off はしないはずという前提で不要な bindkey をしてないだけか。
あと
>>459 は predict-on が LBUFFER(カーソルより左の部分)しか見てない気がするので
多分、そういうもんじゃないかな。(んなこた解ってるって?)
多少面倒でもいいなら predict-off → type sudo → predict-on って感じかな。
無論 predict-off/predict-on は bindkey した上で。
>>463 俺もw
このスレって常駐してるだけで色々勉強になるから助かるわ
深いパスで、ないファイルを補完しようとすると _approximate あたりで
暴走してたんだけど、サンプル zshrc の
zstyle -e ':completion:*:approximate:*' max-errors \
'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )'
の指定が重かったんだ。結構、サンプルから取り込んで未検討のままに
なっているものがあるけど、これもその一部。
_approximate 自体、不要という気もするけど。
zsh/regex
zsh/pcre
って multibyte 対応してないのかな。そんな感じだけど。
zsh/regex は setopt multibyte しても日本語文字が singlebyte として扱われてるような感じ。
zsh/pcre は setopt multibyte すると LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 で
% [[ い -pcre-match い ]]
zsh: failed to compile regexp /い/: invalid UTF-8 string
% pcre_compile い
pcre_compile: error in regex: invalid UTF-8 string
みたいに怒られる。 [[ あ -pcre-match あ ]] は何故か成功するけど。
# ja_JP.UTF-8 以外の場合は singlebyte として扱われてる気がする。
# これは pcre が UTF-8 のみ対応してるってことかな?
「使えてるよ」って方いらっしゃいます?
正規表現に関してはzshは他のライブラリ(OS標準のregexなりPCREなり)を呼んで
るだけだから、そちら側の都合。
egrep は multibyte 認識してるっぽいけど…自前ってことか。
pcretest は UTF-8 で一応動いてるっぽいけど…pcre の UTF-8 support が実験レベルってことで、色々あるんだろうなあ。
まあとにかく動かないってことでいいか。
>>444 もう居ないか知らんけど…
>>447 の代わりのmigemo補完。
これ[
ttp://ja.pastebin.ca/1711428 ]を fpath に入れて
zstyle ':completion:*::::' completer _complete _migemo_complete
とかすると動く。あー、* 要らんかな?いつ * の位置が空じゃなくなるのか分からん。
対象はファイル名補完。他も動く可能性はある。
migemo と関係ない動作としては、入力文字列中の : が regex 的に .* になるってとこかな。
まずい点とかはコメントに色々書いてあるけど…
まあとりあえずいいか、というところ。個人的には特に問題ない。
人によっては ↓ あたりが問題かも。
- 入力中のメタ文字は多分うまく扱えない。
- coproc 使う人は直さないと coproc がまともに使えない。
- menucomplete でしか動かしてない。他はまともに動くか判らない。
- LANG=ja_JP.UTF-8 用なので、nkf のとこ直さないと他は無論動かない。
候補が大量にあると遅いんだけど、日本語文字がない
(というか asciiのみの)候補を対象外にすると
もうちと速くなるかも。と今思った。
てか、候補1つで補完前のカーソルの位置が補完後の全角文字の中にあると
カーソルより後の部分が補完後に表示されないなあ。redisplay で出るけど。
zsh が出力してないみたいだけど、なんでだ…
いやー、pastebin って CRLF noeol になるんだなー。
あけおめ
おめ
↑テラトイザラスwww
ハア?('A`)
man すると multios では > word 2>&1 と &> word は違うよ、って書いてあるんだけど、
良く分かりません。ありがちな hoge > /dev/null 2>&1 と hoge &> /dev/null だと、
具体的にどう違うのでしょうか?
例が悪すぎ。/dev/nullに捨てるんじゃ一緒だろ。
478 :
名無しさん@お腹いっぱい。:2010/01/09(土) 22:49:00
$ a=`jobs`
$ echo $a
で jobs の結果が a に入らないのはどうしてですか? jobsの結果を直接 tty?に流してる?
入るけど
481 :
名無しさん@お腹いっぱい。:2010/01/10(日) 13:40:00
$ jobs で結果が見れるので、空ってことはないのですが、
>> 479 本当ですか?
結局僕はこれで取れました。
$ jobs | read a
$ echo $a
>>481 zsh 4.3.10で試したけど
普通に入ってる
zsh-4.2.x のバグだ。
484 :
名無しさん@お腹いっぱい。:2010/01/10(日) 16:08:26
$ zsh --version
zsh 4.3.4 (powerpc-apple-darwin9.0)
でした。macだからかなぁ。
MacOS X Snow Leopard
$ echo $SHELL
/bin/zsh
$ which zsh
/bin/zsh
$ zsh --version
zsh 4.3.9 (i386-apple-darwin10.0)
$ sleep 10000 &
$ x=`jobs`
$ echo @$x@
@[1] + running sleep 10000@
486 :
名無しさん@お腹いっぱい。:2010/01/10(日) 17:13:08
MacOS X Leopard 10.5.8
$ uname -a
Darwin MacBook.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386
$ echo $SHELL
/bin/zsh
$ which zsh
/bin/zsh
$ zsh --version
zsh 4.3.4 (powerpc-apple-darwin9.0)
$ sleep 10000 &
[2] 4081
$ a=`jobs`
$ echo @$a@
@@
$ jobs
[2] + running sleep 10000
Ctrl+Rコマンドヒストリ検索で日本語入力が出来なくなってるよ
zsh 4.3.10ではCtrl+Rコマンドヒストリ検索で日本語入力が出来ないよ
ヒストリ検索がちゃんと出来ないzsh使うなんてありえないよな
ここの連中は一体どんな環境でzsh使ってんの?
そもそも、インクリメンタルサーチで日本語を入力したことが無い。
そもそも、日本語名のファイルが無い。
そもそも、インクリメンタル検索で日本語入力という発想が無い。
In the first place, I don't use Japanese.
setopt hist_ignore_space
していると、確かに履歴ファイルには記録されないのですが、
<C-p>で履歴を戻ったとき、出てきてしまいます。
ここでも出てこないようにするにはどうすればいいでしょうか?
vi [tab] とかってやったときにドットファイルも補完候補に表示してほしいんですが、
どうやったらいいですか?
ハローは日本語?
kon'nichiwa は日本語?
ニーハオは?
中間言語
餃子屋
結局 kikaku.doc とかは日本語ファイル名ってことでいいんだよね?
あなたしだいです!
用字と言語は別。
501 :
名無しさん@お腹いっぱい。:2010/01/25(月) 05:39:08
あなただいなしです!に見えた
503 :
名無しさん@お腹いっぱい。:2010/01/27(水) 22:40:16
>>471 condition expected: $words[i]とかいうエラーがでるんだけど何が原因かわかりますか?
504 :
名無しさん@お腹いっぱい。:2010/02/15(月) 02:31:52
Ctrl-. (ピリオド)を
bindkey ”^.” redo
とかに割り当てたいんですけど、
Ctrl-.を入力しても、そのまま.がターミナルに表示されます。
sttyで何か設定すればC-.が有効になるのでしょうか?
Ctrl-.なんて文字は存在しないから受け取りようがないのです。
emacsだと以下で行けるけど、ターミナルだと無理なんかも
(define-key global-map [?\C-.] 'redo)
ターミナルのなかで文字として受け取るか
X-client がイベントとして受け取るかの
違いが理解できていないのか?
emacsのxterm.elでは(define-key map "\e[27;5;46~" [?\C-.])と定義してある。
ターミナルソフト側でC-.を押したら\e[27;5;46~を送出するよう設定すればおk
509 :
504:2010/02/15(月) 23:37:58
ありがとうございます。
設定してxterm上ではC-.キーつかえました
でも、いつも使ってるgnome-terminal上では送出設定できなさげでorz
gnome-terminalは.Xdefaultsが効かないんだっけ
.XdefaultsはAthenaWidgetのもんじゃねーの?
.Xdefaults(.Xresources etc.)については
xrdb の仕組み・罠とかいろいろ知らないといけない
cygwin上ででzshを触り始めたんですが、
.zshrc に
「windows上で動いてるなら "c:\Program files\" の
配下のファルダ全て(もしくは一つ下のサブフォルダまで)をPATHに追加」
(新しくアプリが追加されたら、次回のzsh起動時に自動的に読み込みたい)
このような処理は出来ますか?
もしできるなら、何をどう使って書けば良いでしょうか?
そう書けばいいんじゃないの?
>>514 書く方法がまったくわからないので、何かキーワードを頂けませんか?
>>514 ヒント:
path=($path(N-/) /*/bin(N-/) $HOME/bin(N-/))
typeset -U path
>>518 一瞬ジョークのように読めてちょっと笑った。
>>503 前に何か直したんだけど、error message がどんなんだったか忘れた。
↓ の patch で直る? error 内容が違う気がするので、直らない感があるけど。
% diff -u 1711428 _migemo_complete | gzip | base64
H4sIAPhRfUsAA62Sy07CQBSG1+1THKEh4DBmppAANY1d8BaFTAoMpdpbSo0hokldmLh14xsYtz5T
E5/DaQdE5BIWzmY6M9//n1sxxkA7lLb1rqITSjDRMe2C3jL0jtHqXZD1AkR6hKgIIWCB5/IgYuMo
iH2e8j/CNjFod0doWYAp0ZsdQHKzLBXkmkQhX3/HTmpWtPv6tXFuNMThoaJUgbsJj4unlCch5E+v
4PrRaOSF7uYy+8iztzx7/3r5zLNnFVQsDet10FDgpOOZwFnC57d+yoSKeRNbE/sQGg1YLgvuKGWC
Vt0PCAMV/VewwSnRVr3yo7Hjg7w2tWNhtxUr4IYvRJvKuVC92RNzKbdiLsoGMTVpZGh3UTKZ254w
U7xpUcLZbrG2tlEWxV5COuOhUADYNvxYgCkKfBTGMByqWIE9Ddl2MotgV2Wn99ODAzgoU09EkAmf
liw6QA8O11aifI7M302Sv0M1ilPWL+Zeq0GfOUniLFgaxIJdnSQt0vwGAasJiowDAAA=
打ち間違いで command not found になった場合は
ヒストリファイルに残してほしくないんだけど
何かいい設定とかないでしょうか?
preexecかzshaddhistoryでなんとかするのかな?
$PWD の長さを取得したいんですが、ホームにいるときは ~/ の2文字ではなく /home/username が返ってきます。ホームのときも考慮した$PWDの長さはどうやって取得できますか?
代わりに print -P '%~' の出力をみればいいと思う。
>>524 ${#PWD/${HOME}/\~}
何がしたいのかさっぱり分からないが…
autoload run-help って結構微妙な動作すんだな
rcは対話シェル用の設定を書くところだから、
正しいアプローチは.zshenvに該当の設定を移すことではないの?
>>528 一応 zsh -i +f -c 'do sth' で、無理矢理インタラクティブにしてしまえば .zshrc を読んでくれる
何のための .zshenv だよって言いたくなるが
>>529-530 返信ありがとうございます。
そうですね。 .zshenvに設定を移すことにしました。
532 :
名無しさん@お腹いっぱい。:2010/03/17(水) 01:20:42
findしまくりのbashスクリプトと、zshだけで完結しているスクリプトだったら
どっちが早いんだろ?
zsh で ** だとリストが長すぎてダメってことは稀によくある。
俺もよく稀にある。**/** 便利だから取り敢えず使っちゃう。
>>532 zshのほうが速いので比較するまでもない
zsh 使いなら当然 zargs も使うだろう
>>2 それをその速さで貼れるってことは
お前それをコピってずっと待機してたんだろ?
リロードしまくって。誰かスレ立てるの待って。
まじきめーな。氏ねよハゲ。
538 :
537:2010/03/26(金) 12:55:45
ごめんなさい
誤爆しました
ワロタ
>>533 いくつまでなんだっけ?いちいちfind使うのが面倒なんだよなぁ。
自分でソースからコンパイルすれば上限変えれるのかもしれんが・・・
>>540 きょうび自分でカーネルリコンパイルなんてFreeBSDくらいじゃないかね。
そういう話じゃなくて。
exec(2)に渡せる長さの上限は、FreeBSDだと sysctl kern.argmax かな。
だからfind + xargs -> zargs でFA
>>542 いやでも、自分でソースからコンパイルすれば上限は変えられるけど
カーネルリコンパイルってなかなか手を出さないと思うけどな。
カーネルアップデートがある度にやり直しなわけだし。
zargsシランカッタ…こんな便利なものが
zsh% zargs
zsh: command not found: zargs
って言われちゃうけどどう使うの?
autoload zargs
zfags
for n in {01..99};do で01,02,…と桁数一定の連番にできるのが凄い便利なんですが、
これのインクリメンタルを1でなく任意にする方法はありませんか?
for ((n=1;n<100;n=n+m));do の形式だとbashと同様、1,2,…となってしまい
n=01とやっても同じで不便ですね。
for n in `seq -w 1 2 99`; do
seqはGNU coreutils以外にもあるの?
>>550 for ((i=1;i<100;i=i+2)); do echo ${(l:2::0:)i}; done で出来るけどなんか不細工
bash なら {01..99..2} で大丈夫
>>552 じゃあ、jotで
jot -w %02d - 1 100 2
内部コマンドだけだと
for ((i=1; i<100; i+=2)); do print -f "%02d\n" $i; done
スマートにはいかんな
typeset -Z2 i
自分だったらこんな感じかな
for i in {1..10}
echo $(printf "%02d" $[i*2] )
>556 辺りが一番すっきりなんだろうけど
たぶん必要なときにこれを思い出さない気がする…
558 :
550:2010/04/16(金) 15:00:37
皆さんありがとうございます。色々ありますね。
自分は今のところprintfで桁数を整えています。
>>553 >bash なら {01..99..2} で大丈夫
こちらのbash 3.2では解釈してくれず、{01..99..2}がそのまま i に入ってしまいました。
4.xでの機能でしょうか?
上でzargsが挙がってましたが、zsh/filesを使うほうがもっと簡単なんじゃない?
と思ってやってみたら、↓のように変なところで怒られたんですが、何でですかね?
ディレクトリをmv (/の有無)
mkdir hoge fuga
$ mv hoge/ fuga/
mv: fuga//: cannot overwrite directory
$ mv hoge fuga/
異なるファイルシステム間でmv
$ touch /tmp/hoge
$ mv /tmp/hoge .
mv: /tmp/hoge: invalid cross-device link
上はバグかな。
下はそういうもん。
>>560 >上はバグかな。
まじすか・・・4.2.6なんですが、新しいのだと直ってるんですかね?
>下はそういうもん。
まじすか・・・ファイルシステムが異なる場合はrename関数でinodeを書き換えるのではなく、
新規に作って元のを消すという仕様だったと思いますが、それがきちんと実装されていない
ということですかね?だとするとこれもバグのような気が・・・
バカかお前。manくらい読めよ。
563 :
559:2010/04/20(火) 19:50:05
>>560の「そういうもん」の意味を、変な風に捉えていました
manにThis may change in a future version.書いてありますね
ついでに本家サイトに行ってmanを見てきましたが同じでした
引数の最大値の制限を受けないのは魅力的だったけど、やっぱりやめとこう・・・
564 :
名無しさん@お腹いっぱい。:2010/04/25(日) 17:31:00
bash の set +h に相当するオプションありますか?
どういう機能か書いてくれないからbashのマニュアルを調べてしまった。
hash_cmds かな?
566 :
名無しさん@お腹いっぱい。:2010/04/29(木) 00:33:11
>565
ごめん, Z な漢たちに bash の説明なんて余計なお世話だったらどうしようかと,
そして, ありがとう. man zshoptions ですね.
hash_cmdsってハッシュテーブル使うって意味だよね
利点がいまいち分からないんだが・・・
体感するほど速くなる?
利点がないからこそ hash_cmdsを無効にしたい、って話だろ
>>564 は (bashの) set +h (ハッシングをしない)相当をやりたいの
だから、zshで実際に設定するのは nohashcmds のほうになるはず。
>>569 それでもいいけど、set +o hash_cmds で無効に設定できるよ
hash_cmds って知らなかったからちょっと調べてみたけど、これがオンの場合
PATH=/usr/local/bin:/usr/bin だとして
/usr/bin/hoge を実行した後、/usr/local/bin/hoge を作成しても
その後 hoge と打ったときに実行されるのは /usr/bin/hoge
というふうに理解したのだけど、これで合ってる?
実行可能なファイルをパスの通ったところに放り込むと直後にそのファイルがタブ補完で呼べる、
という挙動が hash_cmds と no_hash_cmds の両方で同じだった。
もしかして、コマンド補完が効くというのはハッシュとは関係ないの?
573 :
572:2010/04/29(木) 23:03:38
お、
>>571と似た話かな?
この辺誰か解説してくだしあ。
>>572 一度補完させた後に新規に作成したファイルは補完されない
bindkey -v使いたいんだが...
どっかにvimのヴィジュアルモード再現してくれる猛者いねーかな。
アレが無いと、削除もヤンクも使えたもんじゃない。
おかげでbindkey -e使うハメに。くつじょく
チラウラスマソ
576 :
572:2010/05/01(土) 00:59:09
いまいち分からなくて色々調べてたんだけど、no_hash_cmds だとハッシュが
一切関係なくなるかと思ったら、タブ押した瞬間にハッシュに登録されるようで、
以降PATHのより上位に同じのをコピーしても最初のやつが参照される。
PATHを探索するタイミングとハッシュが登録されるタイミングというのは
どうやら同じではないらしい・・・。
うーん、なんか腑に落ちないけどまぁいいや。いずれにしろ、名前がカブってるのを
異なるパスに置くなんてことをしない限り(普通しないよね?)関係ない話だし。
bashのhistory -d offset みたいに指定した履歴行を削除する方法はありますか?
なさそう。fc -R/-Wで作業ファイル経由かなあ。
>>575 bindkey -M vicmd v set-mark-command
とかなんかして適当に
foo-delete/foo-yank 作ればいけるんじゃない?
>>579 ありがとう。感謝感謝
zshall 読む気にならないのは俺だけではないはず。
いや、このスレ的には読んでないと駄目なのか
#ビジュアルモードを実装
function _vi-visualmode-delete() {
zle set-mark-command
...
...
}
zle -N _vi-visualmode-delete
bindkey -M vicmd 'v' _vi-visualmode-delete
根本的に方針を変えるべきか
bindkey -a v set-mark-command
bindkey -a d foo-delete
foo-delete() {
zle vi-delete
if (( REGION_ACTIVE )); then
zle exchange-point-and-mark
fi
}
(これ動くんかな…)
な感じでいくか、あるいは
bindkey -N vivis vicmd
bindkey -a v vi-vis-mode
bindkey -a d vi-vis-delete
とか?
てか set-mark-command だと多分、範囲末尾が1文字分期待と違うな。
しかも characterwise でしか動かない気がするけど、
まあ linewise とか要らないよね。
linewiseとかいうレベルじゃない…
一応visualmodeのdeleteを実装してみた。
但し、dを二回押す必要アリ+押した後にESC押す必要アリ。もっさい
有識者の方の降臨を待つとしよう。
bindkey -a v vi-vis-mode
zle -N vi-vis-mode
function vi-vis-mode() {
MARK=CURSOR
zle exchange-point-and-mark
bindkey -a 'd' vi-vis-delete
}
zle -N vi-vis-delete
function vi-vis-delete() {
CURSOR=$((CURSOR + 1))
bindkey -M vicmd 'd' kill-region
}
bindkey -a "^[" _escaping
zle -N _escaping
function _escaping() {
bindkey -M vicmd 'd' vi-delete
}
584 :
名無しさん@お腹いっぱい。:2010/05/09(日) 12:39:45
screen みたいに画面をキーボードで移動して必要な範囲をコピーとかって出来る?
screen 入れないと駄目?
うーん。だめじゃない?
表示内容を取るエスケープシーケンス(じゃなくて制御シーケンスか?)
とかあれば、それ使うか、screen と同じことをするか。
あんまり zsh でやることでもないような。
>>583 bindkey してるんを直接実行するんじゃだめなん?
586 :
575:2010/05/10(月) 08:15:53
>>584にヒントを得た。多分完璧。lineとかしらん
cってchangeの略なんだな。初めて知った。
bindkey -a v vi-vis-mode
zle -N vi-vis-mode
function vi-vis-mode() {
MARK=CURSOR
zle exchange-point-and-mark
bindkey -a 'd' vi-vis-delete
bindkey -a 'y' vi-vis-yank
bindkey -a 'c' vi-vis-change
}
zle -N vi-vis-delete
function vi-vis-delete() {
bindkey -M vicmd 'd' vi-delete
bindkey -M vicmd 'y' vi-yank
bindkey -M vicmd 'c' vi-change
CURSOR=$((CURSOR + 1))
zle kill-region
}
587 :
575:2010/05/10(月) 08:17:03
>>586の続き
zle -N vi-vis-yank
function vi-vis-yank() {
bindkey -M vicmd 'd' vi-delete
bindkey -M vicmd 'y' vi-yank
bindkey -M vicmd 'c' vi-change
CURSOR=$((CURSOR + 1))
zle kill-region
zle vi-put-before
}
zle -N vi-vis-change
function vi-vis-change() {
bindkey -M vicmd 'd' vi-delete
bindkey -M vicmd 'y' vi-yank
bindkey -M vicmd 'c' vi-change
CURSOR=$((CURSOR + 1))
zle kill-region
zle vi-insert
}
588 :
575:2010/05/10(月) 08:19:40
連投すまぬ
当たり前だけど、使う時はbindkey -vしてちょ
このスレの人なら、こんなこと言う必要ないな…
589 :
575:2010/05/11(火) 08:22:00
$PREFIX/share/zsh/4.3.*/functions/ にある特定のファイルだけ読み込まないようにする方法ってありますか?
functions/Completion の話?
>>575 いいんじゃないっすか?過疎ってるし。
過疎ってなくてもいいと思うけど。
svn [TAB]で補完が効く状態(=関数 _svn が実行できる)で
unfunction _svn
としたら
svn [TAB]で command not found: _svn が出るようになったから、
unfunctionでいいんじゃないだろうか。
593 :
575:2010/05/18(火) 20:19:19
ls --color=autoでTABの補完候補を表示させると、
hoge.bmpなどのディレクトリが.bmpファイルの色になります。
補完候補ではなく、普通にlsで見たときはディレクトリ色なんですが。
どなたか分かる方いますか?もしzshのせいでなかったらすいません。
手元の環境ではhoge.bmpでもディレクトリとして色付けされる
関係する設定といったら
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
ぐらいしか無いような気がするけど
596 :
594:2010/05/21(金) 12:19:50
>>595 そうですよね。
completionもlsも、どちらもzsh内の機能だから色付けも統一されるはずと思ったけど、そうじゃないってことかな。
ディレクトリ名に.bmpって付ける癖を直すしかないか・・・
う〜ん、ZLS_COLORSとか?
1行目を #!/bin/zsh としたzshスクリプトの、syntaxの色が
bashのときより素っ気ないのでカスタマイズしたいのですが、
どこの辺をいじればいいでしょうか?
/usr/share/vim/ 以下のファイルでしょうか?
普通は .vim/syntax/zsh.vim
俺は .vim/after/syntax/zsh.vim
>>594 同じような状況になった事があった気がするんだけど、
ディストリビューションは何使ってるの?
その ls はBSD系じゃなくてGNU fileutilsのコマンドになってる?
fileutils って何年前の話だよw
2002年9月1日からcoreutilsに統合だそうな。
604 :
594:2010/06/02(水) 11:48:46
>>601 CentOS 5.2、zshのバージョンは4.2.6です。
>>594 print -l $LS_COLORS $ZLS_COLORS
zstyle -L |grep list-colors
をはった方が話が早いのではなかろうか
606 :
594:2010/06/15(火) 18:07:45
>>605 見苦しくて恐縮ですが貼らせて頂きます。(適宜改行してます)
$ echo $LS_COLORS
no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:
mi=01;05;37;41:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:
*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:
*.cpio=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:
*.png=01;35:*.tif=01;35:*.avi=01;33:*.mpg=01;33:*.mpeg=01;33:*.wmv=01;33:*.o=00;38;05;216:
$ echo $ZLS_COLORS
no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:
mi=01;05;37;41:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:
*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:
*.cpio=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:
*.png=01;35:*.tif=01;35:*.avi=01;33:*.mpg=01;33:*.mpeg=01;33:*.wmv=01;33:*.o=00;38;05;216:
(-default-)no=00:(-default-)fi=00:(-default-)di=01;34:(-default-)ln=01;36:(-default-)pi=40;33:
(-default-)so=01;35:(-default-)bd=40;33;01:(-default-)cd=40;33;01:(-default-)or=01;05;37;41:
(-default-)mi=01;05;37;41:(-default-)ex=01;32:(-default-)*.tar=01;31:(-default-)*.tgz=01;31:
(-default-)*.arj=01;31:(-default-)*.taz=01;31:(-default-)*.lzh=01;31:(-default-)*.zip=01;31:
(-default-)*.z=01;31:(-default-)*.Z=01;31:(-default-)*.gz=01;31:(-default-)*.bz2=01;31:
(-default-)*.bz=01;31:(-default-)*.tz=01;31:(-default-)*.rpm=01;31:(-default-)*.cpio=01;31:
(-default-)*.jpg=01;35:(-default-)*.jpeg=01;35:(-default-)*.gif=01;35:(-default-)*.bmp=01;35:
(-default-)*.xbm=01;35:(-default-)*.xpm=01;35:(-default-)*.png=01;35:(-default-)*.tif=01;35:
(-default-)*.avi=01;33:(-default-)*.mpg=01;33:(-default-)*.mpeg=01;33:(-default-)*.wmv=01;33:
(-default-)*.o=00;38;05;216
607 :
594:2010/06/15(火) 18:08:34
続き
$ zstyle -L |grep list-colors
zstyle ':completion:*' list-colors 'no=00' 'fi=00' 'di=01;34' 'ln=01;36' 'pi=40;33' 'so=01;35'
'bd=40;33;01' 'cd=40;33;01' 'or=01;05;37;41' 'mi=01;05;37;41' 'ex=01;32' '*.tar=01;31'
'*.tgz=01;31' '*.arj=01;31' '*.taz=01;31' '*.lzh=01;31' '*.zip=01;31' '*.z=01;31' '*.Z=01;31'
'*.gz=01;31' '*.bz2=01;31' '*.bz=01;31' '*.tz=01;31' '*.rpm=01;31' '*.cpio=01;31' '*.jpg=01;35'
'*.jpeg=01;35' '*.gif=01;35' '*.bmp=01;35' '*.xbm=01;35' '*.xpm=01;35' '*.png=01;35'
'*.tif=01;35' '*.avi=01;33' '*.mpg=01;33' '*.mpeg=01;33' '*.wmv=01;33' '*.o=00;38;05;216'
グローバルエイリアスって
% alias -g hoge="|ls"
% touch hoge
touch: missing file operand
詳しくは `touch --help' を実行して下さい.
zsh: exit 1 touch |
zsh: done ls -F --color=auto
%
ありがちなのをつけるとマズいんだな・・・
大文字1 or 2文字くらいにしとくとよいかも。
グローバルエイリアスにした文字を普通の文字にエスケープするのって不可能?
$ touch 'hoge'
$ touch "hoge"
$ touch ¥hoge
お好きなのをどうぞ
普通にできるのね、失礼w
$ cp /foo /bar まで打ってからCtrl+wを押すと、1ワード消えて
$ cp /foo / になりますが、もう1回押すと
$ cp / になります。これを
$ cp /foo で止める方法はありませんか?
ある。
普通にできるのね、失礼w
616 :
613:2010/06/25(金) 11:43:43
>>614 かなりググりましたが、分かりませんでした。すいません教えてください。
ちなみに WORDCHARS='*?_-.[]~=&;!#$%^(){}<>' にしています。
空白も単語の区切りに設定できれば出来そうな気がしますが・・・
>>606 その設定だと aaaaa.bmp/ が青boldで出るけど。
baaaa.bmp はマゼンダboldで出る。
% echo $ZSH_VERSION
4.3.9
>>616 backward-kill-word-match とか使えばなるんじゃない?
とか適当いってみる。
二段プロンプトなんてログ見づらくなるだけじゃね、と思ってたけど、
PROMPT="┌[${USER}@${HOST}][%~]
└ "
こんな設定を見て目から鱗が落ちた。かなり良い。
プロンプトに全角使うのはちょっと・・・
俺はプロンプトと入力行が別だとすげー落ち着かない
余所の家のトイレぐらい落ち着かない
漢は黙ってPROMPT=$
一行に色々つめ込むと見にくいんで
多段プロンプトにしてPROMPT=$派かな
俺はさらに頭に空行入れて、色付きにしてる
1行目にユーザ、ホスト、PWD、現在時刻表示させて、
2行目に$ だけ
俺もそんな感じ
時刻は2行目のRPROMPTでやってるけど
時間は何気に役に立つんだよね。
そういえば、スクリプトの完了通知が欲しい時ってどうしてる?
終わったらgnomeのnotifier呼ぶとかかな
時刻は、端末の右下にscreenの機能で表示させる
そうか。プロンプトに時刻出しておくと、コマンドの実行時刻が分かるのか。
たしかに便利そうだ。
実行した時刻でよければ extended_history にも載ってるよ。
i-searchでCtrl-rで遡っているときにバックスペースを押すと
逆方向に降りる(つまりCtrl-s)動作になるのですが、
これを普通に検索ワードの後方削除にする方法を教えてください。
2つ下にcdする用に alias -g ....='../..' とやってるけど、なんか一抹の不安が・・・
同じことしてる人いますかね?大丈夫だよね?
昔どっかで rm -rf .* で全て消えたってスレがあったのを思い出した
rm .... したらって話? rm ../.. とそう変わらない気がするけど。
alias ....='cd ../..' じゃだめなの?
まあ俺は c () { cd ../${*:gs@.@../@} } で c . ってしてるけど。
>>630 こんなことは知っているかもしれないが、
backward-delete-char とかのkeyを押すとそうなる。
backward-delete-word とかのkeyを押すと削除される。
>=とかの算術演算子って使えるはずだよね?
[ 1 <= 2 ] && echo "true" ってやったらエラーになるんだけど
(( 1 <= 2 )) && echo true
>>635 どうもです。(( ))って条件文でも使えるんだ
てか、[[ と (( って機能が被ってないですかね?
<は両方とも使えるけど、<=は((だけ、-eなどの条件文は[[だけみたい
[ ] [[ ]] (( )) の使い分けはzshの難関の一つだねぇ
zshall読んでもなかなか覚えられん
compdef書けるようになるとかなり幅が広がるな
つーかラッパーにもってこいだな
>>636 [[ の中の < と、
(( の中の < は意味が違うんだよ。
[[ 12 < 3 ]] && echo TRUE
と、
(( 12 < 3 )) && echo TRUE
を試せばわかる。
640 :
636:2010/08/31(火) 22:15:17
>>639 [[ の<は文字列比較でしたか・・・Σ(゚д゚;;)
やばいミスをしでかす前に気づいてよかった
つまり[[と((はちゃんと使い分けろってことね
zkbdをautoloadしてから実行したら zkbd: must be run as a function or shell script, not sourced ってなった。
直接 zsh -f /usr/local/share/zsh/4.3.10/functions/zkbd ってすれば動くけど。なんだこれ
642 :
641:2010/09/01(水) 20:30:30
zsh 4.3.5から冒頭の部分が変わったのが原因みたいだけど、
そもそもこの部分に何の意味があるのかが分からない。
$ diff zsh-4.3.10/Functions/Misc/zkbd zsh-4.3.5/Functions/Misc/zkbd | head -n 6
4,5c4,5
< local -hi ARGC # local is a no-op outside of a function
< (ARGC=0) 2>/dev/null || { # so ARGC remains read-only for "source"
---
> local -i ARGC
> (ARGC=0) 2>/dev/null || {
それ、コメントの書き方間違ってないか?
diffの引数逆にするだろ普通。
645 :
名無しさん@お腹いっぱい。:2010/09/02(木) 23:02:14
>>644 普通?ってwwww
いいだろ、どうだろうと、カチカチあたまくん
>>645 diff使い慣れないから普通が分からないだけだろ。
古い方を前にするのが普通だよ。
でないと -u の -,+ とあわない。
lnだって ln -s 古くからあるファイル 新しい名前 みたいな順だしなあ
>645 みたいなのは徹底して叩いておかないと、
いずれ凡ミスが原因で他人の足を引っ張った挙げ句逆ギレするタイプ。
650 :
641:2010/09/03(金) 12:08:57
なんか変な流れになってるが俺のせいなのか・・・
>>641は新・旧という意識でdiffしたわけじゃなかったのでこうしただけだが。
別にいいじゃないすかパッチ作るわけじゃないし(駄目?
ググったら極わずかだけど同じこと言ってる人いた。だいぶ前だが
>>649 その通り。
無能な働き者はあらかじめ粛清しておくに限る。
それはlsとかで 古い -> 新しい みたいな表示をするせいだろ。
lnの順序はcpやmvと同じ。
関数のexportってexport -fですよね?以下が駄目なのは何故ですか?
$ zsh --version
zsh 4.3.10 (x86_64-redhat-linux-gnu)
$ a () {
echo "calling a"
}
$ export -f a
a () {
echo "calling a"
}
$ a
calling a
$ zsh
$ a
zsh: command not found: a
>>656 > 関数のexportってexport -fですよね?
は?
658 :
656:2010/09/05(日) 21:03:37
>関数のexportってexport -fですよね?
bashだとそうですが、zshだと違うみたいですね
というか単に出力するだけ?
Windows7上のCygwin on rxvt SJIS環境 zsh 4.3.9で
printf()による出力がある自作CUIプログラムを実行すると
出力の末尾に%記号が反転されて表示されるのですが、原因としては何が考えられるでしょうか?
同様にbashでもプログラムを実行しましたがこちらでは問題ありませんでした
通常のCygwin上で実行したzshだとコマンドラインを空の状態で
Enterキーを押しても反転された%が表示されます
コマンドを実行した際は末尾に表示されます
プログラムは以下でgccとVSのclコマンドでコンパイルして試しました
---------------
#include <stdio.h>
int main(void) {
printf("hoge");
}
---------------
出力
$ gcc -o main.exe main.c
$ ./main.exe
hoge%
---------------
.zshrcの設定
export TERM=vt100
export TERM=xterm
export LANG=ja_JP.SJIS
export LESSCHARSET=japanese-sjis
>>659 printf()の文字列に改行を入れてないのが間違い。
bashではたまたま設定で頭に改行コードが付いたプロンプトを使っていたので
うまくいってるように見えただけ。
zshでは、設定で反転文字の%のプロンプトが設定されていたというだけ。
で、zshの話題とは全然関係ない。
662 :
659:2010/09/17(金) 18:56:35
PROMPT変数にWindowsが$P$Gを入れてたので
prompt elite2 greenなどでプロンプトを設定していましたが
PROMPT=''で表示を変えても%が表示されるのは確認しました
Windows標準のコマンドプロンプト上でzshを起動しても同様です
だから printf()に改行コードを入れろよ。それですべて解決。
zshもCも関係なくUNIXのお約束として特別な事情がないかぎり入出力とかファイルの末尾は改行じゃなきゃいけないの
本来末尾にあるべき改行がねえぞって注意してくれてんの
% echo "hoge"
hoge
% echo -n "hoge"
hoge%
% echo -n "hoge\n"
hoge
666 :
659:2010/09/17(金) 23:00:07
>>664 お約束事でしたか。詳しく書いてくださってありがとうございます。
CUIプログラムに改行を付け加えたら無事に動作しました。
cddってtmuxでも動くのか
historyって宝ですよねー
何度か消えてしまって泣いたことがある
setopt share_historyしてるからかな
みんなHISTSIZE はどのくらいにしてるのかな?
自分は↓
% echo $HISTSIZE
10000
$ echo $HISTSIZE
10000000
俺も HISTSIZE=10000 だった
ついでに、何故か LISTMAX=10000000000 とかしてた
あまり考えずに大きい値にしたから 32ビット超えてるけど動いてるからいいか
>>671 すげえなw
でもある意味プライバシーの塊だな
>>669 ディスクが100%になって端末がおかしくなってログアウトしたら
historyの書き込み失敗したのかhistoryファイル自体があぼーんしたわ
それ以来historyもバックアップとるようになった
>>673 今見たら.zsh_historyが1.2MBもあったw
昔はwgetとかでエロ画像をシコシコ落としてたらしいし、historyは絶対人に見せられないだろうな
俺は今でもエロ画像落とすのにwget使ってるというのに…
まあ滅多にないけどさ
ファイル名が連番のエロ画像はcurlで落とす
>678
敢えて zsh スレでそんなこと書くって釣り宣言?
つかcurlなんてあったんだ
えっ
682 :
名無しさん@お腹いっぱい。:2010/10/30(土) 19:43:55
cygwinのzshでHISTFILE=$HOME/.zsh-history と設定してヒストリーを使おうとすると、
zsh: failed to create hard link as lock file .zsh-history.LOCK: permission denied
とエラーが出るのですが、回避方法はないでしょうか?
よろしくお願いします。
極限のシェルzsh
これを極めし者は時空をも超える
>>682 そんぐらいググってくれ
ntfsにすれば解決
うんこー!
しょんべー!
686 :
名無しさん@お腹いっぱい。:2010/11/12(金) 17:28:50
>>82 僕もなぜか新しいscreen立ち上げたときは反映されなくてsourceしたらようやく反映される設定があったけど
.zshenvに書いたら大丈夫だったよ.
>>686 インタラクティブシェルのときは.zshrcは読まれるはずなんだけどな
.zshrcの該当箇所より前にエラーがあったとか
689 :
[―{}@{}@{}-] 名無しさん@お腹いっぱい。:2010/11/14(日) 03:00:43
>>687 そうだよね.そう思ってたんだけどなぜか読まれない設定もあるみたい
690 :
[―{}@{}@{}-] 名無しさん@お腹いっぱい。:2010/11/14(日) 03:10:44
>>688 エラーがあったらzshはそのエラーの箇所を教えてくれるじゃん
.zshrc を
bindkey "^P" history-beginning-search-backward-end
だけにしても同じなのかね。
sshのログイン先で実行したzshスクリプトをdisownしてからログアウトすると、
何故かプロセス終了まで待たされてしまいます。
$ cat hoge.sh
#!/bin/zsh
sleep 3
$ ./hoge.sh &>/dev/null </dev/null &!
$ exit <---待たされる
スクリプトをzsh以外にしたり直接プロセスを実行したりすると、ちゃんとログアウトできます。
$ cat hoge.sh
#!/bin/sh
sleep 3
$ sleep 3 &>/dev/null </dev/null &!
入出力は全部閉じてるはずなんですが、zshだと何故こうなるんでしょうか?
試したけど待たされなかったよ。なんか他に条件があるのかも。
694 :
692:2010/11/18(木) 21:20:48
>>693 そうですか。
check_jobs が関係するかなと思いましたが、有りと無しともに同じでした。
他の設定が悪いのかと思い、rm -r .z* して試しましたが、やはり同じでした。
↓バージョンです
$ zsh --version
zsh 4.3.10 (x86_64-redhat-linux-gnu)
たまに「.zhistory.84VoUD」みたいなテンポラリ的な履歴が作られるんだけど何でだろう?
ログアウトはちゃんとしてるのに
696 :
名無しさん@お腹いっぱい。:2010/12/02(木) 10:47:13
初心者質問すいません。
シェルをbashからzshに代えたら、ログインし直すたびにhistoryコマンドの履歴が消えてしまっています
.zshrcには
HISTFILE=$HOME/.zsh_history # 履歴をファイルに保存する
HISTSIZE=100000 # メモリ内の履歴の数
SAVEHIST=100000 # 保存される履歴の数
と書いていて、.zsh_history自体をlessで覗くと記録が残っているのですが…
別のファイルで先にHISTFILEが設定されていてそっちから読まれちゃったとか?
698 :
696:2010/12/06(月) 13:00:10
すいません、超勘違いで無事に書き込みされていました!
SuSEとかだと/etc/zsh*で結構設定してるんだよな
HISTFILEを.zshenvに書いてたせいでハマった覚えが
bashの「変数のn文字目からm文字目を取り出す」という機能はzshにはないんですか?
こんな感じのやつです
$ str=hoge
$ echo ${str:1:2} ←先頭は0から
og
$ echo ${str:1} ←2つ目を指定しないと末尾まで
oge
>>700 % str=hoge
% echo $str[2,3] # 先頭は 1 から
og
% echo $str[2,-1] # 末尾は -1 から
oge
% echo $str[2] # n 文字目
o
>>701 ありがとうございます!そんな方法があったとは・・・
配列の場合もできるんですね
$ str=( hoge fuga )
$ echo ${str[2][1,-1]}
fuga
703 :
名無しさん@お腹いっぱい。:2010/12/23(木) 03:08:11
hoge.txt
内から、piyoという文字列を検索して、それ以降の行を取得するのってどうすればいい?
perl使えば可能ではあるけど・・・・これはシェルスクリプトスレで聞くべきか
cat hoge.txt |perl -ne 'if($i==0){if(m:piyo:){$i=1}}else{print}'
スレチだね
grep -A99999999 'piyo' hoge.txt
perl -ne '$f|=/piyo/and print' hoge.txt
9999999とか使うよりも、`wc -l`使ったほうが良いんでないかい?
sedでええやん
sed '1,/piyo/d' hoge.txt ってな感じ?
>>700 12/20 に出たばかりの 4.3.11 のリリースノートを読んであまりのタイムリーさに笑ってしまった
> Parameter expansion has been enhanced to provide the ${NAME:OFFSET} and ${NAME:OFFSET:LENGTH} syntax
> for substrings and subarrays present in several other shells.
>>695 うちもそれ偶にみると大量(でもないか)にできてて、
rm .zsh_history.* とかしてたんだけど、
今みるとないな。前消してからけっこうたった気がするけど。
ネットが瞬断して端末が切れたとかはないの?
zsh-4.3.[10,11]のelite2プロンプトで変な文字が入る
┌┌(hoge@hage)┌(10001/pts/6)┌(11:42pm:01/06/11)┌-
└┌(%:~)┌-
誰か同じ症状の人いない?
prompt_elite2_setupはzsh-4.3.9(正常なプロンプトが出る)に含まれる物と同じみたい
>>703 % sed '1,/piyo/d' hoge.txt
で簡単にできるはず。
zsh睾丸
>>710 prompt は使ってないけど…
期待値は?
prompt_special_chars は変わってない?
┌┌(hoge@hoge)┌(516/pts/4)┌(12:13午前:01/14/11)┌-
└┌(%:~)┌-
あー俺もヒストリ10000ぐらいにしよっかなー
書き忘れたけど
>>714 のプロンプトはうちで試した結果ね。
717 :
710:2011/01/14(金) 20:30:04
>>714 prompt_special_charsが変ってるみたい
4.3.9のelite2プロンプトは下記の通り '┌' が付かない
(hoge@hage)(10015/pts/7)(08:26pm:01/14/11)-
(%:~)- diff -u prompt_special_chars-4.3.*
--- prompt_special_chars-4.3.9 2011-01-14 20:26:13.012731694 +0900
+++ prompt_special_chars-4.3.10 2011-01-14 20:26:13.012731694 +0900
@@ -8,7 +8,7 @@
typeset -gA schars
-if [[ ${LC_ALL:-${LC_CTYPE:-$LANG}} = *UTF-8* ]]; then
+if [[ ${LC_ALL:-${LC_CTYPE:-$LANG}} = *(UTF-8|utf8)* ]]; then
schars[300]=$'\xe2\x94\x94'
schars[304]=$'\xe2\x94\x8c'
schars[332]=$'\xe2\x94\x8c'
@@ -20,6 +20,6 @@
schars[260]=$'\xe2\x96\x91'
else
for code in 300 304 332 333 371 372 262 261 260; do
- eval "char[$code]=\$'\\$code'"
+ eval "schars[$code]=\$'\\$code'"
done
fi
解決 ?
zshマスターは時空を超える
引数リストの長さの制限を自動で超越して欲しいことは時々ある
cvs updateできないの俺だけ?
Fatal error, aborting.
anoncvs_zsh: no such system user
722 :
名無しさん@お腹いっぱい。:2011/01/29(土) 03:48:58
補完で優先順位を察して補完してくれる機能ってありますか?
autoload predict-on
predict-on
の先方予測は試したけどtab打たなくても勝手に出てるっていうのが気持ち悪い。一応Tab打った時だけ反応して欲しい。
?つまり?
ho
_history-complete-{older,newer} って menu select ができないのかな
726 :
名無しさん@お腹いっぱい。:2011/04/15(金) 18:13:04.18
/a/b/c が /A/B/C というディレクトリへの symlink のときに、/a/b/c に移動してから
ls ../[TAB] とすると /A/B 以下のファイルが補完対象になります。
これを /a/b 以下のファイルを対象にしたいのですが、どのようにすればいいのでしょうか?
ちなみに CHASE_DOTS と CHASE_LINKS はオフにしています。
727 :
名無しさん@お腹いっぱい。:2011/04/15(金) 22:59:29.50
>>726 plus
mkdir /a and /A
mkdir /b and /B
mkdir /c and /C ON files of directory.
>>726 そんな補完したところでlsは失敗するだけなので意味がないのでは?
そもそも >727 がなにが言いたいのかわからん
tempfile==(foo_process) と一時ファイルの名前を取得しておいて、後で $tempfile を
処理するような zsh スクリプトを書くことがあるのだけど、4.3.6 から 4.3.11 に
バージョンアップしたら動かなくなった。
後で処理する段階では削除済みになっている。セキュリテイの問題か何かで、一時ファイルの
寿命を変更したのだろうか。お手軽に一時ファイルを扱えて便利だったんだが。
元からそう動くと思っていたが、
前は作りっぱなしだったのか。
>>731 それで思い出した。スクリプト終了時には多くの場合自動的に消えるのだが、
たまに /tmp/zsh* が残ったままになるので、trap で消すようにしてあったんだった。
やはりバグだったのかもしれない。
内蔵コマンドのniceが欲しい
なぜ?
そっちの方がniceだから
そういうコマンドはないスね。
ナイスな切り返し!
ナイスな椅子
コッシーか
電動オナホールをzshで制御
俺は童貞だ!
742 :
名無しさん@お腹いっぱい。:2011/05/26(木) 00:23:11.80
すみません。zmvの使い方を教えてください
1.pdf 2.pdf ... 9999.pdf を
↓
0001.pdf 0002.pdf ... 9999.pdf と、
先頭に0を含むファイル名に変えるにはどうすればできますか?
zmv '(*).pdf' '${(l:4::0:)1}.pdf' でいいのかな?
正直こういうzshの変な機能を使うのはどうかと思う
744 :
742:2011/05/26(木) 01:40:01.29
>>743 ありがとうございます。
>正直こういうzshの変な機能を使うのはどうかと思う
痒いところにピンポイントで、とても助かりました。
変な機能はいいんだけど、次に必要になる時までに使い方を忘れてしまうのが難点。
>>745 HISTSIZEもっとでかくしようぜ?
% echo $SAVEHIST
0
% echo $HISTSIZE
100000
保存したいなー、と思ったときだけ
% SAVEHIST=1 fc -W $HISTFILE
また変わったことを‥ 似たことを考えたことはあるけど。
さて、ひとまず 10倍にするか。
4.3.12
zshで時空を超えた奴はいないか?
色即是空、空即是色
シェル製作者は冥界へ行ったまま帰ってこない
zsh 4.3.12 で setopt ksh_arrays にしてると _main_complete でエラーが出て
補完が効かなくなるのはおれだけ?
そのファイルで setopt localoptions no_ksh_arrays すると大丈夫っぽいけど、
正しい方法か分からない。
753 :
名無しさん@お腹いっぱい。:2011/07/13(水) 21:45:12.61
>>752 まだ 4.3.11 だしエラーの内容知らんけどまあ正しいんじゃない?
>>753 ↑キーには何 bind してんの?
755 :
753:2011/07/19(火) 03:17:01.85
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "\e[A" history-beginning-search-backward-end
bindkey "\e[B" history-beginning-search-forward-end
bindkey "\\ep" history-beginning-search-backward-end
bindkey "\\en" history-beginning-search-forward-end
です
よく起きるなら history-search-end の先頭で setopt xtrace してみれば何かわかるかもね
前から思ってたけど **/* は ** でいい気がする。表記法として。
/* が無駄に思える。
要らなくね?と思いながら / を打っている。
え?
そういやMSX-DOSにはディレクトリがなかったっけ
かつてファイルしかない世界がそこにはあった
>>757はそんな時代に生きているんだ
いや **/* だけ特別扱いしたらっていう提案でしょ。
単に ** の時は **/* に、
**/*.c みたいなやつは今までどおりでと。
特別扱いというより、**のみの意味を考えた時に
**/*と何ら変わりがなくね?って話かと
/** ここはコメントです **/
>>760 それなら、グローバルエイリアスで '**'='**/*' すればいいだけじゃね?
764 :
757:2011/08/12(金) 03:16:42.94
>>761 が近い、というよりそのものかな。
>>763 なので、悪くない案だけど理想は dir/** -> dir/**/* になることかな。
alias -g '**=**/*' じゃ dir/ 付きは変わらなかった。
色々やってまで実現したい訳じゃないので。個人的にはこういう仕様の方がよかったなー、というだけで。
まあ熟慮した訳じゃないので破綻してるかも知れないけど。
つか man zshexpn の Recursive Globbing 見ると
As a shorthand, `**/' is equivalent to `(*/)#'
とあり directory についての記法になってるけど、
感覚的には `**' が `(*/)#*' なんだよなー。
まあこれだと **/foo が foo に match しないけど。
無理に書くと ** を ./(/*)# として match したものから . を除いて正規化したものが期待結果かな。
zsh の glob として正しくないけど。
なんかもう破綻してる気がする。
いや、というか訳わからんこと書いたけど結局こうなってほしいってことか。
** -> (*/)#*
**/ -> (*/)#
更にいうとこうか。最初に戻ってるよ。
** -> **/*
どうやら混乱していたようだ。
#!/bin/zsh
zshの本っていうの買ってきた。
まだ読んでない。
767 :
名無しさん@お腹いっぱい。:2011/09/20(火) 00:02:11.12
リンク先のないシンボリックリンクファイルをまとめるglobってあります?
*(-@)かな?
ウナー *(-@-)*
>770
+1
最近、zshに入門した者なんですが Mac10.6の環境で
PROMPT=$'%(!.#.%%)' ;
を実行するとスーパーユーザだとプロンプトの接頭辞が(そう呼んで正しいのか否かもわかりませんけど)
#
になり、その他だと
%
になるこの原理がどうしてなのかわからず謎めいているのですが
おわかりになる諸先生方いらっしゃいましたらご教授ねがえませんでしょうか
zshmisc(1)に書いてある。
キターーーーー!!
ハッカーさんありがとうww
zshってbashのスクリプト使える?
tukaeru
777 :
名無しさん@お腹いっぱい。:2011/10/03(月) 09:18:40.25
ある程度は。
778 :
名無しさん@お腹いっぱい。:2011/10/03(月) 09:27:19.51
スーパーユーザだとプロンプト山桐慎也
zshで function { local a=("hoge"); } とやろうとすると怒られる。
bashでは出来るのに。そういう仕様なの?
local a
a=("hoge")
ってやるしかないの?
780 :
名無しさん@お腹いっぱい。:2011/10/10(月) 20:33:33.77
man zshbuiltins の typeset (localの本体) の説明より。
For each name=value assignment, the parameter name is set to value.
Note that arrays currently cannot be assigned in typeset expressions,
only scalars and integers.
ということで現行の制限事項という感じじゃないだろうか。
>>780 ありがとう。そういう事なら仕方ないね。
エイリアスに補完を効かせるにはどうしたらいいですか?
たとえば、alias adx='chmod +x' とした場合、このadxにchmodと同様の補完を
効かせたいんですが、やはり _adx みたいな補完ファイルを自分で用意しろってことですか?
俺の環境では何もせんでも chmod +x [TAB] と同じ補完になるが……
多分 compdef adx=chmod とかいう話なんでは
ctrl E で行末に移動したあと、単語単位でカーソル位置を戻したいんだけど、どうやんの?
bindkey -e なら Alt-B?
787 :
名無しさん@お腹いっぱい。:2011/10/15(土) 21:52:03.41
なお、何をもって単語と見なすかは WORDCHARS 次第。
これってreadlineの機能?
readline使ってないよ
独自実装
790 :
名無しさん@お腹いっぱい。:2011/10/20(木) 23:52:27.78
キーバインドの一覧を知りたいのですがどうやればいいですか?
bindkeyでした
792 :
名無しさん@お腹いっぱい。:2011/11/05(土) 22:41:39.08
zshを使ってみようと思うのですが、勉強するために最適な書籍などはありますか?
man zshall
迷宮の入り口晒すな
TABキーの補完をbashのようにファイル・ディレクトリのみにするには
どう設定すればよいでしょうか?
低スペックのノートPC上でcygwinのzsh 4.3.11 を使っていますが、
TABキーを押すと5〜10秒近く待たされることもあります。
bashだと一瞬なので、zshでも補完の検索をカレントのファイルのみにしたいです。
compinit しなければいいんじゃないかな。
てか bash でもいいような気がしたけど、きっと気のせいだな。
798 :
796:2011/11/14(月) 22:49:23.21
おまじないのようにcompinitしてましたが、
プログラマブル補完機能というのが効いていたのですね。
これを外して何か副作用あるかなと思いましたが、特に問題なさそうです。
ありがとうございました。
ヒストリの複数行コマンド編集やTABキーで補完候補の選択ができるとこが
bashになくて気に入ってる機能です。
あーなんか履歴検索とかって space を and にした絞り込みにしたら使いやすいかもなあ。
とか最近 unite.vim を使って今 history-incremental-search-backward 呼んだら思った。
800 :
名無しさん@お腹いっぱい。:2011/11/18(金) 22:53:12.54
history-incremental-pattern-search-backward
で我慢してくれ。
vimshel使うのと、screenでターミナル分割して使うのと何がちがうの?
screenだと、デタッチアタッチが出来るのがかなり大きいと思う
bindkey "^p" history-beginning-search-backward-end
bindkey "^n" history-beginning-search-forward-end
bindkey "\\ep" history-beginning-search-backward-end
bindkey "\\en" history-beginning-search-forward-end
これって↓↑キーと同じですか?
なら自分はいらないんですが
805 :
名無しさん@お腹いっぱい。:2011/11/27(日) 20:21:18.83
うちでは Ctrl-P/Nには up/down-line-or-history が割り当てられているな。
case ${UID} in
37 0)
38 PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') %B%{${fg[red]}%}% /#%{${reset_color}%}%b "
39 PROMPT2="%B%{${fg[red]}%}%_#%{${reset_color}%}%b "
40 SPROMPT="%B%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%}%b "
41 ;;
42 *)
43 PROMPT="%{${fg[red]}%}%/%%%{${reset_color}%} "
44 PROMPT2="%{${fg[red]}%}%_%%%{${reset_color}%} "
45 SPROMPT="%{${fg[red]}%}%r is correct? [n,y,a,e]:%{${reset_color}%} "
46 [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
47 PROMPT="%{${fg[cyan]}%}$(echo ${HOST%%.*} | tr '[a-z]' '[A-Z]') ${PROMPT}"
48 ;;
49 esac
これの tr の定義がわかりません?
どっかにありますか?
${HOST%%.*}
これっの%%.*って意味的には
%% %. %*
みたいなことでしょうか?
809 :
名無しさん@お腹いっぱい。:2011/11/28(月) 20:37:32.06
>>808 HOST の後の部分で
.* というシェルのパターンに合致する部分をできるだけたくさん捨てる。
HOST=www.google.co.jp なら .google.co.jp を捨てた www になる。
% が一つなら最小限捨てる。(.jpを捨てたwww.google.co)
4.3.14
812 :
アンネ:2011/12/09(金) 23:59:43.22
やぁ(笑)
zshで↓のようなプロンプトにしたいんだけどどうすればいい?めんどくさいから丸投げする。
PS1="\[\033[1;32m\][\u@\h \w]\[\033[0m\]\n\[\033[1;37m\]>> \[\033[0m\]"
教えてください。
autoload -U colors && colors
PS1="%{$fg_bold[green]%}[%n@%M %~]%{$reset_color%}
%{$fg_bold[white]%}>> %{$reset_color%}"
fwd-searchして今の場所でOKのときにfwd-searchを抜けるのってどうやってますか?
Ctrl-F,Bで移動するとfwd-search解除されるのでそうやってますが、もっと良い方法ないかなと思って・・・
Enterしたらコマンド実行しちゃうし
Type RET to exit, leaving point at location found.
819 :
816:2011/12/28(水) 01:19:08.43
>>817 C-eって行末移動ですよね?行末じゃなくてその場に留まりたいんですが
>>818 RETすると実行しちゃうんですけど・・・設定の違い?
すまんEmacsの話だと思ってた
>>816 ESC ESC ESC でカーソルがその場に残るよ。
822 :
816:2011/12/29(木) 11:16:03.68
>>821 ほんとですね。でも3連打はまんどいな・・・
isearch 中の話なら accept-search を適当なキーに割り当てておくとか
bindkey -M isearch '^[g' accept-search
>>821 ESC ESC で足りるけど… 最新だと違うんかな
search 専用の keymap がないからなあ… と思っていたら isearch なんて追加されてたのか
久しく進化を追ってない内に
>>822 Alt で ESC が入れば A-C-[ で 1 key だよ。これは 3 key というのか?同時押し key 数多くて勧めないけど。
ちなみに ESC ESC は undefined-key だから副作用がないだけで、
他の unbound key でも同じだよ。俺の環境だと "^[@" とか。
^[^|
@
sudo command
てすると、commandのaliasが展開されない
どすればsudoでもaliasコマンド使える?
828 :
名無しさん@お腹いっぱい。:2012/01/14(土) 12:10:30.76
global aliasでどうか?
alias sudo='sudo '
がよくある解
>>829 それ見つけたけどなんかうまくいかない
$@とか含むエイリアスはダメなのかな?
>>827 そのエイリアスってroot権限なくても展開できるのかな。
>>829 なにそのクールなトリック全然解らない、と思ったらそういう仕様があんのね。
見たのは↓の話で bash だけど。man zshall に該当記述が見付からない…
ttp://d.hatena.ne.jp/Yudoufu/20110326/1301129885 この人の言っている偶然の抑止力って何のことだ?
>>830 alias 内での $@ は多分期待動作と違うと思うよ。普通に使えない。
あーでもそれは alias sudo 関係ないから違う話なのかな?
もしかして alias ではなく function が混ざってるのかも。
↓ でも同じことができると思うけど、これもダメ?
function が原因なら同じ話だけど。
# 1回まで展開する
sudo () { command sudo ${aliases[$1]:-$1} $*[2,$] }
>>831 root 関係ないような…
なんか試してたら
alias echo='echo[TAB]' # ([TAB] は "^[^I" is self-insert-unmeta で入れた tab)
の後に echo a とか実行すると履歴に echo[TAB]a が残ることを発見してしまった。
どーでもいいけどなんだコレ。
そしてこれもどーでもいいが history では [TAB] も \t (2文字) も \t と表示されて区別できない。
ちなみに展開1回までとかアホかという場合はこれで。
# 展開回数制限なし
sudo () {
local cmdline arg
local -A hist
cmdline=($1)
while (( ! ${+hist[$cmdline[1]]} && ${+aliases[$cmdline[1]]} ))
do
hist[$cmdline[1]]=
cmdline=($aliases[$cmdline[1]])
arg="$cmdline[2,$] $arg"
done
command sudo $cmdline[1] $arg $*[2,$]
}
RC_EXTENDED_PARAM って代入のときは効かないんですかね?
% num=(1 2 3)
% echo A${^num}B
A1B A2B A3B
% str=A${^num}B
% echo $str
A1 2 3B
こうすれば目的を果せますが…
% str=$(echo A${^num}B)
% echo $str
A1B A2B A3B
ちゃんと効くけど?
str=(A${num}B)
おっと ^ を入れ忘れた。 ${^num}ね。
zshでcat file_not_exist >/dev/null 2>&1 | w3mとやると、
catのエラーメッセージがw3mに渡されることに気付きました。
shのリダイレクションの解釈だとパイプには何も渡されないはずですけど、zshはどうしてこういう動作にしてるんですか?
何か理由があるんでしょうか。
>>839 じゃなくて、どうしてmultios状態をデフォにしてるのか、何か理由があるのかを聞いてるんだが。
>>840 command > file1 > file2
とやると両方のファイルに出力されるのがzshというかmultiosの特色だね
開発者の意図は知らんが、有効にすることでデメリットがあるわけでもないから有効になってるんじゃないかな
そりゃ作者が便利だと思って取り入れた機能はデフォにするだろ
であれば、
command > /dev/null | command
の場合は別にするべき。
大きなデメリットだな。
teeを使いたくなかった奴が作ったのにそりゃないな
>>842 作者が便利だと思っても互換性に問題がある機能はデフォではOFFにするのが鉄則。
はて、非互換ってどのシェルに対して。shとかだとほとんどデフォで使える機能なくなる気が
>>846 他のシェルに対する互換性じゃなくて、multios導入前のzsh自身に対する互換性ね。
そんなこといったら zsh v0.0.1 とかから何も進歩できないじゃん
>>845 >作者が便利だと思っても互換性に問題がある機能はデフォではOFFにするのが鉄則。
こういう鉄則始めてみたんだが、どこで言われてる奴?
まあ互換性に関しては原則としては理解できる主張だが
ことインタラクティブ関係の便利機能はどこかでデフォルト on にする
タイミングってものはあってもいいわけだ
いやなら古いの使ってろってのも間違ってないし
互換性を重視するか互換性捨てて新機能を重視するかは
単にポリシーの問題、決めの話でしょ。
ぜんぜん鉄則ではないよ。
まぁすぐ書いたからいいじゃん。
>>854 そうだね。連投に次ぐ連投で予想以上の嫌悪感を撒き散らしていたよね。
>>858 そう、
>>853の意図としては
>>840に対してのみの指摘。
元々のウダウダ書いている
>>838は multios を知らない人間の質問の仕方。
だからその回答は「zsh には multios って機能があるから」で十分で、
あとはググりでもすればいくらでも満足してもらえると思ったんだがな。
838です。私の書き込みは838だけで、840以降のレスは別の方です。
zshが複数ファイルへのリダイレクションができるのは知ってましたが、
その機能がcommand >/dev/null 2>&1 | commandの動作に影響することまで頭が回りませんでした。
あとは自分でzshmisc読んで勉強しようと思います。
回答して下さった方、どうもありがとうございました。
2chとは思えないまともすぎる書き込み…
なりすまし多いよなぁ。
質問する際はトリップ推奨ってことにした方がいいね・・・。
初めてトリップつけるけど、これでいいの(´・ω・`)?
できたっぽ(´・ω・`)ノみんなよろしくな
なんの必要があって…?
>>844 ファイルと標準出力の両方にリダイレクトしたい場合もmultiosで出来るんですか?
これはteeじゃないと駄目かと思ってました
・マシン毎にzsh_historyを使い分けたい
・異なるマシンのzsh_historyを参照したい
この両方を同時に実現する方法はないかな。
今は複数マシンのzsh_historyをsamba等で共用してるけど、
マシン単位で区別ができないのがツライ。
869 :
名無しさん@お腹いっぱい。:2012/02/04(土) 17:07:58.08
HISTFILEにホスト名を含むようにすればいいんじゃないの?
870 :
名無しさん@お腹いっぱい。:2012/02/04(土) 17:10:24.09
いや、エディタでファイルを読めればいいという意味なのじゃなくて、
履歴検索時全ホスト分から探して欲しいという意味なのか。
871 :
名無しさん@お腹いっぱい。:2012/02/04(土) 17:16:18.66
zshmiscのzshaddhistory関数の使用例に、通常の履歴に加えて
カレントディレクトリにも履歴を書き出す例があった。
872 :
名無しさん@お腹いっぱい。:2012/02/04(土) 19:59:07.40
OpenSUSEなんだけどPATHを.zshenvに書くと
/etc/zprofileで参照される/etc/profileで上書きされる.
SUSEで使っている人はPATHをどこに書いてますか?
つーか/etcのファイルを読まないようにする方法ってあったっけ?
大抵のzshユーザは/etcのファイルよりも細かく設定してるし、邪魔なだけだよね
874 :
872:2012/02/04(土) 21:40:29.86
>>873 PATHも追加ならいいんだけど最初から設定するみたいで消されちゃう
スクリプトを使うから必要なんだけど,.zshrcに二重で書くのも変だし…
875 :
名無しさん@お腹いっぱい。:2012/02/05(日) 01:26:19.14
最初に /etc/zshenv を読み込むのは不可避。
ユーザーが介入できるのはその次の ~/.zshenv か。
setopt no_global_rcs だっけ?
>>867 そりゃできますよ。843が文句言ってるけどw
>>876 複数ファイルへのリダイレクト時にはmultiosで動作して、
ファイルとパイプの組合せの場合はmultiosにならないような設定とかオプションとかないの?
879 :
872:2012/02/05(日) 15:12:20.38
>>876 もしかして、こんなふうに標準出力のデバイスファイルを指定するんですか?
echo hoge >file >/dev/stdout
しかし標準出力には何も出ない・・・
>>880 を試そうとして、
echo hoge >file1 >file2 >/dev/stdout
のようにファイル2つと/dev/stdoutを指定したら、
zshがCPU使用率100%になって固まった。
echo hoge >file1 > /dev/stdout ←だと固まらない。
echo hoge >file1 >file2 >/dev/stdout ←で固まる。
再現率100%。バグか?w
882 :
880:2012/02/05(日) 19:38:57.92
stdoutじゃなくてstderrだと出る・・・
echoって標準エラー出力に出す仕様だっけ??
>>881 自分もそうなりました。zshは4.3.10です。
25016 read(15, "hoge\n", 4092) = 5
25016 write(13, "hoge\n", 5) = 5
25016 write(14, "hoge\n", 5) = 5
25016 write(16, "hoge\n", 5) = 5
25016 read(15, "hoge\n", 4092) = 5
25016 write(13, "hoge\n", 5) = 5
25016 write(14, "hoge\n", 5) = 5
25016 write(16, "hoge\n", 5) = 5
止めかたがわからずPCが焼け石になるところでした
うーん、こんな危険なmultios状態をデフォにするべきじゃないねw
ん?
echo hoge >file1 >file2 >/dev/stdin
じゃないのか
>>885 stdinじゃないよ。
echo hoge >file1 >file2 >/dev/stdout
なのに、ストリームがループして無限にhoge hoge .... データが吐かれる。
そうじゃない。885は正しく動作するコマンドライン
誤記の指摘ではなくて、やりたいことはstdinじゃないのか?と
じつはぼくはまだzsh使ってなくて、bashなんだけど(´・ω・`)
みんなはなんでzshを使い始めたの?
bashから乗り換えたくなるような機能って何があるの?
ないよ
>>889 だな。
今のbashはzshの持っている機能を100%持ってる。
bashにしかない機能も山ほどある。
>>887 ほんとだ・・・なんでstdinなんですかね?逆のイメージ持ってた
スレチですが教えてください
>>892 そうだよお。
bashがなんでLinuxでスタンダードシェルになってるかこれでわかるよね?
おじさんを信じてzshなんて使うのやめようねぇ。
>>893 LinuxじゃなくてMacを使ってるんだけど(´・ω・`)
じゃあ、おじさんはどうしてzshを使っているの?
>>890 じゃ具体例挙げてくれ
最近のbashはインクリメンタルサーチなど対応してるというのは聞いたけど
>>881 >>886 が指摘してる件は重大なバグだろ?
echo hoge >file1 >file2 >/dev/stdout
って実行しただけで固まって無限サイズファイルができるって、
危なくて使えない。
> 今のbashはzshの持っている機能を100%持ってる。
> 今のbashはzshの持っている機能を100%持ってる。
> 今のbashはzshの持っている機能を100%持ってる。
> 今のbashはzshの持っている機能を100%持ってる。
出来るかもしれんけど、より簡単に設定出来るのはzshなんじゃね?
bashでzleとかいじれる?
>>898 100% 知っているとは思えないってことじゃないかな。
矛先が非建設的な方向に向いております
bash にしかない機能って何?いいのある?
よさそうなら使いたい。
bashがzshの機能を入れるのはzshユーザにとっても喜ばしいことじゃない?
>>890 bash にも既にあるってフレーズはよくきくからそうなんだろうなー、って思ったけど
ちなみに bash で multios ってどうやんの?
やり方がわからなかった。
けんかはやめて(´・ω・`)
>>885 それなら
echo hoge >file1 >file2 >/dev/tty
じゃないか?これだと抽象度に欠けるが。
echo hoge >file1 >file2 |cat
が解りやすいけど cat とか書きたくなければ
echo hoge 3>&1 >file1 >file2 1>&3
かな。試してみたら
echo hoge 1>&1 >file1 >file2
もできるね。しかし
echo hoge 3>&1 1>&1 1>&3 1>&1
で hoge が 4つでるのに対して
echo hoge 1>&1 1>&1
で hoge が 2つじゃなく1つでるのは何故なんだろう。
>>896 zsh にはバグが多い印象があるけどそれは仕様だろう。
自分が何をしようとしてるか理解してるか確認するなんて
気の利いたことは zsh はしないからな。
それがバグだってんならそうかもしれないが、まあ余計だろう。
あーでも rm * はするんだっけ?
911 :
名無しさん@お腹いっぱい。:2012/02/28(火) 22:50:26.88
2012-02-23 : Release 4.3.17
Complete fixes from last release.
2行目ってどう訳すん?
2行目は動詞がない名詞区。fixesは3単現の s じゃなくて、fixの複数形。
あとはわかるな。
主語のIかWeが省略されてるんじゃないかな
completeは動詞でfixesが名詞
訳すと「この前のリリースからの(バグ等の)修正を完了したよ」
主語がないと訳せない人がいるのか
ニュアンスでわかんないものかねぇ
いや、completeは形容詞として訳して欲しい。全体で箇条書風の名詞句。
>>914 completeを動詞と考えると、現在形なのはおかしいね。
なので
>>916 説に1票。
>>917 ああ言われてみれば確かにおかしい。というわけでリリースノート見てきた
http://zsh.sourceforge.net/releases.html > Changes between versions 4.3.16 and 4.3.17
> Complete fixes from last release.
「4.3.16と4.3.17の間の変更点は何か」なので
自分もComplete fixesでひとつの名詞句と考える
>>914説に改説します
「この前のリリースからの(バグ等の)完全な修正」
919 :
名無しさん@お腹いっぱい。:2012/03/03(土) 10:50:18.07
4.3.16で直し方が半端だったバグがあって、それを完全に修正したってこと?
はい
921 :
名無しさん@お腹いっぱい。:2012/03/03(土) 16:35:59.06
zshの設定って面倒くさいな
zshの本読んでたら頭痛くなってきた・・・
うまく構成して見やすいドキュメント整えた配布版ってないの
デフォルトでも十分に便利だと思うが。。。
oh-my-zshでも使ったら。
更に面倒だよ...
大丈夫か。辛いなら fish とか使ったら。今どうなってんのか知らんけど。
>>915 いやー主語はどうでもいいんだけどニュアンスでしか読めなかったから
あんまり考えずに聞いてみた。
ニュアンスで読んだら見当違いの内容も浮かんだんでね。
>>919 どっちかというと 4.3.16 に対して完全にバグ修正しかしてないよってことじゃないかな。
fish初めて知ったわw
悪くなさそうだが最終更新が2009年・・・
927 :
名無しさん@お腹いっぱい。:2012/03/09(金) 14:06:16.31
fishと名のつくシェルは fish.x しか知らんかった。
sudo -s でrootユーザになると、TAB押して補完するときに↓のようになるけど何でじゃろ?
補完自体はできてるんだけど
_path_files:17: command not found: _have_glob_qual
_path_files:201: command not found: _have_glob_qual
_path_files:202: command not found: _have_glob_qual
_path_files:695: command not found: _list_files
どうじゃろ?
root の設定が悪いとか
931 :
928:2012/03/18(日) 00:45:06.34
「sudo -u 自分 -s」 で自分のアカウントになっても同じっす。
CentOS5.7でそうなる一方、CentOS6.2では出ない。
でも、どちらもzsh4.3.17をソースからビルドしてるし、.zsh*自体も同じなんだよなぁ。
ググって最初に出てきたものくらいは当然試してるだろうけど、
「試したけど駄目だった」くらいは書け
> Remove ~/.zcompdump and restart zsh.
933 :
928:2012/03/18(日) 02:16:08.50
>>932 実は.zcompdump消すのは試してたんだけど、問題がでたりでなかったりで
よく分からずじまいだった。・・・で、今一度調べてやっと分かりました。
.zprofileにて
if [[ $SHELL == /bin/zsh ]] ;then
SHELL=$HOME/bin/zsh
exec $SHELL
fi
とすることでログインシェルの/bin/zshを最新のzshに切り替えてたんだけど、
インタラクティブシェルは.zprofileを読み込まないのを忘れてました。
新しいzshが作った.zcompdumpを古いzshで読んだのでこうなったと。
実にくだらないミスで・・・orz。皆さんお騒がせしました。
以下のようなディレクトリ構成のところで、hoge下にdir1/dir2へのシンボリックリンクがあるとします。
$tree hoge
hoge
|-- dir1
| |-- dir2
| |-- dir3
| `-- dir4
`-- dir2 -> dir1/dir2/
dir2にcdし、「cd ../」まで打ってからTAB押すと、dir2〜dir4が候補表示され、
実際に「cd ..」するとhoge下にcdします。
ここで、補完をdir2〜dir4じゃなくて、hoge下のdir1〜dir2となるような方法はないですか?
ちなみにbashだとその仕様みたいです。
935 :
名無しさん@お腹いっぱい。:2012/03/21(水) 23:38:28.15
setopt chaselinks ?
936 :
934:2012/03/23(金) 00:19:46.27
>>935 それだと「cd dir2」でdir1/dir2に移動するだけなんで、やりたいことと違います。
こんな方向でどか
_directorys_symlink () { local pre="${PREFIX%/*}/"; local -a tmp; tmp=($(cd "$pre" && echo *)); compadd -f -p "$pre" -W "$(cd "$pre" && pwd -P)/" "$@" -a tmp }
_cd_symlink () { local expl; _wanted directorys-symlink expl 'directory when retain symbolic links' _directorys_symlink }
_cd_wrapped () { local pre="./${PREFIX%/*}" ret=1; [[ "$(cd "$pre" 2>/dev/null && pwd -P)" != "$(cd -P "$pre" 2>/dev/null && pwd)" ]] && _cd_symlink && ret=0; _cd && ret=0; return ret }
compdef _cd_wrapped cd
色々足らんけど
938 :
934:2012/03/24(土) 18:36:46.18
>>937 非常に申し訳ないですけど、さすがにそれは使う気がしないですw
でも、ありがとうございます。
それは残念。でもないか。
よく知らないけど、多分 cd の補完処理を直さないと無理じゃないかな。
ワーキングディレクトリのシンボリックリンクを残して path を辿るのは
cd の特殊な仕様みたいだけど、
cd の補完がそれを考慮せず通常の path 補完をしているようだ。
なんで _cd を直すか cd の compdef を対応版に変える必要がある
…ように見える。
関係ないけど compadd の -P と -p の違いがよくわからない。
なんか前調べた気もするけどなんだったかな…
今日rsyncを使ってて妙なことに遭遇したのですが、zshスクリプトにおいて
ディレクトリのコピーを以下のようにしていたところ、たまにrsyncのコピーが
正しくなされないことが分かりました。
while :;do
rsync -av dir.org/ dir
〜dir内のファイルを書き換える処理〜
done
rsyncの直前で dir.org と dir の中身を見ると確かに更新されているのですが、
rsyncはそれらのコピーをスルーしていました。今のところ以下が分かっています。
@上記現象は再現性が一定でない(正常コピーできるときもある)
Arsyncの直前でsleep 1を入れると何故か正常にコピー
Bbashだと無問題
zshの問題とも限らない気がしますが、このスレの方々は経験豊富だと思うのでお尋ねします。
何かアドバイスあればお願いします。
, -'"´  ̄`丶、_
,.∩ `ヽ
〃∪'´ ̄`二二人\ ヽ
| ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ',
|ハ ,ニ、 ,. - 、 | | | l |
| ハ ィハ ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、
| | | じ' |トJ〉 /)} l | 違う板にコピペすると鬼のような怖い顔
| ハ 、'_,  ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。
l l /\ .. イV\川 |
,' l l ,イ `l ̄´ / /ヽl l
l | l ハ `メ、 〃 ヽヽ、__ノ
dir内の〜 がなにかによるんじゃないの。
つーか dir が dest なんだよね。それだとコピーしない気がするけど、するんだね。
rsync はよーしらんから勘違いしてるかな。
944 :
941:2012/03/31(土) 21:41:34.17
すいません、自己解決しました。以下、zshとは関係ない話で恐縮ですがいちおう報告します。
rsyncはタイムスタンプを見てコピーするか否か判断しますが、
>>941のファイル書き換え処理が
一瞬で終わるためにタイムスタンプが変化しないのが原因でした。
実際、ls -l --full-timeで見ると↓のように秒以降が全部0になっています。
-rw-r--r-- 1 hoge users 326 2012-03-31 21:24:24.000000000 +0900 file
ちなにみ環境はCentOS6.2です。おそらく、秒以降のタイムスタンプも記録するシステムならば
今回の問題は起こらないはずだと思います。あと、
>>941で言った@とAも勘違いでした。
この現象がランダムに出たために、誤って解釈してしまいました。失礼いたしました。
ls とかのソートって unsetopt numeric_glob_sort の場合は以下の順ですよね?
特殊文字( _ を除く)
数字
大文字
_
小文字
実は、あるホストへ自宅からログインすると上記の通りなのが、
職場からログインすると「 _ 」の存在が無視されたようにソートされます。
たとえば、A _b C というファイルがA C _b の順でソートされます。
こんなことってあるんですかね?全く同じホストにログインしてるのだから、
もう残る違いはログイン元の端末環境ぐらいしか・・・
>>945 > 大文字
> _
> 小文字
> たとえば、A _b C というファイルがA C _b の順でソートされます。
大文字 大文字 _ の順になってる ってのは正常な動作じゃないのか?
>>946 すいません、間違えました。以下の意味に訂正します。
「辞書順で A C _B となるのが、A _B C となってしまう」
LC_COLLATEの値は?
>>948 自宅からの接続ですが、空でした。
こうなったら、自宅からと職場からとで環境変数が同じかどうか調べるしかないですね。
ところで「 _ 」って特殊文字には入らないんですかね?
950 :
名無しさん@お腹いっぱい。:2012/04/28(土) 17:38:50.08
LC_COLLATEをみるなら
それより優先されるLC_ALLと
最後の砦のLANGも見ないと…
$ LC_COLLATE=en_US.UTF-8 ls
a _a b _b
$ LC_COLLATE=C ls
_a _b a b
てか、「lsとかのソート」の時点でzshもsetoptも関係なくね?
954 :
名無しさん@お腹いっぱい。:2012/04/28(土) 22:08:06.56
そうは思ったがきっとglobの展開のことだと汲み取ってあげたい。
955 :
名無しさん@お腹いっぱい。:2012/04/28(土) 22:10:50.41
lsは表示するファイルを自力でソートしているのでlsの問題。
(directory entryの出現順のままソートせずに表示するオプションがある)
glob展開の結果の順序はシェルの問題。
$ LC_COLLATE=en_US.UTF-8 zsh -c 'echo *'
a _a b _b
$ LC_COLLATE=C zsh -c 'echo *'
_a _b a b
957 :
名無しさん@お腹いっぱい。:2012/04/30(月) 00:17:44.41
最近はzshあんま更新されてないし、bashのがいいってまじ?
958 :
名無しさん@お腹いっぱい。:2012/04/30(月) 07:45:44.90
そろそろ5を出そうかというタイミングで何言ってるんだ?
>>959 え? お前の環境変だろ。LC_ALL設定してしまってるとか。
961 :
名無しさん@お腹いっぱい。:2012/05/05(土) 12:00:08.94
en_US ロカールが定義されているか、未定義かで変わる?
各地域ロケールの内容ってどこかで決まってたりするの? 環境依存だと思ってた。
963 :
名無しさん@お腹いっぱい。:2012/05/05(土) 12:12:56.73
>>959 ではないけどやってみた。OSX Lion。
普段の環境は LC_ALL 未定義、LC_MESSAGES=C、LC_TIME=C、他のLC_xxxは未定義、LANG=ja_JP.UTF-8
$ LC_COLLATE=en_US.UTF-8 zsh -c 'echo ZSH_VERSION=$ZSH_VERSION LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE; echo *'
ZSH_VERSION=4.3.11 LC_ALL= LC_COLLATE=en_US.UTF-8
_a _b a b
$ LC_COLLATE=C zsh -c 'echo ZSH_VERSION=$ZSH_VERSION LC_ALL=$LC_ALL LC_COLLATE=$LC_COLLATE; echo *'
ZSH_VERSION=4.3.11 LC_ALL= LC_COLLATE=C
_a _b a b
多分、en_US localeをインストールしてない環境ってオチ。それならLC_COLLATE=C と同じになって当然。
965 :
963:2012/05/05(土) 13:42:40.15
うちのzshはここ見てないのかねぇ。
$ ls -l /usr/share/locale/en_US.UTF-8/LC_COLLATE
lrwxr-xr-x 1 root wheel 28 2011-08-02 23:22 /usr/share//locale/en_US.UTF-8/LC_COLLATE -> ../la_LN.US-ASCII/LC_COLLATE
$ ls -l /usr/share/locale/la_LN.US-ASCII/LC_COLLATE
-r--r--r-- 1 root wheel 2086 2011-08-02 23:22 /usr/share/locale/la_LN.US-ASCII/LC_COLLATE
LNってどこだよw
966 :
963:2012/05/05(土) 13:52:07.08
$ strings =zsh | grep strcoll
少なくとも strcoll は呼んでないわー。 libiconvとかはリンクしてるけど。
>>960 片方 a _a b _b になるじゃねーか。LC_ALL設定失念しちまった。
なにこれ _a を 1文字として扱ってるの?
>>966 % echo $ZSH_VERSION
4.3.17
% strings =zsh | grep strcoll
strcoll
968 :
名無しさん@お腹いっぱい。:2012/05/06(日) 04:10:16.92
969 :
名無しさん@お腹いっぱい。:2012/05/13(日) 00:17:40.31
以下のように拡張子の前の数字を取り除きたいのですが、zmvでどのように実行をすれば良いでしょうか?
hoge1.mp3 → hoge.mp3 #数字を取り除く
hoge1hoge.mp3 → hoge1hoge.mp3 #そのまま
試行錯誤したのですが、うまく行きません。
以下のように実行すると、"hoge1.mp3"と"hoge1hoge.mp3"を"hoge.mp3"に変換しようとして失敗します。
zmv -n '([a-z]*)[0-9]*.mp3' '$1.mp3'
以下のように実行すると".mp3"に変換しようとして失敗します。
zmv -n '^([a-z]*)[0-9]*.mp3$' '$1.mp3'
>
>>969 basename使うわけにはいかないの?
いつも for で zmv 使ってないから知らんけど '(*)<->.mp3' じゃないか?
多分それ re じゃないよ。
それだと
(hoge12)3.mp3
になるぜ
自分も普段は for 文を使っちゃうけど
zmv '(*)[0-9]##.mp3' '$1.mp3'
とかでいいのかな。まあ便利なのかもw
ああ
>>972と同じになってしまうのか
zmv '(*).mp3' '${1%%[0-9]##}.mp3'
かな?
おお、たしかに。こうする必要があるか。 '(*[^[:digit:]])<->.mp3'
そうか shortest match flag とかはないんだな。
うーん *(#c,)<-> で落ちる。こんなパターン使わないけど。
977 :
969:2012/05/13(日) 17:35:45.22
ありがとうございます。
>zmv '(*).mp3' '${1%%[0-9]##}.mp3'
でうまく行きました。
これは$1のうちの%%と##で挟まれた正規表現を取り除くという書式なのでしょうか?
>おお、たしかに。こうする必要があるか。 '(*[^[:digit:]])<->.mp3'
<-->はどういう処理ですか? こちらは使いかたがよく分かりませんでした。
すみません。zmvのパラメータについて解説しているサイトはありませんか? zmvの書式が難しくて。
man zshcontrib
>>978 ありがとうございます。
man zmvで見つからない、とか思っていたので。
>>977 man zshexpn すれば詳しいことが載っているが ${name%%pattern} と x## の組み合わせだよ
前者はシェルスクリプト一般でよく使われる
<-> は <[x]-[y]> の特殊例で数字にマッチする
>>980 ありがとうございます。
ようやく理解できました。
man zshall しかうたないな
>>982 俺もman zshall派
でもそうすると目当てのものみつけにくいんだよなw
使うのは zshall でも人に示すときは絞る
昔から言われてるけど zsh 関係のドキュメントは読み物としては面白くないな
言われてた気もするけど今思うに特別そうでもない
うん。