Qual è l'equivalente di bash's! $ E !! nel guscio di pesce?


30

Sto usando bash da circa un decennio e mi sono abituato a scrivere! $ Per ripetere l'ultimo argomento, ad esempio:

$ mkdir foo
$ cd !$
cd foo

(L'ultima riga è stampata dalla shell per dirti in cosa è stato valutato il tuo comando). Allo stesso modo spesso per quanto segue:

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

Mi piace molto il guscio di pesce, ma la mia memoria muscolare è piuttosto consolidata. Esiste un equivalente nei pesci? Posso configurare fish per usare gli stessi comandi?

Risposte:


26

Alt- Up arrowti dà l'ultimo argomento del comando precedente. Le spinte successive passano attraverso argomenti precedenti.

Non ho trovato un equivalente soddisfacente di !!, tranne Upallora Ctrl-A


11

sudo !! (o sudo bang bang) è uno dei miei comandi più usati. Sto ancora usando solo la vecchia bash che ha ragione. Mi dispiace sapere che fish non lo implementa correttamente. Un po 'googling e ho trovato questo:

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

Ci sono molte più opzioni sul thread qui: https://github.com/fish-shell/fish-shell/issues/288


dove devo inserire quel codice? inserendolo nel pesce e poi "sudo !!" restituisce alcune righe di errore con "source: errore durante la lettura del file '-'"
Benedikt S. Vogler

11

Ho trovato questa risposta perfetta sulla mailing list degli utenti di pesce :

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

Ulteriori discussioni sul wiki di github dei pesci


Questo è impressionante! Dovresti considerare di modificare la risposta principale per includere questo ...
user1480704

2
Ho creato ~/.config/fish/config.fishe incollato questo. Ha funzionato alla grande dopo aver riavviato il pesce.
Katu,

3

Ho avuto lo stesso problema, e ho risolto usando oh-my-fish (è un gestore plugin per fishshell) https://github.com/oh-my-fish/oh-my-fish . Puoi installarlo con questo comando:

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

Quindi installare il plug-in bang-bangcon questo comando:

omf install bang-bang 

1

Se lo usi !!solo nel contesto di sudo !!, puoi definire un keybinding a ^s(CTRL + s) che antepone sudo al tuo comando:

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

Ciò consente di digitare qualsiasi comando e anteporre sudo durante la digitazione o simili nel proprio caso come sostituzione di sudo !!

Vedi il commento di Ahti sulla discussione su github

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.