Làm cách nào để chỉnh sửa các dòng trước đó trong lệnh nhiều dòng trong Bash?


24

Khi nhập một lệnh kéo dài nhiều dòng trong Bash, làm cách nào để chỉnh sửa các dòng trước đó? Tôi là người dùng Linux Mint (Lisa) sử dụng Terminal Gnome.

Ví dụ: giả sử tôi gõ:

$ echo "foo bar
> baz
>

Và sau đó khi tôi sắp gõ dòng thứ ba của lệnh, đột nhiên nhận ra tôi muốn "foo" và "bar" nằm trên các dòng riêng biệt. Làm cách nào để tôi định vị lại con trỏ giữa "foo" và "bar" sao cho tôi có thể nhấn enter và đặt chúng trên các dòng riêng biệt?

(Không dễ như bạn nghĩ. Mũi tên lên không hoạt động, Ctrl-P cũng vậy. Làm ơn, hãy thử trước khi đăng! Cảm ơn!)


Câu trả lời được chấp nhận nói rằng không có giải pháp, nhưng có. Xem bên dưới
cdosborn

Câu trả lời:


16

Điều đó, không may, là đến bash, không đến thiết bị đầu cuối. Lựa chọn của bạn là:

  1. Sử dụng dấu chấm phẩy thay vì dòng mới, mặc dù sau đó bạn không thể di chuyển lên một dòng màn hình mà phải sử dụng các lệnh chuyển động của ký tự hoặc từ. (Nhưng kỳ lạ, zshít nhất là cho phép bạn di chuyển trong một lệnh phức hợp khi chỉnh sửa lịch sử, chỉ cần không thuộc dòng lệnh.) Đôi khi fc(mà ném bạn vào trình soạn thảo của bạn với lệnh trước đó) là cách dễ nhất để xử lý các lệnh ghép.

  2. Nếu bạn đang sử dụng Bash, hãy sử dụng tổ hợp phím sau:

    ctrl x e

    Nó sẽ mở ra lệnh bạn đang làm việc bằng trình soạn thảo văn bản của bạn. Lưu tập tin và thoát. (Tôi đã tìm thấy lệnh trên bản trình bày của Shell Hater .) Người dùng Zsh có phương án này .


1
Trang bash man giải thích cách thay đổi trình soạn thảo nào được sử dụng: edit-and-exec-lệnh (C-xC-e) - Gọi trình soạn thảo trên dòng lệnh hiện tại và thực hiện kết quả dưới dạng lệnh shell. Bash cố gắng gọi $ VISUAL, $ EDITOR và emacs làm biên tập viên, theo thứ tự đó.
Matthew

Có một giải pháp, mà không cần mở trình soạn thảo.
cdosborn

Về mặt kỹ thuật, nó không phải là bash - mà là thư viện "readline" mà bash sử dụng để lấy đầu vào.
Christian Herenz

11

Giải pháp là không bao giờ nhập lệnh cho đến khi đa dòng đúng, chỉ cần gõ: CtrlvCtrlj khi bạn muốn đi đến dòng tiếp theo. Metabđể trở lại một từ.

dung dịch

tín dụng cho câu trả lời của @ rici


4

Đủ vui, Ctrl+Clà những gì bạn đang tìm kiếm.

khi bạn đang trên

$ echo "foo bar
> baz
>

chỉ cần nhấn Ctrl+C(dòng lệnh được chỉnh sửa sẽ tạm dừng) và nhấn Up(lịch sử trước đó). Lời nhắc của bạn sẽ là: (lưu ý sự vắng mặt của>)

$ echo "foo bar
baz

Bây giờ bạn có thể di chuyển xung quanh Left Rightthậm chí thông qua các bước nhảy.

Chỉ có một cách giải quyết, bạn phải ở ký tự cuối cùng để thêm một dòng khác, vì vậy hãy di chuyển xung quanh để chỉnh sửa các dòng hiện có (bắt đầu với Ctrl+A) một báo chí Enter nếu đủ hoặc goto end ( Ctrl+E) để thêm nhiều dòng hơn Enter. Một nhược điểm khác là Ctrl+_(hoàn tác) chỉ khôi phục các thay đổi so với trướcCtrl+C


-2

Sao chép các lệnh và dán chúng vào notepad sau đó định dạng nó từ đó. Sau đó, bạn có thể sao chép các lệnh của bạn trở lại thiết bị đầu cuối.

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.