2016-04-05 7 views
0

私はzshとbashから来た魚の殻を試しています。私は曖昧に、$_位置パラメータを紛失しており、それを関数で模倣しようとしています。魚の変数を評価する方法

フィッシュのコマンド履歴は$historyの配列になります($history[1]は履歴の前の行、$history[2]は前のものなど)。

私はこの

function \$_ --description 'Fish-patch for the $_ positional parameter' 
    echo $history[1] | awk '{print $NF}' 
end 

のような機能でそれを入れて試してみました。しかし、それはかなりのように動作しません。この変数を評価し、この

ls -al 
echo $history[1] | awk '{print $NF}'   // Prints -al 

のような最後の単語を抽出しようとしています

期待される。 $_を単独で呼び出すと、正常に動作します。

ls -al 
$_  

-alを印刷します。しかし、$_がパラメータとして関数に渡された場合、

ls -al 
echo $_ 

echoを出力します。私はそれがサブシェルまたは何かで評価されている$_関数と関係があると考えています。私は本当に分かりません。

ここで何が間違っていますか? echo $_が期待どおりに機能しないのはなぜですか?

答えて

4

を。ただし、$__または別の文字を使用できます。

最も簡単なオプションは、ちょうどすべてのコマンドの後$__を更新することです:今

function update_last_arg --on-event fish_postexec 
    set -g __ (echo $argv | awk '{print $NF}') 
end 

$__は常に最後の引数が含まれています。

0

魚にはグローバルエイリアスがないためです。 echoに与えた引数は単なる文字列であり、コードとして評価されません。

これを行う必要がありますが、使い勝手が悪くなります。

echo ($_) 

私は(どこか)bashの履歴のような!!!$を実現する方法が見つかりました:$_は最後の前景化作業を含む、読み取り専用の変数で、魚で

function fish_user_key_bindings 
    bind ! bind_bang 
    bind '$' bind_dollar 

    # enable editing command line in editor with Alt+v 
    bind \ev bind_edit_commandline 
end 
function bind_bang 
    switch (commandline -t)[-1] 
    case "!" 
     commandline -t $history[1]; commandline -f repaint 
    case "*" 
     commandline -i ! 
    end 
end 
function bind_dollar 
    switch (commandline -t)[-1] 
    case "!" 
     commandline -t "" 
     commandline -f history-token-search-backward 
    case "*" 
     commandline -i '$' 
    end 
end 
関連する問題