zsh その7
そっか、そもそもglobというのが頭の中からすっぽり消えてた。
恥ずかしながら。出直してきます。 zsh-5.0.8のprintfで-フラッグが効かないんだけど、他にもなる人いる?
こんな感じ。
$ builtin printf '%-20s' 'hoge'
hoge
$ command printf '%-20' 'hoge'
hoge zsh 5.0.7 (amd64-portbld-freebsd8.4) でもおなじ >>416
あれ、おかしいな?俺は5.0.7まで正常(左詰めされる)だったんだけど…。
ちょっとrevertしてみるわ。 やっぱり5.0.7だと大丈夫っぽい。
パッケージ作成時の設定も変わってないみたいなのになんでだろう。
$ zsh --version
zsh 5.0.7 (x86_64-unknown-linux-gnu)
$ zsh -c 'builtin printf "%-20s" "hoge"'
hoge
$ zsh -c 'command printf "%-20s" "hoge"'
hoge
とりあえずは5.0.7で様子見することにします。 ごめん、ちゃんと読んでなかった。うちでも、5.0.7だと正常(左詰めされる)でした。
zsh 5.0.8 (amd64-portbld-freebsd8.4) だと右詰になります。 >>419
どうもです。となるとzshのバグですかね。
どなたかzsh-usersに報告されてました。
http://www.zsh.org/mla/users/2015/msg00609.html
というわけで、修正が来るまで?待つことにします。
お騒がせしました。 select ループで選択候補にナンバリングされるけれども、この表示方法は変えられないのかな
桁の変わり目に表示がずれるのがどうしても気になる
ファイル選択に select を使うのもあまり便利とは言えないけど…
こういうときは皆どうしてるのかな teeみたいなことをやるリダイレクトで
ls > /tmp/ls.txt > /dev/sdtin
ってできるけど、なぜ stdout じゃなくて stdin に流すのでしょうか?
なんとなく stdout に流したくなるのですが /dev/stdoutに すると端末に表示されずに、/tmp/ls.txt にもう一度書きこまれるのでは?
端末に結びつけられていれば /dev/stdin でも /dev/stderr でもいいが
どうせスペシャルデバイスを使うのなら /dev/tty の方がわかりやすいかもね zsh使うくらいなら最初からbashだけ使ってた方がいい。
将来、なんかの拍子にbashの仕事が入ってくるかもしれない。
その時にbash使ってましたアピールは大きい。
zsh使ってましたとか何のアピールにもならない。
もう一度言う、たとえ趣味でもbashを使え。 >>422
うちのzsh 5.0.8ではls.txtは作られても画面には何も表示されなかったんだが、オプションか何か? firewalldの補完ファイルどっかに落ちてない? >>422
ls > /dev/stdout > /tmp/ls.txt
とか
ls >&1 > /tmp/ls.txt
でいいんじゃないかな 初心者で申し訳ないが#や$から左のホスト名とかユーザー名、ディレクトリはどこらへんいじれば変えられる? >>435
zsh プロンプト でググればやりかたが見つかる。
.zshrc に書くらしい。 vim .zshrcすると
operation not permittedって出ます .の後にスペースを入れたように見えるけど実際には.を使ってたりする じゃあ俺、mkdir .zshrc して帰るから(鬼畜) じゃ俺はそれをrm -rf . zshrcで消しとくね (( )) 内の浮動小数変数のデフォルト型をdoubleにする設定ってないですか? zsh-5.0.8 → zsh-5.1.1(zsh-5.2 も同様) と上げたら、
menu-complete → reverse-menu-complete で
reverse-menu-complete が確定→補完開始するようになった。(バグ?)
zsh-5.0.8 は確定せずに候補選択の逆順移動をする。
zsh-5.0.8 と同じ動きにする方法ってある?
>>448
setopt FORCE_FLOAT
でどうでしょう。
と思ったら浮動小数変数のデフォルト型ですか。
何もしなくても double では?
表示の有効桁数のことですか? compinit するとなるようですね。もっというと
zle -C reverse-menu-complete .reverse-menu-complete _main_complete
でなる。(_main_complete でなくても。)
zsh-5.0.8 でも compinit すると complete-word, menu-complete とかで
新しい補完を開始してしまう。
ので、reverse-menu-complete 以外は前から問題があったのかな?
zle -C 前の reverse-menu-complete や .reverse-menu-complete なら
新しい補完を開始することはない。
が、menu completion 中以外について、
当然 _main_complete は呼ばれないし、なぜか compinit なしの補完もしない。
menu completion 中しか reverse-menu-complete を使ってないので
姑息ながら、とりあえず .reverse-menu-complete で凌ぐ。 seq 1 10 | echo `grep 5` `grep 3`
bashだと5が表示されるけど、zshだと完全に固まるね(^Cも^Zも受け付けない) 5.2 では
% seq 1 10 | echo `grep 5` `grep 3`
grep: (標準入力): 入力/出力エラーです
3<eof> ← 入力
3
となる。けど
% zsh
% seq 1 10 | echo `grep 5` `grep 3`
でなぜか固まるね。
↓ は期待通りかな。
% zsh -c 'seq 1 10 | echo `grep 5` `grep 3`'
5<eof> ← 入力
3<eof> ← 入力
5 3
bash とは多分仕様が違うけど、
bash は POSIX compliant なのかな?
正しく動けば zsh の方が使い易そうだけど。 hist_find_no_dupsはどういう意味なんでしょうか?
これを設定していても、Ctrl-pを繰り返し押したとき同じコマンドが何回も出てきます。 Ctrl-rで検索したとき一度出たものと重複するものをスキップしてくれますよ。 そういえば.zhistoryも日本語が文字化けしてた
history-all等の方で取り出すのは文字化けしないから
困った事にはならなかったが
bash_historyの方は化けないから
文字化けは他でもまた偶然直面しそうだ
直し方両方分からないし なんかzshがWindowsに対応とかニュースになってるらしいけどマジ? すごいよ。WindowsでUbuntuのバイナリ互換するんだもんな
zshも動くよきっと >>459
~/.zsh_historyのエンコーディングがLatin1っぽい >>465
nkf で utf-8 に変更しても駄目だったから
zshから書き出すまでの方見ないと駄目かもしれない bashのcdでディレクトリだけ補完する、の下記設定は、zshだとどう書けばよいですか?
complete -d cd
下記でできましたが、自分には不要な設定もたくさんついてくるので、cdのディレクトリ補完だけ単独で設定したいです。
autoload -Uz compinit; compinit man cdとするとzshではなくbashのビルトインの方が呼ばれるんですがどうしたらいいですか
man zshbuiltinはちょっとめんどい zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
これで補完のとき大文字小文字を区別しないようにしているのですが、
Macで/us<Tab>とすると/Usersが先に出てきてしまいます。
これを/usrが先に出てくるようにしたいです。つまり
入力した文字列と大文字小文字が一致した候補がある場合はそちらを先にしたいのですが
どうすればいいでしょうか? zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}'
これじゃダメなんだね? 大文字小文字無視系の設定は、しばらく使ってみないと自分の好みの動作が判らんよな
楽をしようとしてるのに、縛りを少しきつくすると勝手に確定させられて「おいっ!」みたいなことがあるし 俺は最初oh-my-zsh使ってたけど今はantigenで落ち着いたな(´・ω・`) .zshrcにfunctionを書いているのですが、readでユーザ入力を待っている時に、ctrl+c、ctrl+d、esc、どれも押しても強制終了できません。
function hoge(){ .zshrcにfunctionを書いているのですが、readでユーザ入力を待っている時に、ctrl+c、ctrl+d、esc、どれも押しても強制終了できません。
ユーザ入力ができて、入力待ち中に強制キャンセルもできるようにするにはどのようにすればよいでしょうか?
function hoge(){
# 入力待ち中に強制キャンセルが何も効かない。。
printf "input: "
read string
} >>483
function hoge(){
trap 'return 1' SIGINT
printf "input: "
read string
}
これでどうだろう >>484
ありがとうございます。
ctrl+cのあとにエンターを押せばtrapに補足されましたが、ctrl+cだけではキャンセルされませんでした。。
バージョンはこれでした。zsh 4.3.11 (x86_64-redhat-linux-gnu)
テストで、 trap "echo aaa" SIGINT としたんですが、これ、関数が終わった後も、コマンドライン上でctrl+cすると
aaa
aaa
aaa
...
とtrapが発動するようになりますね。。
とりあえず、 read -k 1 str で1文字入力にすることで、ctrl+cが入力されるとそれでキャンセルされたように見えるのでこれで代用しようかな。 >>485
見当違いなアドバイスだが、readに-tつけては >>486
なるほど。
秒数待ちをするんですね。
そのアイデアはまったく考えてませんでした。
案の一つとして検討させていただきます。ありがとうございます。 ここ最近、履歴の共有ができなくなってしまいました
inc_append_history と share_history は有効にしてます
何が悪さをしてるでしょうか?
zshは5.2です function定義した中身を表示する方法はありますか?
aliasはwhichで内容を確認できるのですが、functionはwhichで見れず。。
何か他の方法で見れないでしょうか? >>490,491
レスありがとうございます。
すでに違ったとレスいただいていますが、typeコマンド初めて知りましたので一応調べてみたら、functionだとわかるだけでした。 関数定義も普通にwhichで見れると思うけど……
% function foo() { echo hoge; }
% which foo
foo () {
echo hoge
} whichが置き換わってるんとちゃう?
built-in which
でいける >>493,494
おお!
その通りでした。
whichをwhichするのは初めてだ。
↓alias登録されてた!
% which which
which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
これでいけました。ありがとうございます。
% builtin which is_exists
続きます。 続きです。
.zshrcと.zshenv見直してもalias登録してないので、どこで設定されてるかぐぐったら
こんなの見つけました。
ttp://d.hatena.ne.jp/BigFatCat/20080601
どうやら下記で設定されてるみたいです。
/etc/profile.d/which-2.sh
これはzshの場合デフォルトで読まれるみたいですが、functionが見れなくなる欠陥whichで書き換えるとか迷惑ですね。。
これを読まないようにする設定とか無いでしょうか? 途中で書き込んでしまいましたすみません。
読まないようにする設定が無ければ、無理矢理感があって気持ち悪いですが unalias which を.zshrcに入れて我慢します。 zshはそんなものデフォルトで入れないよ。冤罪だw
その手のおせっかいはお使いのディストリビューション固有の事情かと。 curlで&や?を含むURLを取得するとき、いちいちURLをクォートで囲むのが
面倒なんだが、いい方法ないだろうか? URLをコピペするときは bracketed-paste-url-magic が役立つ 自分はその手のコマンドは noglob を使った alias を定義してるな >>504
あれ、確かにそうだよなと思って履歴を見返したら、クォート 途中で切れてしまった。履歴を見返したら & を含む場合はクォートしていたw
ごめんち
ブラウザ経由で呼び出す機会が多くなったし、端末に張り付ける場合も
正規化した URL を使ってたから、クォートする機会があまりなかった
自分の記憶が全くに当てにならんのが泣ける ttps://github.com/ryoppy/cool-peco
を入れたんだけど C-r で cool-peco-history にならんのです。
デフォルトの bck-i-search: になっちまう。
コマンドラインからは cool-peco-history 呼べるし、
alias の hist も呼べる。
$ bindkey | grep peco
"^R" cool-peco-history
になってるし、コマンドラインから
$ bindkey '^r' cool-peco-history
しても変わらず。
「やっちまったなぁ!」を使わず解決策教えてほしいです。 pushd +3
とかってしたとき、3つ分スタック全体を循環させるんじゃなくて、
3つ目を取り出してスタックトップに乗せるって挙動なかったですか?
つまり最近使った順にスタックが並ぶ。
昔出来た気がするのですが、今マニュアル見てもなくて。 ulimit -aってやると一番下に
-N 15: unlimited
と出るんですが、この項目は何ですか? extendedglobがmissing delimiterとか言われてエラーになる
何か他のオプションと衝突するとかある? cdr だけ 部分一致で補完したいのですが、どうすればよいでしょうか?
実用途としましては、project名 入力で path が補完して移動です。
zstyle ":completion:*" matcher-list 'm:{a-zA-Z}={A-Za-z} l:|=*'
で部分一致になった( l:=|* が 妥当かもわかってません)ので、
zstyle ":completion:*:*:cdr:*:*" matcher-list 'm:{a-zA-Z}={A-Za-z} l:|=*'
としてみたのですが、反映されませんでした。 最近.zshrcを見直してzmodload zsh/filesが入ってたことに気付いたけど
これもう完全にいらない子なんだな。
たしか引数の最大バイト数を回避する目的で入れた記憶があるけど、
最近のLinuxは引数上限がかなり緩和されたはずだから困ることはまずないし、
むしろPOSIX準拠してないので制約が多い。
というかそもそもこれが作られた目的が緊急時のリカバリ用というのを今頃知った。
ただのPOSIX拡張だと思ってたわ・・・。manは見なきゃ駄目だな。 誰でも簡単にパソコン1台で稼げる方法など
参考までに、
⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。
グーグル検索⇒『宮本のゴウリエセレレ』
CDVW4G8P2M 世の中pythonが流行ってるけど、案の定xonshっていうシェルも出てきた
そのうちイーマック厨みたいにpythonは環境です(キリッとか言い出すやつも現れそうだな