Apa yang setara dengan bash's! $ And !! di kulit ikan?

30

Saya telah menggunakan bash selama sekitar satu dekade dan telah terbiasa mengetik $ untuk mengulangi argumen terakhir, misalnya:

$ mkdir foo
$ cd !$
cd foo

(Baris terakhir itu dicetak oleh shell untuk memberi tahu Anda apa yang dievaluasi oleh perintah Anda). Demikian juga saya sering ke yang berikut:

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

Saya sangat menyukai cangkang ikan, tetapi memori otot saya cukup mapan. Apakah ada yang setara dengan ikan? Bisakah saya mengonfigurasi ikan untuk menggunakan perintah yang sama?

Frank Schmitt
sumber

Jawaban:

26

Alt- Up arrowmemberi Anda argumen terakhir dari perintah sebelumnya. Selanjutnya mendorong siklus melalui argumen sebelumnya.

Saya belum menemukan yang setara dengan !!, kecuali Upitu Ctrl-A

glenn jackman
sumber
11

sudo !! (atau sudo bang bang) adalah salah satu perintah saya yang paling sering digunakan. Saya masih menggunakan bash tua biasa yang sudah baik-baik saja. Maaf mendengar bahwa ikan tidak menerapkannya dengan benar. Sedikit googling dan saya menemukan ini:

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

Ada lebih banyak opsi di utas di sini: https://github.com/fish-shell/fish-shell/issues/288

Wortel
sumber
di mana saya harus memasukkan kode itu? memasukkan itu ke dalam ikan dan kemudian "sudo !!" mengembalikan beberapa baris kesalahan dengan "sumber: Kesalahan saat membaca file '-'"
Benedikt S. Vogler
11

Saya menemukan jawaban sempurna ini di milis pengguna ikan :

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

Diskusi lebih lanjut tentang wiki github ikan

glenn jackman
sumber
Itu mengagumkan! Anda harus mempertimbangkan untuk mengedit jawaban atas untuk memasukkan ini ...
user1480704
2
Saya membuat ~/.config/fish/config.fishdan menempelkan ini. Ini bekerja dengan baik setelah memulai kembali ikan.
Katu
3

Saya memiliki masalah yang sama dengan Anda, dan saya memperbaikinya dengan menggunakan oh-my-fish (ini adalah plugin manager untuk fishshell) https://github.com/oh-my-fish/oh-my-fish . Anda dapat menginstalnya dengan perintah ini:

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

Kemudian instal plugin bang-bangdengan perintah ini:

omf install bang-bang 
Sidahmed
sumber
1

Jika Anda !!hanya menggunakan dalam konteks sudo !!, Anda bisa mendefinisikan keybinding to ^s(CTRL + s) yang menambahkan sudo ke perintah Anda:

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

Ini memungkinkan untuk mengetik perintah apa pun dan menambahkan sudo saat mengetik atau suka dalam kasus Anda sebagai pengganti sudo !!

Lihat komentar Ahti pada diskusi github

orzechow
sumber