Tách một dòng lệnh nhanh hiện có trong một vài dòng


8

Tôi hiểu rằng tôi có thể gõ \ entervào cuối bashdòng lệnh để tiếp tục lệnh đó trong dòng khác. Nhưng làm thế nào tôi có thể tách một dòng lệnh nhanh chóng - đã được gõ đầy đủ - thành hai?

Ví dụ, làm thế nào tôi có thể ngắt dòng này ngay trước đó thenmà không phải cắt bỏ phần còn lại và gõ lại tất cả?

$ if true; then ls; fi

1
Nếu bạn đang ở một dấu nhắc dòng lệnh tương tác, có bất kỳ lý do cụ thể nào bạn cần làm điều này ngoài việc làm cho lịch sử shell của bạn trông đẹp hơn không? Về mặt chức năng, các dòng mới bổ sung không tạo ra sự khác biệt cho vỏ. Nếu bạn đang gõ một đoạn mã vỏ phức tạp dài, tốt nhất nên sử dụng trình chỉnh sửa. Nhìn vào fclệnh là tốt - nó có sẵn trong gần như tất cả các shell.
jw013

Không đẹp hơn mà chỉ để làm cho các lệnh phức tạp có thể đọc được.
nr

Câu trả lời:


4

Một tự dòng mới là LF (nguồn cấp dữ liệu), còn gọi là Control-J. Nếu bạn nhấn Ctrl+ J, điều này sẽ thực thi lệnh accept-line, giống như Returnphím. Để chèn một ký tự chữ viết theo nghĩa đen, bấm Ctrl+ V Ctrl+ J. Lệnh Ctrl+ V( quoted-insert) chèn ký tự tiếp theo theo nghĩa đen. Do đó, để tách một dòng, bạn có thể nhập \ Ctrl+ V.

Nếu bạn làm điều này thường xuyên, bạn có thể biến nó thành một macro:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'

6

Bạn có thể sử dụng edit-and-execute-command, thường được ánh xạ tới Ctrl+ x+ e, để mở lệnh hiện tại trong trình chỉnh sửa . Khi thoát khỏi trình soạn thảo, lệnh sẽ được chạy.


1
Đẹp - không bao giờ biết điều này. Bạn sẽ cần đảm bảo biến môi trường $ EDITOR của bạn được đặt thành thứ gì đó - Tôi đã thêm vào vimbiến của tôi như vậy : export EDITOR=vim.
slm

1
Làm thế nào tôi có thể hủy bỏ việc thực hiện lệnh khi thoát khỏi trình soạn thảo? Tôi sử dụng :q!hoặc ZQvô ích.
Birei

1
@Birei: Xóa tất cả các dòng sau đó lưu và thoát (ví dụ: ggdG:wqhoặc :%d|wq, v.v.). Lệnh sẽ vẫn còn trong lịch sử (có thể là một bản sao nếu bạn nhớ lại từ mục trước đó), nhưng nó sẽ không được thực thi.
Tạm dừng cho đến khi có thông báo mới.

@DennisWilliamson: Wow !! Gần ba năm sau tôi vẫn chưa giải quyết được vấn đề này, cảm ơn rất nhiều vì giải pháp rất đơn giản và sự đơn giản luôn tốt hơn.
Birei

2

Lưu ý - câu trả lời này cụ thể cho vi và vim

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

Để chỉnh sửa dòng đã nhập hiện tại, nhấn ESC(để vào vihoặc vimchế độ lệnh), sau đó nhập vhoặc vi.

Lưu ý tất cả các lệnh chỉnh sửa vi / vim hoạt động. ví dụ

  • ESC+ A đặt đến cuối dòng đánh máy hiện tại.
  • ESC+ 0 đặt con trỏ ở đầu dòng.

Thông minh. Điều này chắc chắn làm cho việc chỉnh sửa các dòng lệnh dễ dàng hơn nhiều. Nhưng bạn có biết làm thế nào để chèn một ký tự dòng mới mà không cần vào chế độ trực quan?
nr

2
Cảm ơn. CTRL+ vsau đó CTRL+ jđể ném một dòng mới nên hoạt động.
suspectus
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.