Zshã¯ãåªããæ©èœãåããæé«ã®ã³ãã³ãã·ã§ã«ã®1ã€ã§ãã ãã ãã倿°ã®å¯èœæ§ãããããããããã®äžéšã泚æãç¡èŠããããæ¥åžžã®ã¿ã¹ã¯ã解決ããããã®ã¢ããªã±ãŒã·ã§ã³ã®å¯èœæ§ãæããã§ãªãããšã¯é©ãããšã§ã¯ãããŸããã ãã®èšäºã§ã¯ãzshã®ãçµã¿èŸŒã¿ãæ©èœã®ããã€ããšãçæŽ»ã楜ã«ããè€éãªã³ãŒãã®äŸãåãäžããŸãã
1. READNULLCMDã䜿çšãã
READNULLCMD倿°ã¯ãã³ãã³ããå
¥åããã«stdinãªãã€ã¬ã¯ãã䜿çšãããå Žåã«åŒã³åºãããã³ãã³ããå®çŸ©ããŸãïŒ
<file.txt ã ãã®æ¹æ³ã§ã¯ãã¯ããã«å°ãªãæåãå
¥åããããšã§
lessãåŒã³åºãããšãã§ããŸããåã«
READNULLCMD=lessèšå®ããŠ
READNULLCMD=less ã
2.ééãã©ã±ãããæ¿å
¥ããŸã
Vimã®ãããªãšãã£ã¿ãŒã§ã¯ãã¢ããªã³ãå
¥åããããšãã«èªåçã«æ¬åŒ§ãéããããã«ãã䜿çšãããŸãã ã€ãŸã
[ãå
¥åãããšãäžå€®ã«ã«ãŒãœã«ã眮ããŠ
[]ãååŸããŸãã ã·ã§ã«ã§ã¯ããããå¯èœã§ãïŒbashã§ãïŒïŒ
binkey -s "[" $'\Cv[]\C-b'ãããªãã®ã䜿çšããå¿
èŠããããŸãããã®ã³ãã³ãã«çžåœãããã®ã¯.inputrcã«é
眮ããããšãã§ããŸãã zshã®ããæ®éçãªãœãªã¥ãŒã·ã§ã³ã«ã¯ãZLEãŠã£ãžã§ããã®äœ¿çšãå«ãŸããŸãã
insert-double-brackets() { LBUFFER="${LBUFFER}[[ " RBUFFER=" ]]${RBUFFER}" } zle -N insert-double-brackets bindkey ',H' insert-double-brackets
ããã§ãLBUFFER倿°ã«ã¯ã«ãŒãœã«ã®åã®ã³ãã³ãã©ã€ã³å
šäœãå«ãŸããRBUFFER倿°ã«ã¯åŸã®å
šäœãå«ãŸããŸãã 2çªç®ã®ã³ãã³ãã¯ãŠã£ãžã§ãããäœæãã3çªç®ã¯ãŠã£ãžã§ãããçµã¿åãã
,Hå²ãåœãŠãŸãããããã£ãŠãinput
,Hã¯ã«ãŒãœã«ãäžå€®ã«ãã
[[ ]]å€ãããŸãã
3.ã°ããŒãã«ãšã€ãªã¢ã¹
ãããããã·ã§ã«ã§ãšã€ãªã¢ã¹ãäœã§ããããç¥ã£ãŠããã§ããããããããã
alias hp='hg push'ãããªãã®ã䜿çšããã§ãããã zshã®ãšã€ãªã¢ã¹ã«ã¯2ã€ã®è¿œå æ©èœããããŸãïŒãããã ãµãã£ãã¯ã¹ãšã€ãªã¢ã¹ãããã°ã©ã ãå
¥åããã«ãã¡ã€ã«ãèªåçã«éãããšãã§ããŸãïŒäŸïŒ
alias -s txt=vimã¯
foo.txtã
vim foo.txt倿ããŸãïŒã ç§ã¯åè
ã䜿çšããããšããªããåŸè
ã¯éåžžã«äŸ¿å©ã ãšæããŸããã
ã°ããŒãã«ãšã€ãªã¢ã¹ã¯ãç¬ç«ããåèªãç¬èªã®æå³ã«çœ®ãæããããã«äœ¿çšãããŸãã æ¥å°ŸèŸãéåžžã®ãšã€ãªã¢ã¹ãšã¯ç°ãªãã眮æãããåèªã¯ã³ãã³ãã®äœçœ®ã«ããå¿
èŠã¯ãããŸããïŒã€ãŸããã³ãã³ãã©ã€ã³ã®æåã®åèªããŸãã¯ã³ãã³ãã»ãã¬ãŒã¿ã®åŸã®æåã®åèªïŒã ãšã€ãªã¢ã¹ã¯ã¡ã€ã³ããŒãµãŒãæ©èœããåã«åŠçããããããã°ããŒãã«ãšã€ãªã¢ã¹ã«ã¯ããªãã€ã¬ã¯ãã
if ãã³ãã³ãã»ãã¬ãŒã¿ãŒãªã©ããã¹ãŠãå«ããããšãã§ããŸãã
ç§ã®èгç¹ããã¯ãããŸããŸãªã¿ã€ãã®ãªãã€ã¬ã¯ããæã䟿å©ã§ãã
alias -g NN='&>/dev/null' alias -g L='|less' alias -g G='|grep'
ãã®äŸã§ã¯ã3ã€ã®ãšã€ãªã¢ã¹ãå®çŸ©ãããŠããŸãã1ã€ã¯ã³ãã³ãã«ã€ããŠãµã€ã¬ã³ãã§ããã1ã€ã¯lessã䜿çšããŠã³ãã³ãã®åºåã衚瀺ãã3ã€ç®ã¯å
¥åããã£ã«ã¿ãŒããŸãã 䜿çšäŸïŒ
hg cat -r default file.csv G 42 Læžãã®
hg cat -r default file.csv G 42 L ã
hg cat -r default file.csv | grep 42 | less hg cat -r default file.csv G 42 Låç
hg cat -r default file.csv | grep 42 | less hg cat -r default file.csv | grep 42 | less hg cat -r default file.csv | grep 42 | lessããã¯ããã«çãã
Gã³ãã³ããå
¥åã«éä¿¡ããã«ã¯ããšã¹ã±ãŒãã䜿çšããå¿
èŠããããŸãïŒ
\GãŸãã¯
'G' ã
\Gãš
'G'ãåèªã圢æãããããã«
alias -g "'G'=|grep"ãååšããå¯èœæ§ãããããšã«æ³šæããŠãã ããïŒ
alias -g "'G'=|grep" ãããã䜿çšããªãããã«æ°ãã€ããŠãã ããäºå®ã
ãã®äŸ¿å©ãã«ãããããããzshã®ããã€ãã®æ©èœã«ãããã°ããŒãã«ãšã€ãªã¢ã¹ã¯zshã¢ããªã³ãå°ç¡ãã«ããå¯èœæ§ããããããéåžžã«å±éºã§ãã ããäŸã§ã¯ã
L)ãšãã圢åŒã®æ¡ä»¶ãããã¹ã¯ãªãããèŠãŸãããããŸã£ããç°ãªãæ¡ä»¶ãžã®å€æã®ããã«æ©èœããŸããã§ããã ãããã£ãŠãã°ããŒãã«ãšã€ãªã¢ã¹ã¯ããã¹ãŠã®ã¢ããªã³ãæ¢ã«ããŠã³ããŒãããåŸãææ°ã®ãã®ã«ãã£ãŠæ±ºå®ãããå¿
èŠããããŸãã å®çŸ©åŸã«ã¢ããªã³ãããŠã³ããŒãããã«ã¯ã
ALIASESèšå®ãç¡å¹ã«
ALIASESãŸããæ¬¡ã®ãããªãã®ã䜿çšããŸã
source() { setopt localoptions setopt noaliases builtin source "${@[@]}" } .() { setopt localoptions setopt noaliases builtin . "${@[@]}" }
ãããã£ãŠãã¢ããªã³ãããŠã³ããŒãããããã®åãªãã·ã§ã³ã«ã€ããŠã¯ïŒ
sourceãš
.ã«å ããŠãå°ãªããšããã®ãããªæ©èœã®æå¹æ§ã«ã€ããŠã¯
autoloadããããŸãã ãã ããã°ããŒãã«ãšã€ãªã¢ã¹ã¯å¯Ÿè©±åã»ãã·ã§ã³ã§ã®ã¿å±éºã§ããã
#!/bin/zshã䜿çšããã¹ã¯ãªããã¯åœ±é¿ãåããŸããã
4.端æ«èšå®ãè¿ã
cat /bin/test ïŒããæ£ç¢ºã«ã¯
cat any-binary-file ïŒãäœæãããšãããŸããŸãªå¥åŠãªå¹æãåŸãããããšã¯èª°ã«ãšã£ãŠãç§å¯ã§ã¯ãããŸãããããšãã°ãå
¥åããæåã®äžéšãã°ã©ãã£ãã¯ã¹æç»çšã®æåã«çœ®ãæããŸãã ã»ãšãã©ã®å¹æã¯ç²ç®çã«
echo $'\ec'æžãããšã§é€å»ãããŸãããããã¯èªååããããã®ã§ãã ããã¯
precmdã¯ããã«åœ¹ç«ã¡ãã·ã§ã«ã衚瀺ãããçŽåã«é¢æ°ãå®è¡ã§ããŸãã ã¿ãŒããã«ã«èª€ã£ãŠãã€ããªãã¡ã€ã«ãåºåãããããšãã£ã¿ãŒïŒVimïŒãã¯ã©ãã·ã¥ããããã¯ã€ã³ãèµ·åããå Žåã«äœããã®åé¡ãçºçããïŒäœããã®çç±ã§å
¥åã¢ãŒãïŒããŒããŒãéä¿¡ã¢ãŒãïŒãåãæ¿ãããè¿ãããªãïŒïŒã°ã©ãã£ãã¯æåéåžžã代æ¿ç»é¢ãã¡ã€ã³ç»é¢ã«ãªãïŒ=ã¹ã¯ããŒã«ããã¯ïŒå
¥åå±¥æŽïŒã¯ãããŸããïŒãç¢å°ãæ£åžžã«æ©èœããªããªãïŒããŒããŒãéä¿¡ãããã«ããŒã¯ãããŸããïŒãã«ãŒãœã«ã¯è¡šç€ºãããŸããã ãããã解決ããããã«ã次ã®é¢æ°ãäœæãããŸããã
_echoti() { emulate -L zsh (( ${+terminfo[$1]} )) && echoti $1 } term_reset() { emulate -L zsh [[ -n $TTY ]] && (( $+terminfo )) && { _echoti rmacs # _echoti sgr0 # _echoti cnorm # _echoti smkx # «keyboard transmit mode» echo -n $'\e[?47l' # alternate screen # See https://github.com/fish-shell/fish-shell/issues/2139 for smkx } } zmodload zsh/terminfo && precmd_functions+=( term_reset ) ttyctl -f
ã å°å
¥åŸã
echo $'\ec'ãšå
¥åããå¿
èŠã¯ã»ãšãã©ãããŸããã
ttyctl -fã«ã泚æããŠãã ããããã®çµã¿èŸŒã¿ã®zshæ©èœã¯ã端æ«èšå®ãžã®å€æŽããããã¯ããŸããç¹å¥ãªã·ãŒã±ã³ã¹ïŒãšã¹ã±ãŒãã·ãŒã±ã³ã¹ïŒã䜿çšããŠèšå®ã§ããèšå®ã§ã¯ãªãã
sttyã䜿çšããŠèšå®ãããŸãã
5. zmv颿°
è€æ°ã®ãã¡ã€ã«ã®ååãèªåçã«å€æŽããããã«ãrenameã³ãã³ãã«ééããå¯èœæ§ããããŸãã perlã§èšè¿°ããã
Cã§èšè¿°ããã
ããªã¢ã³ãã® 2ã€ã®ã³ããŒã«ãååšããŸã
ã Zshã«ã¯äŒŒããããªæ©èœããããŸããããã匷åã§ãããŸãããã®æ¹æ³ã§ãã¡ã€ã«ãã³ããŒããããåã«
mvããã«åãåã代ããã«
hg mvãå®è¡ã§ããŸãã 第äºã«ã
noglob zmv -W *.c *.cppãããªãçŽæçãªããªãã·ã§ã³ã䜿çšã§ããŸãïŒ
noglobãåãé€ãã«ã¯ã
alias䜿çšããŸã;ãããªãäŸã§
noglob ã
noglobæç€ºãããŸãïŒã Zmvã¯æ£èŠè¡šçŸã䜿çšããŸããããglobã¿ã¹ã¯ã«ããé©ãã衚çŸã䜿çšããŸãã 2çªç®ã®åŒæ°ãšããŠäºå®äžä»»æã®åŒã䜿çšããããšãã§ããŸãïŒ
zmv -w test_*.c 'test/${1/_foo/_bar}'ã¯
test_foo_1.cã
test_bar_1.cãŸãã ããã§ã圢åŒ
$Nãã©ã¡ãŒã¿ãŒã¯ãæ£èŠè¡šçŸããããã£ããã£ãŒã°ã«ãŒããã®é¡äŒŒç©ãžã®ã¢ã¯ã»ã¹ãæäŸãã
-wã¯
test_*.cã
test_(*).c倿ã
test_(*).cãã¹ãŠã®åŒæ°ïŒ
-f ïŒã¿ãŒã²ãããã¡ã€ã«ãç¡èŠããŸãã ã€ãŸã test.cppãã¡ã€ã«ãååšããå Žåã zmv -W *.c *.cppã³ãã³ãã¯ããã¡ã€ã«éã«test.cãããå Žåããã¡ã€ã«ã®ç§»åãæåŠããŸãã -fã¯ãzmvã«ããã匷å¶ããŸããã -fåŒæ°ãmvæž¡ããŸããã-i ïŒåç§»åã®åã«å¿
èŠæ§ãæç¢ºã«ããŸãã è¯å®çãªçããåŸãã«ã¯ã yãŸãã¯YãæŒãå¿
èŠããããŸãã倱æããå Žåã¯ãä»ã®äœããæŒãå¿
èŠããããŸãã æ³šæïŒ yãŸãã¯Y ã®ã¿ãæŒããŠãã ããY EnterããŒãæŒãå¿
èŠã¯ãããŸãããæ¬¡ã®ãã¡ã€ã«ã®å€±æãšããŠèªèãããŸãã-n ïŒzmvãå®éã«å®è¡ããã«å®è¡ãããã¹ãŠã®ã³ãã³ããåºåããŸãã-Q ïŒglob修食åãæå¹ã«ããŸãã glob修食åã¯ãã£ããã£ã°ã«ãŒããšæ··åãããããããããã©ã«ãã§ã¯ç¡å¹ã«ãªã£ãŠããŸãã ã°ãã修食åã¯ãçµæãæç¢ºã«ããã°ããã®äžéšã§ãããœãŒãé åºã決å®ãã修食åã1ã€ã®ã°ããã®èšå®ãæå¹ã«ãã修食åãããã³ãã·ã³ããªãã¯ãªã³ã¯ã®ã¿ãéãããªã©ã®ãããã®ç¶æ³ã§æãæçšãªãã£ã«ã¿ãŒããããŸãã-s ïŒ -sãªãã·ã§ã³åŒæ°ãã³ãã³ãã«-sãŸãã -LãŸãã¯zmvã§ã¯ãªãzmvåçã®äœ¿çšãšçµã¿åãããŠäœ¿çšââããŸãã-v ïŒå®è¡å¯èœãªã³ãã³ããå®è¡æã«åºåããŸãã-o arg ïŒã³ãã³ãã«è¿œå ã®åŒæ°ãæå®ããŸãã ãããã£ãŠã zmv -o--foreåŒæ°ãmvã«æž¡ãã«ã¯ã zmv -o--foreã䜿çšããå¿
èŠããããŸãã äžåºŠã ã䜿çšã§ããŸãã-p prog ïŒmvã®ä»£ããã«ãã®ããã°ã©ã ã䜿çšããŸãã ããŒã ã¯çè§£ããå¿
èŠããããŸãïŒ prog -- source targetãšããŠå®è¡ãããŸãã-P prog ïŒåã®åŒæ°ã«äŒŒãŠããŸãããçè§£ã§ããªãã³ãã³ãçšã§ã-- ã ããã°ã©ã ã¯prog source targetãšããŠåŒã³åºãããŸãã-w ïŒäžèšã®ããã«ããã¹ãŠã®ã¯ã€ã«ãã«ãŒãã®ãã£ããã£ã°ã«ãŒããèªåçã«è¿œå ããŸãã-W ïŒåã®åŒæ°ãšåãã§ãããã°ã«ãŒãããã£ããã£ããããã«äœæããã$Nãã©ã¡ãŒã¿ãŒã¯ãæ£ããåŒæ°ã®ã¯ã€ã«ãã«ãŒãã«èªåçã«äœ¿çšãããŸãã-C ã -L ãããã³-M ïŒ -pcp ã -pln ãããã³-pmvãããã䌌ãŠããŸãïŒé¢æ°åã«é¢ä¿ãªããã³ããŒãã·ã³ããªãã¯ãªã³ã¯ã®äœæããŸãã¯ç§»åã䜿çšã§ããŸãïŒããã©ã«ãã§ã¯ãzmvãšåãã³ãŒãã䜿çšãã2ã€ã®è¿œå 颿°ããããŸãïŒzcpããã³zlnïŒã
6.åå¹ãèªåçã«èŠã€ããŠmpvãéå§
ãã¬ã³ãããå€éšåå¹ä»ãã®ãã¬ãçªçµãããŠã³ããŒãããããšãããå Žåãããããã¢ããããŒãããå人ãåå¹ã®å Žæã«ã€ããŠèªåã®æèŠãæã£ãŠããããšã«ééããªãæ°ä»ãã§ãããã äž»ãªãªãã·ã§ã³ã¯2ã€ãããŸããèªåã®ãã£ã¬ã¯ããªãšãããªã®ããé£ã«ãããŸããããç¬èªã®ãã£ã¬ã¯ããªãã®äžã§ã¯ããã£ã¬ã¯ããªã®ååã¯ãã¹ãŠé ãããšãã§ããŸãããŸããããŸããŸãªæ·±ãã®æ·»ä»ãã¡ã€ã«ããããŸãããsubs {sub group}ãããsubtitles {sub group}ã ããSubs / {sub group}ããããã«ã¯ã{sub group}ãã§ãã 远å ã®åé¡ã¯ãåå¹ãšãšãã«éæšæºã®ãã©ã³ãã䜿çšããåå¹ãšãšãã«é
åžããããšã§ãã
åå¹ãéžæããŠæ£ãããã©ã³ãã䜿çšããã«ã¯ãããŸããŸãªæ¹æ³ã䜿çšã§ããŸãã ã»ãšãã©ãã¹ãŠã®å Žåã«é©åãªãžã§ããèªåçã«å®è¡ãã颿°ãäœæããããšã奜ã¿ãŸããã
aplayer() { emulate -L zsh setopt extendedglob setopt nullglob local -a args args=() local -A mediadirs mediadirs=() for arg in $@ ; do if [[ ${arg[0]} == '-' ]] ; then continue fi if test -f $arg ; then mediadirs[${arg:A:h}]=1 fi done local d local -i found=0 for d in ${(k)mediadirs} ; do local tail=$d:t test -d ~/.fonts/aplayer/${tail}-1 && continue local f for f in $d/**/(#i)font* ; do if test -d $f ; then (( found++ )) ln -s $f ~/.fonts/aplayer/${tail}-${found} elif [[ $f == (#i)*.rar ]] || [[ $f == (#i)*.zip ]] ; then (( found++ )) mkdir ~/.fonts/aplayer/${tail}-${found} pushd -q ~/.fonts/aplayer/${tail}-${found} 7z x $f popd -q fi done done if (( found )) ; then fc-cache -v ~/.fonts fi local -aT subpaths SUBPATHS local -A SUBPATHS_MAP SUBPATHS=( ${(k)^mediadirs}/(#i)*(sub|)*{,/**/*}(/) ) for sp in $SUBPATHS ; do SUBPATHS_MAP[$sp]=1 done local -a subarr for d in ${(k)mediadirs} ; do for subd in $d/**/ ; do if ! test -z $SUBPATHS_MAP[$d] ; then continue fi subarr=( $subd/*.(ass|ssa|srt) ) if (( $#subarr )) ; then SUBPATHS_MAP[$subd]=1 SUBPATHS+=( $subd ) fi done done if (( ${#SUBPATHS} )) ; then args+=(
zshã«é£æ³é
åã®ãããªãã®ãããããšã¯ããã®ãããªé¢æ°ãäœæãããšãã«éåžžã«åœ¹ç«ã¡ãŸãã
ããã§ã颿°ã®æåã®éšåã¯ãã¹ãŠã®åŒæ°ã調ã¹ãŠãmediadirsã®é£æ³é
åã«ããäœåã®ãã£ã¬ã¯ããªãè©°ãŸãããŸãã éè€ãé¿ããããã ãã«çµåãããŸãã
次ã«ããã®æ©èœã¯ãäœåãå«ããã¹ãŠã®ã«ã¿ãã°ã調ã¹ãŠããããã®ãã©ã³ããŸãã¯ã¢ãŒã«ã€ãå
ãŸãã¯ãµããã£ã¬ã¯ããªå
ã«ãããµããã£ã¬ã¯ããªå
ã®ãã©ã³ããæ€çŽ¢ããŸãã ãã©ã³ãã¯ç¹æ§åïŒååã®å
é ã«ãã
fontã®ååšïŒã«ãã£ãŠèå¥ãããŸã
setopt nullglob䜿çšãããšã
fontãååšããªãããšãå¿é
ããå¿
èŠããããŸããïŒããã©ã«ãã§ã¯ãååšããªããšãšã©ãŒãçºçããŸãïŒã
setopt extendedglobãš
(#i)çµã¿åãããŠäœ¿çšââãããšã
setopt extendedglobã
setopt extendedglobããã«æžã¿ãŸãã
(#i)ãã©ã³ãã
FONTSãã£ã¬ã¯ããªãš
Fontsäž¡æ¹ã«é
眮ã§ããŸãã
~/.fontsãã©ã³ããèŠã€ããŠã€ã³ã¹ããŒã«ããåŸ
~/.fontsã€ã³ããã¯ã¹ã¯
fc-cacheã䜿çšããŠæŽæ°ãããŸãããã以å€ã®å Žåãæ£ãããã£ã¬ã¯ããªã«ã³ããŒããããã©ã³ãã䜿çšãããŸããã
${(k)ASSOCIATIVE_ARRAY}ã¯ã飿³é
åãããŒã®åçŽãªé
åã«å€æããŸãã
3çªç®ã®ãµã€ã¯ã«ã§ã¯ãåå¹ä»ãã®ãã£ã¬ã¯ããªãæ€åºããããsubsãããsubtitlesããªã©ã®ãåçŽãªãååãæã€é£æ³é
åã«ããã蟌ãŸããŸãã ç¹°ãè¿ããŸããã倧æåãšå°æåãåºå¥ãããæåŸã«åå¥ã«
(/)ã䜿çšããŠãglobããã£ã¬ã¯ããªã®ã¿ã«å¶éããŸãïŒglob修食åã®äŸïŒã
${^array}䜿çšããŠã
array=( abc ); echo ${^array}* array=( abc ); echo ${^array}*ã¯
echo {a,b,c}*ãšåçã§ããã
æåŸã®ãµã€ã¯ã«ã§ã¯ãéæšæºã®æ¹æ³ãšåŒã°ããåå¹ä»ãã®ãã£ã¬ã¯ããªãèŠã€ããŸãã åå¹ãã£ã¬ã¯ããªã¯ãæ¡åŒµåã
ass ã
srtãŸãã¯
srtãã¡ã€ã«ãå°ãªããšã1ã€å«ãïŒãããªã®ãããã£ã¬ã¯ããªã«é¢é£ããïŒä»»æã®ãµããã£ã¬ã¯ããª
srt ã
ããªãå¥åŠãªã³ãŒããããããšã«æ³šæããŠãã ããïŒèª°ã
subpaths倿°ã«è§ŠããŠããªãããã§ããããã®å€ã¯åŒæ°
--sub-pathsãšããŠäœ¿çšãã
--sub-paths ã å®éãå€ã®é
åïŒéåžžã¯ãã£ã¬ã¯ããªïŒãç°ãªãå€ãåºåãæåïŒéåžžã¯ã³ãã³ïŒã§åºåãããåçŽãªæååã§ããå Žåãzshã¯ããªãé »ç¹ã«ãã¿ãŒã³ãèšé²ããŸã
PATH倿°ã¯ãã®ãããªãé
åãã®äŸã§ãã ãã ããããã°ã©ãã¯é
åãšåãããã«ãã®ãããªé
åãæäœããã®ã䟿å©ãªã®ã§ã倿°ã®1ã€ãé
åïŒäŸïŒ
path ïŒã§ãããæå®ãããïŒããã©ã«ãã®ã³ãã³ïŒã»ãã¬ãŒã¿ïŒäŸïŒ
PATH ïŒ ãäžæ¹ã®å€æ°ã®å€æŽã仿¹ã«èªåçã«åæ ãããŸãã ããã¯ã
SUBPATHSé
åã
subpathsæååã«é¢é£ä»ãããã
subpathsã§ãã
7.åŒæ°ã®èªåã¹ã¯ãªãŒãã³ã°ã䜿çšããã³ãã³ãã®äœæ
äžéšã®ã³ãã³ãã®åŒæ°ã¯æ±ºããŠãã¡ã€ã«ã§ã¯ãããŸããã ãã ãããã®äºå®ã¯zshããã³ãã¬ãŒããå±éããã®ãæ¢ããŸããã éåžžã®å Žåã
alias mycmd='noglob mycmd'ãæžãã ãã§ã
mycmd *.fooã¯
mycmd '*.foo'ãšåçã«ãªããŸãã ããããå
¥åãæåéã
$VARã«éä¿¡ãã
'$VAR'ãæžããããªãããŒã ãäœæããå Žåã¯ã©ãã§ããããã ããã§ã
zpy import zsh; print(zsh.getvalue("PATH"))ãèšé²ããã³ãŒãã®äŸã
zpy import zsh; print(zsh.getvalue("PATH")) zpy import zsh; print(zsh.getvalue("PATH")) ã
zpython 'import zsh; print(zsh.getvalue("PATH"))'ãšåç
zpython 'import zsh; print(zsh.getvalue("PATH"))' zpython 'import zsh; print(zsh.getvalue("PATH"))' ; ãã¡ããã察話ã¢ãŒãã§ã®ã¿ïŒ
zshaddhistory() { emulate -L zsh if (( ${+_HISTLINE} && ${#_HISTLINE} )) ; then print -sr -- "${_HISTLINE}" unset _HISTLINE elif (( ${#1} )) ; then print -sr -- "${1%%$'\n'}" fi fc -p } accept-line() { emulate -L zsh if [[ ${BUFFER[1,4]} == "zpy " ]] ; then _HISTLINE=$BUFFER BUFFER="zpython ${(qqq)BUFFER[5,-1]}" fi zle .accept-line } zle -N accept-line
颿°ã®äž»èŠéšåïŒãŠã£ãžã§ããaccept-lineãåŒã³åºããšãïŒEnterãæŒããšåŒã³åºãããŸãïŒãè¡ã
zpyã§å§ãŸããã©ãããå€å¥ãããããã§ããã°ãè¡ã¯
zpython âŠã«çœ®ãæããã
zpython ⊠ãããã§
âŠã¯ã
zpyããã³spaceã®åŸã®è¡ã®ãšã¹ã±ãŒãéšåã§ãã
zshaddhistory颿°
zshaddhistory䜿çšããŠããœãŒã¹æåå
zshaddhistory眮æã§ã¯ãªãå±¥æŽã«
zshaddhistoryãããããã«ããŸãã
ãã®ããã«ããŠãä»»æã®ã«ã¹ã¿ã æ§æãzshã«è¿œå ã§ããŸãã
8.ã°ããŒãããã®èªåãã¡ã€ã«é€å€
Vimãšãã£ã¿ãŒããããããã䜿çšããŠãã£ã¬ã¯ããªãŒãããã¹ãŠã®ãã¡ã€ã«ãéãããšãæ³åããŠãã ããïŒ
*ãã³ãã¬ãŒãã䜿çšïŒã ãããããã£ã¬ã¯ããªå
ã®åçŽãªããã¹ããã¡ã€ã«ã«å ããŠã
*.o ïŒãªããžã§ã¯ãïŒãã¡ã€ã«ã®ãããªå€ãã®ãã€ããªãéããŸãã ãããè¡ãã«ã¯ãåãªãã¢ã¹ã¿ãªã¹ã¯ã®ä»£ããã«ãå¿
èŠãªãã¡ã€ã«ã«å¯Ÿå¿ããããã€ãã®ãã³ãã¬ãŒããäœæã§ããŸãã ãŸãã¯ãäŸå€ãã¿ãŒã³ã䜿çšããŸãïŒ
*~*.o ã
setopt extendedglobãå¿
èŠ
setopt extendedglob ïŒã ããããæ¯èŒçç°¡åãªããªãã¯ã§ãããã¯èªååã§ããŸãïŒ
filterglob () { local -r exclude_pat="$2" shift local -r cmd="$1" shift local -a args args=( "${@[@]}" ) local -a new_args local -i expandedglobs=0 local first_unexpanded_glob= for ((I=1; I<=$#args; I++ )) do if [[ $args[I] != ${${args[I]}/[*?]} ]] then local initial_arg=${args[I]} args[I]+="~$exclude_pat(N)" new_args=( $~args[I] ) if (( $#new_args )) ; then expandedglobs=1 else if [[ $options[cshnullglob] == off && $options[nullglob] == off ]] ; then if [[ $options[nomatch] == on ]] ; then : ${~${args[I]%\(N\)}} # Will error out. else new_args=( "$initial_arg" ) fi fi if [[ -z $first_unexpanded_glob ]] ; then first_unexpanded_glob=${args[I]%\(N\)} readonly first_unexpanded_glob fi fi args[I,I]=( "${new_args[@]}" ) (( I += $#new_args - 1 )) fi done if [[ $options[cshnullglob] == on && $options[nullglob] == off ]] ; then if (( !expandedglob )) ; then : $~first_unexpanded_glob # Will error out. fi fi "$cmd" "${args[@]}" } alias vim='noglob filterglob "*.o" vim'
ããã¯ãšã€ãªã¢ã¹ãå®çŸ©ãããŠããå Žæã§ãzshïŒnoglobïŒããã³ãã¬ãŒãèªäœãå±éããã®ãé²ããŸããã颿°ã䜿çšããŠãã³ãã¬ãŒãèªäœïŒfilterglobïŒãå±éããvimãéããŸãã ããããããã¯åã«ããããéãã ãã§ãªãã
vim *ã
vim *~*.oããã«æ©èœããããã«ãã¿ãŒã³äŸå€ãä»ããŠããã宿ãããŸãã
ãã®é¢æ°ã¯ãzshã®æ¬¡ã®æ©èœã䜿çšããŸãã
${~var} ãvar
${~var}ã¯ãzshã«
var倿°ã®å€ã«é¢ããŠãã³ãã¬ãŒãå±éã䜿çšããã倿°èªäœã®ä»£ããã«ãã³ãã¬ãŒãå±éã®çµæã眮ãæããŸãã
array[idx1,idx2]=( $new_array )ã¯ã
idx1ãã
idx2ãŸã§ã®é
åã®äžéšãåé€ããåé€ãããèŠçŽ ã®ä»£ããã«
new_arrayé
åã®å€ãæ¿å
¥ããŸãã
arrayã®ãµã€ãºã¯å€æŽãããå ŽåããããŸãã æ¬¡ã®åœ¢åŒã®æ§é
: $~varãšã³ã¡ã³ããWill error outãã¯ãzshãæåŸ
ããããšã©ãŒã衚瀺ããããã«å¿
èŠã§ãã ãã®å Žåã颿°ã®å®è¡ã¯å®äºããŸãã
echo ⊠>&2代ããã«ãã®ãªãã·ã§ã³ã䜿çšããç¹å¥ãªçç±ã¯ãããŸããããç§ã®å Žåã¯
always ïŒã€ã³ã¿ã©ã¯ãã£ãã»ãã·ã§ã³ã§ã¯ã»ãšãã©äœ¿çšããªãïŒãšã©ãŒ
alwaysããµããŒãããŠããããã§ãã