Что эквивалентно bash's! $ И !! в раковине рыбы?


30

Я использую bash около десяти лет и уже привык набирать! $, Чтобы повторить последний аргумент, например:

$ mkdir foo
$ cd !$
cd foo

(Эта последняя строка печатается оболочкой, чтобы сообщить вам, что ваша команда оценила). Аналогично я часто к следующему:

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

Мне действительно нравятся рыбные раковины, но моя мышечная память довольно устоялась. Есть ли эквивалент в рыбе? Могу ли я настроить fish для использования тех же команд?

Ответы:


26

Alt- Up arrowдает вам последний аргумент из предыдущей команды. Последующие толчки цикла через предыдущие аргументы.

Я не нашел удовлетворительного эквивалента !!, кроме как Upтогда Ctrl-A


11

судо !! (или 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


где я должен ввести этот код? вводя это в рыбу и затем "sudo !!" возвращает строки с ошибкой «source: Ошибка при чтении файла» - «
Benedikt S. Vogler

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

Дальнейшее обсуждение вики на github


Это замечательно! Вы должны отредактировать верхний ответ, чтобы включить это ...
user1480704

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.