0

など、先ほどのコマンドのパラメータをもっと使いやすくする関数を書きたい!:1です。私はbashでこれを達成できることを読みました:

set -o history 
set -o histexpand

では、にアクセスできる zsh 関数を作成するにはどうすればよいでしょう!:1か。

4

1 に答える 1

1

!まず、ZSH スクリプトでは使用できません。

ただし、コマンド ライン履歴にアクセスする方法は他にもあります。

$ echo foobar
foobar
$ fc -l -1
501  echo foobar

もちろん、これはスクリプト内からも機能しません。履歴にアクセスしようとするためです。これは、非対話型 zsh には存在しません。ただし、それを関数に組み込み、.zshrcそこからスクリプトに渡すことができます。

function histaccess ()
{
    lastcmd=$(fc -l -1)
    somescript ${(z)${lastcmd#*  }}
}

を呼び出すhistaccessと、最後のコマンド ラインが取得され ( fc -l -1)、履歴番号が取り除かれ ( ${lastcmd#* })、zsh のように分割され ( ${(z)...})、 に渡されsomescriptます。あなたはさらにsomescript何でもすることができます。スクリプトに ZSH を使用する場合は1、オプションKSH_ARRAYSが設定されていない限り配列は で始まり、履歴の展開はコマンド名である0で始まることに注意してください。!:0

の呼び出しで履歴がいっぱいになるのを避けたい場合はhistaccess、 のキー (たとえばAlt+I) にバインドできます.zshrc

zle -N histaccess
bindkey '^[i' histaccess
于 2014-01-17T14:38:39.157 に答える