bashの!$および!!と同等のものは何ですか?魚の殻で?


30

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

$ mkdir foo
$ cd !$
cd foo

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

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

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

回答:


26

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

私は満足に相当するものを発見していない!!以外、UpそしてCtrl-A


11

須藤!! (または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


そのコードをどこに入力する必要がありますか?それを魚に入れてから「sudo !!」いくつかのエラーを持つ行を返します「ソース:ファイルの読み取り中にエラーが『 - 』」
ベネディクト・S.フォーグラー

11

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ウィキに関する詳細な議論


それはすごいね!これを含むようにトップアンサーを編集することを検討する必要があります。
user148070416

2
これを作成~/.config/fish/config.fishして貼り付けました。fishを再起動した後、うまく機能しました。
カトゥ

3

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

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

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

omf install bang-bang 

1

!!のコンテキストでのみ使用する場合はsudo !!^sコマンドにsudoを付加するキーバインドを(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のコメントを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.