Tương đương với bash's! $ Và !! Trong vỏ cá?


27

Tôi đã sử dụng bash trong một thập kỷ hoặc lâu hơn và đã quen với việc có thể gõ! $ Để lặp lại đối số cuối cùng, ví dụ:

$ mkdir foo
$ cd !$
cd foo

(Dòng cuối cùng được in bởi shell để cho bạn biết lệnh của bạn được đánh giá là gì). Tương tự như vậy, tôi thường làm như sau:

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

Tôi thực sự thích vỏ cá, nhưng bộ nhớ cơ bắp của tôi đã được thiết lập. Có tương đương trong cá? Tôi có thể cấu hình cá để sử dụng các lệnh tương tự không?

Câu trả lời:


22

Alt - Mũi tên lên cung cấp cho bạn đối số cuối cùng từ lệnh trước. Sau đó đẩy chu kỳ thông qua các đối số trước.

Tôi chưa tìm thấy một tương đương thỏa đáng với !!, ngoại trừ Lên sau đó Ctrl - Một


11

sudo !! (hoặc sudo bang bang) là một trong những lệnh được sử dụng nhiều nhất của tôi. Tôi vẫn đang sử dụng bash cũ đơn giản mà nó vẫn ổn. Rất tiếc khi biết rằng cá không thực hiện đúng. Một chút googling và tôi tìm thấy điều này:

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

Có rất nhiều tùy chọn hơn về chủ đề ở đây: https://github.com/fish-shell/fish-shell/issues/288


Tôi phải nhập mã đó ở đâu? nhập nó vào cá và sau đó "sudo !!" trả về một số dòng lỗi với "source: Error trong khi đọc tệp '-'"
Benedikt S. Vogler

9

Tôi tìm thấy câu trả lời hoàn hảo này trên danh sách gửi thư của người dùng cá :

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

Điều đó thật tuyệt vời! Bạn nên xem xét chỉnh sửa câu trả lời hàng đầu để bao gồm ...
user1480704

1
Tôi đã tạo ra ~/.config/fish/config.fish và dán cái này. Nó đã làm việc tuyệt vời sau khi khởi động lại cá.
Katu

2

Tôi gặp vấn đề tương tự như bạn và tôi đã khắc phục bằng cách sử dụng oh-my-fish (đó là trình quản lý plugin cho fish vỏ) https://github.com/oh-my-fish/oh-my-fish . Bạn có thể cài đặt nó bằng lệnh này:

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

Sau đó cài đặt plugin bang-bang với lệnh này:

omf install bang-bang 

1

Nếu bạn dùng !! chỉ trong bối cảnh sudo !!, bạn có thể xác định một liên kết phím đến ^s (CTRL + s) bổ sung sudo cho lệnh của bạn:

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

Điều này cho phép nhập bất kỳ lệnh nào và thêm sudo trong khi gõ hoặc thích trong trường hợp của bạn để thay thế sudo !!

Xem Nhận xét của Ahti về cuộc thảo luận github

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.