Який еквівалент баш! $ І !! в рибній оболонці?


30

Я використовую 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) - одна з моїх найбільш часто використовуваних команд. Я все ще використовую просто звичайний старий баш, який має його просто чудово. Вибачте, що риба не реалізує її правильно. Трохи гуглившись, і я виявив це:

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

Тут можна знайти більше варіантів теми: https://github.com/fish-shell/fish-shell/isissue/288


де я повинен ввести цей код? вводячи це в рибу, а потім "судо !!" повертає кілька рядків помилок із "джерелом: Помилка під час читання файлу" - ""
Benedikt S. Vogler

11

Я знайшов цю ідеальну відповідь у списку розсилки для користувачів риб :

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

Подальша дискусія про вікі-гітбук риби


Це неймовірно! Слід розглянути можливість редагування
головної

2
Я це створив ~/.config/fish/config.fishі вставив. Це чудово спрацювало після перезавантаження риби.
Кату

3

У мене була така ж проблема, як і у вас, і я 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

Якщо ви використовуєте !!лише в контексті 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 !!

Дивіться коментар Ахті до дискусії про github

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.