題 什麼是bash的等價物!$和!!在魚殼?


我已經使用bash十年左右了,並且已經習慣了能夠鍵入!$來重複最後一個參數,例如:

$ mkdir foo
$ cd !$
cd foo

(最後一行由shell打印,告訴您命令評估的內容)。同樣,我經常對以下內容:

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

我真的很喜歡魚殼,但我的肌肉記憶非常穩固。魚中有等同物嗎?我可以配置fish使用相同的命令嗎?


25
2018-02-20 18:34


起源




答案:


Alt鍵 - 向上箭頭 為您提供上一個命令的最後一個參數。隨後推送循環通過先前的參數。

我還沒有找到一個令人滿意的相當於 !!, 除了 向上 然後 按Ctrl - 一個


22
2018-02-20 20:36





sudo !! (或sudo bang bang)是我最常使用的命令之一。我還在使用普通的舊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


10
2018-02-20 18:48



我在哪裡輸入該代碼?進入魚然後“sudo !!”返回一些錯誤行,其中包含“source:讀取文件時出錯” - '“ - Benedikt S. Vogler


我找到了這個完美的答案 魚用戶郵件列表

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

9
2017-07-24 01:50



太棒了!您應該考慮編輯最佳答案以包含此... - user1480704
我建立 ~/.config/fish/config.fish 並粘貼了這個。重啟魚後效果很好。 - Katu


如果你使用 !! 只有在上下文中 sudo !!,你可以定義一個鍵綁定到 ^s (CTRL + s)在你的命令之前加上sudo:

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 sudo !!

Ahti對github討論的評論


1
2018-05-11 11:44





我和你有同樣的問題,我通過使用修復 oh-my-fish   (這是一個插件管理器 fish 貝殼) https://github.com/oh-my-fish/oh-my-fish。您可以使用以下命令安裝它:

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

然後安裝插件 bang-bang 使用此命令:

omf install bang-bang 

1
2018-05-16 14:33