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
ããµããŒãããŠããããã§ãã