■掲示板に戻る■
1-
101-
201-
301-
401-
501-
601-
701-
801-
901-
1001-
最新50
レス数が1000を超えています。残念ながら全部は表示しません。
zsh入門
1 :
名無しさん@お腹いっぱい。
:2001/05/19(土) 23:42
なんかそろそろzshの補完機能をじっくりいじろうかなぁと思ったんですけど
compctl読みにくいですねぇ…
自分で書いたのもいまいちしっくり来ない…
ってことでみんなの.zshrc(主に補完部分)を見せ合いっこしませんか?
自分はまともなの書けてないですが…
zstyleも勉強したいので大歓迎
というか参考文献が少なすぎるのでかなり喜ばれるはず
いままで他のshellを使ってきた方もこれを機に一緒に勉強しましょー
とりあえず自分のオプションはこんな感じです。tcshライクになってます。
bindkey -e
bindkey ' ' magic-space
bindkey '^W' kill-region
bindkey '^Q' reverse-menu-complete
setenv () {export $1="$@[2,-1]"}
unsetenv (){unset $1}
setopt prompt_subst
setopt nohup
setopt auto_cd GLOB_COMPLETE
setopt auto_remove_slash
setopt extended_history hist_ignore_dups
setopt prompt_subst
setopt pushd_ignore_dups rm_star_silent sun_keyboard_hack
setopt extended_glob list_types
setopt no_beep always_last_prompt
setopt cdable_vars sh_word_split auto_param_keys no_clobber
setopt complete_aliases setopt complete_in_word auto_list
unsetopt list_ambiguous auto_menu
608 :
604
:02/07/22 15:29
>>607
うまく動かないだけじゃ何にも分らないっす。
609 :
603
:02/07/22 17:56
>>608
本当にすみません。
>>596
すら読んでませんでした。
うちでは
- '-x[attach to a session (multi mode)]:sessions:_screen_sessions_multi' \
+ '-x[attach to a session (multi mode)]:sessions:_screen_sessions_attached' \
とちょっと変えないと-xを補完してくれませんでした。
zsh-4.0.4で、screen-3.9.11でした。
610 :
604
:02/07/22 18:27
>>609
ひょっとして、screen -ls で multi ってでるのは、multi-userであって、
multi-displayとは関係ない? もしそうなら>>609の対処でいいです。
あと、grep -i にしないとだめかも。
611 :
603
:02/07/22 18:46
grep- e 'attached' -> grep -e 'Attached'
grep -e 'detached' -> grep -e 'Detached'
も、してました。もう完璧です。
612 :
604
:02/07/22 19:01
>>611
えっと、multiuser onだと(Multi, attached)というように
頭文字が大文字になるのは、最初のものだけみたいです。
なんで、grep -i attached のほうがいいかな、と。
613 :
名無しさん@お腹いっぱい。
:02/07/22 19:06
_screenがどうも動かないな〜と思ったらgawkがなかっだけだった。
614 :
名無しさん@Emacs
:02/07/22 19:36
platex や xdvi-ja ってコマンドで、
latex や xdvi の補間関数を利用する簡単な方法を教えて下さい。
615 :
名無しさん@お腹いっぱい。
:02/07/23 00:01
compdef _tex platex
616 :
名無しさん@Emacs
:02/07/23 09:11
>>615 とても快適です。ありがとうございます。
617 :
:02/07/23 20:06
ようやく今月号の UnixUser の連載を読んだ。
history-beginning-search-{backward,forward}-end を C-{p,n} に割当て
る場合は、マルチラインの履歴の編集の為に、他のキーに予備として
{up,down}-line-or-history を割当てておくか、矢印キーを使うかを言及
しておいた方がよかったかな。
setopt より先に編集機能の説明をしたのは良かったと思う。
618 :
名無しさん@お腹いっぱい。
:02/07/26 17:12
複数のマシンで ~/.zshrc などの設定を共有するにあたっての tips など、
こういうふうにしてうまくやってるよん、みたいなのがあればきぼん。
619 :
:02/07/26 20:10
最近なら CVS を使うのが順当なのかな。ネットワーク的に繋ってないと
不便な点もあるが。
620 :
名無しさん@お腹いっぱい。
:02/07/26 22:25
>>618
~/.zshrcと~/.zshenvは、SolarisとLinuxとCygwinで共有しているよ。
いまのところ、InternetDiskで共有しているけど遅いし、
GUIアプリを起動しなくちゃいけないのがメンドイね。
>>619
スレちがいだけど、CVSで firewall越えられるんでしたっけ?
homepageスペースしかなくても大丈夫?
621 :
618
:02/07/26 22:59
私も、常時接続で SSH できるマシンがあるので、
そこで CVS 立てて一元管理しようかなと思ってます。
InternetDisk っていうのは初耳だったので調べてみます。
あと、各マシンで微妙に設定が違う部分はどうしてるんでしょう?
私は、~/.zshrc.site みたいなのをマシン毎に用意して source したり、
case `hostname` したり case `uname` してるんですが、
もっとうまいやりかたがあったりするんでしょうか。
622 :
名無しさん@お腹いっぱい。
:02/07/26 23:46
>>618
すごすぎて参考にならないのが akr さんのやつだな。
http://cvs.m17n.org/cgi-bin/viewcvs/dot-zsh/?cvsroot=zsh
漏れは .zshrc に限らず dotfile を CVS 管理してるYO!
zsh 関係は ~/etc/zsh/ につっこんでる。
んで ~/etc/zsh/functions/ に自前の補完関数おいてる。
マシン名見て切り替えてる部分ってのは今のところない。
バージョンとかマシン名見るってのは最後の手段にしてる。
そんかわり [ -x /usr/local/bin/hoge ] && hoge みたいなのが多め。
.zshrc とは直接関係ないけど、NIS がらみのトラブル防止のために
- login shell は /bin/sh
- .profile で [ -x /hoge/zsh ]&& SHELL=/hoge/zsh && exec zsh -l
ってしてる YO!
623 :
名無しさん@お腹いっぱい。
:02/07/27 17:24
はい、それから〜
624 :
親切な人
:02/07/27 17:42
ヤフーオークションで、凄い人気商品、発見!!!
「 RX-2001 」がパワーアップした、
「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA#.2ch.net/
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
ヤフー ID の無い方は、下記のホームページから、
購入出来る様です↓
http://www.h4.dion.ne.jp/~gekiyasu/#.2ch.net/
625 :
名無しさん@お腹いっぱい。
:02/07/27 23:23
Debianでzsh4.0.4使ってるんだけど,質問です.
alias em='emacs -nw'って設定してるんだけど,端末で
%em filename
ってやる時に,filenameの大文字小文字を区別しちゃうんですよ…
ちゃんと大文字小文字は区別しない,って設定してるのにこのエイリアス
だけ設定が生きてないようです
解決方法はありますでしょうか?
626 :
名無しさん@お腹いっぱい。
:02/07/27 23:27
>>625
> ちゃんと大文字小文字は区別しない,って設定してるのに
どんな設定?
627 :
625
:02/07/28 01:08
>>626
指摘されて設定捜したんですが,既に設定ファイルが理解の範囲を越えてました…
出来れば,解決策とともに大文字と小文字を区別しない設定を教えて下さい
628 :
名無しさん@お腹いっぱい。
:02/07/28 01:16
matcher-list で検索せい
629 :
625
:02/07/28 01:24
>>628
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
これのことですよね?
この設定なら,ちゃんと.zshrcに書き込んでありますし,機能しています
私,間違っているんでしょうか?
630 :
名無しさん@お腹いっぱい。
:02/07/28 01:31
それはそれでいい。
em に関しての補完の設定が別にあるとか?
631 :
625
:02/07/28 01:34
>>630
いえ,emに関してはaliasしてあるだけです.
emacs等の補完の設定等は一切しておりません.
何が悪いんでしょうか?
632 :
名無しさん@お腹いっぱい。
:02/07/28 01:55
他の設定が悪さをしているだと思うが、それだけでは
判らんなあ。
zsh の設定ファイルを晒せば解決が一番早いのでは
633 :
625
:02/07/28 02:06
>>623
ですね…自分でも調べていましたが,有用な情報は見つかりませんでした
では,失礼して設定ファイルを張らさせて頂きたいと思います
634 :
625
:02/07/28 02:11
>>633
では失礼して貼り付けさせて頂きます
<.zshrc>
HISTFILE=$ZDOTDIR/.zhistory
HISTSIZE=1024
SAVEHIST=1024
if [ $UID = 0 ]; then
unset HISTFILE
SAVEHIST=0
fi
autoload -U compinit
compinit
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
PROMPT='%U%(#.%Broot%b.%n)@%m%u:%~%# '
unlimit
limit core 0
limit -s
umask 022
stty erase '^H'
stty intr '^C'
stty susp '^Z'
bindkey -e# EDITOR=vi -> bindkey -v
bindkey '^U' backward-kill-line# override kill-whole-line
bindkey '^W' kill-region# override backward-kill-word
bindkey '^[h' vi-backward-kill-word# override run-help
bindkey '^[.' copy-prev-word# override insert-last-word
source $ZUSERDIR/zshoptions
source $ZUSERDIR/aliases
source $ZUSERDIR/lscolors
alias ls='ls -F --color=tty'
635 :
625
:02/07/28 02:14
す,すいません!!
今何故かemでもきちんと補完が効きました…
きっと何かが悪さをしていたんだと思います,欝です.
お手間を取らせて申し訳もないです.
有難う御座いました.
636 :
名無しさん@お腹いっぱい。
:02/07/28 02:25
うむ、良かったではないか。
>>634 を見て「たしかに特には何も設定しとらんな。というか、他のファイルを
source してるんかい。aliases あたりも晒した方がいいかもな」と思ってたところ(w
matcher-list といえば、自分は
zstyle ':completion:*' matcher-list 'm:{a-z-}={A-Z_} r:|[-_./]=* r:|=*'
として、より横着度が高くなっている。
637 :
625
:02/07/28 02:28
>>636
てか,aliasesを貼り付けようとしてる時に,何気なくemを実行したら補完出来たんです(w
あ,その設定良いですね!
切角なので貰わさせて下さい
638 :
名無しさん@お腹いっぱい。
:02/07/29 12:01
zsh にこんなきのうない?
> tcsh で、
> bindkey ^Z run-fg-editor
> しとくといい感じ。^Z のみでいったりきたり。
639 :
名無しさん@お腹いっぱい。
:02/07/29 13:17
FAQ にもあるね。
run-fg-editor() {
zle push-input
BUFFER="fg %$EDITOR:t"
zle accept-line
}
zle -N run-fg-editor
bindkey '^Z' run-fg-editor
ってな具合。細かいところは好みに合わせてくれ
640 :
名無しさん@お腹いっぱい。
:02/07/30 21:53
>>639
これって一瞬コマンドラインに "fg %emacs" みたいな表示が出るけど、
これを消すことはできないのかな。
641 :
名無しさん@お腹いっぱい。
:02/07/31 03:57
うちではどんなに目を凝らしても見ることができない
642 :
名無しさん@お腹いっぱい。
:02/07/31 10:40
>>641
マシンが速いからじゃないかな?
普段はそれほど速くないSolarisなので..。
643 :
名無しさん@お腹いっぱい。
:02/07/31 21:25
質問です。
ローカルスプールにメールが届いたとき
You have new mail.
ってメッセージが来るけど、このメッセージはカスタマイズできませんか。
644 :
名無しさん@お腹いっぱい。
:02/07/31 21:57
すみません、ちょっとwebで調べてから質問すべきでした。
~/.zshenvに下のように書き込んで解決しました。
unset MAIL
export MAILPATH='/var/spool/mail/YOURNAME?メールが届いています。'
エスケープシーケンスで色もつけられるし、メッセージを
複数行にまたがらせることもできるみたいです。こんなふうに:
export MAILPATH='/var/spool/mail/cat?^[[31m================
メールが届いています。
================^[[m'
645 :
643
:02/07/31 21:58
644は私です。しかかもあげてしまってすいません。本当にすいません。
646 :
bindkey
:02/08/01 09:47
tcshの
bindkey -c key 'Unixコマンド'
が便利でzshでもやりたいです。
zshは-sしかないので
bindkey -s key '文字列\C-j'
のようにして、無理やりUnixコマンドを実行させてますが、
この文字列が履歴に残らないように、或いは
bindkey の結果が画面にエコーされないようにする方法
ってありますか?
647 :
bindkey
:02/08/01 09:52
追加です。
フツーのUnixコマンドをzleのウェジットに
する方法ってありますか?
すみません。zsh初心者です。
648 :
bindkey
:02/08/01 10:02
zleのウェジット作成について、
/usr/share/zsh/site-functions/hoge
% cat hoge
hogehoge(){
処理
}
-------
で
.zshrcにて
autoload -U hoge
zle -N hogehoge hoge
bindkey 'キー' 'hogehoge'
としても実行できません。
すみません。初心者です。
649 :
bindkey
:02/08/01 10:15
素直に.zshrcに
hogehogeを書いて、
zle -N hogehoge
bindkey '^xa' hogehoge
とすると解決しますが、
別ファイルに記述するにはどうすればいいのでしょうか?
650 :
名無しさん@お腹いっぱい。
:02/08/02 05:05
>>648
..../site-functions/hoge
には関数の中身を書けばいいので、
> hogehoge(){
> 処理
> }
でなくて
処理
だけでいいはず
651 :
名無しさん@お腹いっぱい。
:02/08/06 09:58
msysで(mingw)でzshって使えるのですか。
652 :
名無しさん@お腹いっぱい。
:02/08/06 11:30
某スレより。
------------------
bindkey -s "^xi" '\C-a`\C-e`\C-aforeach i \(\C-e\)'
bindkey -s '^[l' '\eb~/\ef\C-x*'
とかはかなりイイ。
普段は、C-mな俺は、C-jを
bindkey '^j' accept-and-infer-next-history
に、また
bindkey '^[^I' reverse-menu-complete
も直感的でイイ。
また、キーマップ指定で、
bindkey -M menuselect 'キー' command
とできるのもイイ。
-------------------
みんなのbindkey -s を見せ合おう。
653 :
名無しさん@お腹いっぱい。
:02/08/06 11:38
やばい...。最近ついていけてない。
654 :
名無しさん@お腹いっぱい。
:02/08/06 21:20
>>653
激しく胴衣
655 :
名無しさん@お腹いっぱい。
:02/08/07 11:48
zsh.exeは日本語表示できないのか、、、
656 :
名無しさん@お腹いっぱい。
:02/08/08 02:16
>>603
screen のソースに含まれてる
657 :
名無しさん@お腹いっぱい。
:02/08/08 03:04
>>655
へ?
658 :
名無しさん@お腹いっぱい。
:02/08/08 16:40
vi-find-prev-char-skip
をemacsのキーマップで使いたいのですが・・・・
659 :
名無しさん@お腹いっぱい。
:02/08/08 19:16
tcshのdabbrev-expand
zshの???
660 :
名無しさん@お腹いっぱい。
:02/08/08 21:50
>>658
適当なキーに割当てればいいのでは。
>>659
_history_complete_word を使うか、小松さんの zsh-dabbrev を使うか。
なんか今サイト見られないけど。
個人的には history-beginning-search-{backward,forward}-end で大抵
用が済むので dabbrev が欲しい場面があまりないのだけど
661 :
名無しさん@お腹いっぱい。
:02/08/08 21:51
そういえば、今日UnixUserの発売日だった。ageておこう。
連載の記事読んだ人、どんな内容だったか教えてちょ
662 :
名無しさん@お腹いっぱい。
:02/08/09 21:26
^[Qのpush-lineをbindkey -vでもできるようにするにはどうすればいいですか?
3.1.6なんですが。。。
663 :
659
:02/08/10 03:38
>>660
_history_complete_word ????
_history_complete_older
_history_complete_newre
ならあるけど。
zsh 4.0.4
探しに行く方向を指定できるし、
↓(新)は行き過ぎたときに戻る程度だけど、
便利に使ってます。
664 :
名無しさん@お腹いっぱい。
:02/08/10 03:59
>>663
実体は _history_complete_word でしょう。ファイル名も
そうなってるしな
665 :
名無しさん@お腹いっぱい。
:02/08/10 09:31
zsh-4.0.5 age
666 :
名無しさん@お腹いっぱい。
:02/08/10 17:23
例えば
% host aaa.bbb.ccc.ddd
の後に
% cat XXX | grep aaa.bbb.ccc.ddd
というコマンドを打つ時、grep の後ろを補完する方法ってあるんでしょうか?
ホスト名の補完じゃなくてコマンドヒストリからコマンド引数を参照して補完、
みたいにやりたいのですが…
667 :
名無しさん@お腹いっぱい。
:02/08/10 18:56
>>666
!*で直前の引数全部
!$で直前の最後の引数
それ以外の引数はどうやって指定するんだ?
cat XXX|grep !$でいいとオモワレ
668 :
名無しさん@お腹いっぱい。
:02/08/10 19:11
!:3 で3番目の引数だった
669 :
名無しさん@お腹いっぱい。
:02/08/10 19:11
cat XXX | grep !:1
670 :
名無しさん@お腹いっぱい。
:02/08/10 19:16
%1 2 3
%4 5 6
%echo !-2:0 !:$
echo 1 3
1 3
!:$は!-2:$にしなくてもできる。
671 :
666
:02/08/10 19:17
できました。ありがとうございます。
672 :
名無しさん@お腹いっぱい。
:02/08/11 11:42
bindkey -vで^Xgにline-expandをわりあてるにはどうすればいいですか?
673 :
名無しさん@お腹いっぱい。
:02/08/11 12:01
>>109
亀レスだがsetopt recexactすればよし。
674 :
名無しさん@お腹いっぱい。
:02/08/11 12:06
ゴメン。unsetopt recexactだった。
それかsetopt menucompleteこれをやるとvimでtabをおしたような補完になる
675 :
名無しさん@Vim%Chalice
:02/08/11 13:16
>>510
% ls
foo
% echo 'bar' >| foo
676 :
名無しさん@お腹いっぱい。
:02/08/11 13:22
>>661
毎月発売日に読んでレスしているのですが
今月は都合があってまだ本屋に言っていません。
こんな暑い中に戸田書店までチャリで30分もかけて
言ったら氏む。
677 :
名無しさん@お腹いっぱい。
:02/08/11 13:38
freebsd4.5Rを使っています
お聴きしたいのですが.cshrcはなにもいじってない状態で
rootになった時に
ls -l
ls -F
ls -a
と上から順にうってlsだけ入力した状態で
矢印keyの上を押すとls -aもう一度押すとls -Fのように
ls以降の文字列だけを検索?のようにできるようなのですが
zshではhistoryの下から順にしか表示されないのですが
上のような感じの機能あると便利なのですがzshでも可能でしょうか?
678 :
名無しさん@お腹いっぱい。
:02/08/11 13:41
bindkey '^P' history-search-backward
bindkey '^N' history-search-forward
か?
679 :
名無しさん@お腹いっぱい。
:02/08/11 14:28
オプションがたくさん載ってた。ありがたや
ttp://www.ayu.ics.keio.ac.jp/members/mukai/tips/zshoption.html
680 :
名無しさん@お腹いっぱい。
:02/08/11 16:51
>>678
はい。
bindkey -k up history-search-backward
bindkey -k down history-search-forward
zshだとどう書けば良いのでしょう?
681 :
680
:02/08/11 17:19
そのままでよかったんですね。ありがとうございました
682 :
名無しさん@お腹いっぱい。
:02/08/11 17:51
先日、zshの wiki ができた。
http://www.zshwiki.org/cgi-bin/wiki.pl
683 :
名無しさん@お腹いっぱい。
:02/08/11 18:38
bindkey ^[ vi-cmd-mode
でemacs+vi(゚Д゚)ウマー
bindkey ^[h undifined-key
でESC押したあとにすぐにh押してもヘルプがでない(゚Д゚)ウマー
684 :
名無しさん@お腹いっぱい。
:02/08/11 20:18
>>683
emacsはAltおしながらだから
かぶらない
685 :
名無しさん@お腹いっぱい。
:02/08/12 21:53
.zhistory.19380
ってファイルなんなのさ!
686 :
名無しさん@お腹いっぱい。
:02/08/12 22:44
>>685
中身を見てみろ
687 :
名無しさん@お腹いっぱい。
:02/08/13 00:10
>>686
サイズ0でパーミッションは---------さ!
688 :
名無しさん@お腹いっぱい。
:02/08/13 10:34
zsh使ってのプログラミングについて
シツモンしたいのですが、
どこのヴァンに聞けばいいでしょう。。
689 :
Vin
:02/08/13 10:37
ここでいいよ。
690 :
コギャルとHな出会い
:02/08/13 10:56
http://kado7.ug.to/net/
朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
小中高生大歓迎です
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
激安携帯情報あります。
691 :
名無しさん@お腹いっぱい。
:02/08/13 15:36
bindkey -s '^X^C' 'logout
'
って出来ます?
'^Xc' なら出来るのだけどなぜだろ...。
692 :
ふわふわ名無しさん
:02/08/13 16:11
>>691
^C が tty に食われているから。
stty -a したら intr=^C になってない?
stty intr '^?' とでもしたあとに ^X^C してみ。
# あんまりお勧めしないけどね。
693 :
691
:02/08/13 16:20
>>692
あ。そうか。
でも intrrupt は '^C' がいいので諦めます。
ありがとでした。
694 :
名無しさん@お腹いっぱい。
:02/08/13 19:56
>>691
なるほど,-sオプションは^X^Cを押すとlogoutが入力されるようになるのか。
僕は^Dでログアウトしてます。
695 :
109
:02/08/13 22:25
>>674
ありがと。
因みに「VimでTABを押したような補完」ってどんな感じ?
696 :
名無しさん@お腹いっぱい。
:02/08/13 23:01
setopt menucompleすればわかるが、 tabを押せば、最初の候補がえらばれて、もう1回おせば、次のが選ばれて、 まあtabを押す回数がへってらくです。
697 :
109
:02/08/13 23:05
>>696
あ、本当だ。ありがとう。
698 :
名無しさん@お腹いっぱい。
:02/08/14 01:40
promptで曜日を表示させたいけどcshで使ってた%dは
$PWD扱いになってしまいます。
ttp://zsh.sunsite.dk/Doc/Release/zsh_12.html#SEC39
みてもイマイチ分からないんですがどうやればよいですか?
699 :
名無しさん@お腹いっぱい。
:02/08/14 08:00
たとえば %D{%y/%m/%d(%a) は 2002/08/14(Wed) などと変換される。
マニュアルにあるように詳しくは man 3 strftime
700 :
名無しさん@お腹いっぱい。
:02/08/14 08:02
コピーする箇所を間違った。それは %y じゃなくて %Y のときね
701 :
698
:02/08/14 10:19
>699, >700
700 おめでとう & ありがとうございます。
これで
WEEKDAY=`date|awk '{print $4}'`; export WEEKDAY
なんてやらなくてもすむ。
702 :
698
:02/08/14 10:31
ネタじゃ無いけど今見たらUNIX USRES 6月号の
Zshマスターにのってました。
逝ってきマース。
703 :
名無しさん@お腹いっぱい。
:02/08/15 02:37
4.0.6 リリース age
704 :
名無しさん@お腹いっぱい。
:02/08/15 02:47
http://tmp.2ch.net/test/read.cgi/ihou/1028114616/
ここのポン中一家ってゆう奴ら 犯罪を誘発するような発言をずっとしてます。
どうかこうゆうやつらには、皆さんの手で社会的制裁を加えてください。
麻薬取締官
http://www.nco.go.jp/email/ncorespons.html
こちらから投稿できます。麻薬の密売情報に対する通報欄ですが、
皆さんの協力があれば、動いてくれると思います。
自己満足でもいいです。とにかく酷いやつらなんです。
このスレではないところでも、麻薬取引していたりしています。
決して、私怨ではありません。良識もった2ちゃんねらーを救うためのことです。
宜しくお願いします。
705 :
名無しさん@お腹いっぱい。
:02/08/15 04:54
>>703
もう出たのかYO!! 速いYO!!
706 :
名無しさん@お腹いっぱい。
:02/08/15 08:47
はやいのはきらわれちゃうzo!
707 :
名無しさん@お腹いっぱい。
:02/08/15 10:52
入れたばかりなのに・・・
次100
最新50
(10:00PM - 03:00AM の間一気に全部は読めません)
read.cgi ver5.26+ (01/10/21-)