Quel est l'équivalent de bash's! $ Et !! dans la coquille de poisson?


30

J'utilise bash depuis une dizaine d'années et je me suis habitué à pouvoir taper! $ Pour répéter le dernier argument, par exemple:

$ mkdir foo
$ cd !$
cd foo

(Cette dernière ligne est imprimée par le shell pour vous dire à quoi votre commande a été évaluée). De même, je fais souvent ce qui suit:

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

J'aime vraiment la coquille de poisson, mais ma mémoire musculaire est assez établie. Y a-t-il un équivalent en poisson? Puis-je configurer fish pour utiliser les mêmes commandes?

Réponses:


26

Alt- Up arrowvous donne le dernier argument de la commande précédente. Les poussées suivantes font défiler les arguments précédents.

Je n'ai pas trouvé d'équivalent satisfaisant !!, sauf Upalors Ctrl-A


11

sudo !! (ou sudo bang bang) est l'une de mes commandes les plus utilisées. J'utilise toujours un vieux bash tout simplement parfait. Désolé d'entendre que le poisson ne l'applique pas correctement. Un peu sur Google et j'ai trouvé ceci:

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

Il y a beaucoup plus d'options sur le fil ici: https://github.com/fish-shell/fish-shell/issues/288


où dois-je entrer ce code? entrer cela dans le poisson, puis "sudo !!" renvoie quelques lignes d'erreur avec "source: Erreur lors de la lecture du fichier '-'"
Benedikt S. Vogler

11

J'ai trouvé cette réponse parfaite sur la liste de diffusion des utilisateurs de poisson :

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

Discussion plus approfondie sur le wiki de Fish's Github


C'est génial! Vous devriez envisager de modifier la première réponse pour inclure ceci ...
user1480704

2
J'ai créé ~/.config/fish/config.fishet collé cela. Cela a très bien fonctionné après le redémarrage du poisson.
Katu

3

J'ai eu le même problème que vous, et j'ai résolu en utilisant oh-my-fish (c'est un gestionnaire de plugins pour le fishshell) https://github.com/oh-my-fish/oh-my-fish . Vous pouvez l'installer avec cette commande:

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

Installez ensuite le plugin bang-bangavec cette commande:

omf install bang-bang 

1

Si vous utilisez !!uniquement dans le contexte de sudo !!, vous pouvez définir un raccourci clavier vers ^s(CTRL + s) qui ajoute sudo à votre commande:

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

Cela permet de taper n'importe quelle commande et d'ajouter sudo tout en tapant ou comme dans votre cas en remplacement de sudo !!

Voir le commentaire de l' Ahti sur la discussion github

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.