web-dev-qa-db-ja.com

bashの!$と!!に相当するものは何ですか魚の殻に?

私は10年ほどbashを使用しており、!$を入力して最後の引数を繰り返すことができることに慣れてきました。

$ mkdir foo
$ cd !$
cd foo

(最後の行は、コマンドの評価結果を示すためにシェルによって出力されます)。同様に私はしばしば次のことをします:

$ make_sandwich
-bash: make_sandwich: Permission denied
$ Sudo !!
Sudo make_sandwich

私は本当に魚のシェルが好きですが、私の筋肉の記憶はかなり確立されています。魚に同等のものはありますか?同じコマンドを使用するように魚を設定できますか?

32
Frank Schmitt

Alt-Up arrow 前のコマンドの最後の引数を提供します。後続のプッシュは、前の引数を循環します。

!!に相当するものは見つかりませんでした。 Up その後 Ctrl-A

27
glenn jackman

須藤!! (またはSudo bang bang)は、私が最もよく使用するコマンドの1つです。私はまだそれが問題ないプレーンな古いbashだけを使っています。魚がそれを正しく実装していないと聞いてすみません。少しグーグルで私はこれを見つけました:

function Sudo
    if test "$argv" = !!
        eval command Sudo $history[1]
    else
        command Sudo $argv
    end
end

ここのスレッドにはさらに多くのオプションがあります: https://github.com/fish-Shell/fish-Shell/issues/288

11
Carrot

私は fish-usersメーリングリスト でこの完璧な答えを見つけました:

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

function fish_user_key_bindings
    bind ! bind_bang
    bind '$' bind_dollar
end

さらなる議論 fishのgithub wikiで

11
glenn jackman

私はあなたと同じ問題があり、oh-my-fishを使用して修正しました(これはfish Shellのプラグインマネージャーです) https://github.com/oh-my-fish/ oh-my-fish 。次のコマンドでインストールできます:

curl -L https://get.oh-my.fish | fish

次に、次のコマンドでプラグインbang-bangをインストールします。

omf install bang-bang 
3
Sidahmed

!!Sudo !!のコンテキストでのみ使用する場合、コマンドにSudoを付加する^s(CTRL + s)へのキーバインディングを定義できます。

function prepend_command
  set -l prepend $argv[1]
  if test -z "$prepend"
    echo "prepend_command needs one argument."
    return 1
  end

  set -l cmd (commandline)
  if test -z "$cmd"
    commandline -r $history[1]
  end

  set -l old_cursor (commandline -C)
  commandline -C 0
  commandline -i "$prepend "
  commandline -C (math $old_cursor + (echo $prepend | wc -c))
end

これにより、Sudo !!の代わりに、コマンドを入力し、入力中にSudoを先頭に追加することができます。

Githubディスカッションでの Ahtiのコメントを参照してください

1
orzechow