Tự động hoàn thành các từ từ bộ đệm đầu cuối


8

Trong các trình soạn thảo thích vimemacs, người ta có thể sử dụng các phím nóng như C-p(vim) hoặc M-/(emacs) để thực hiện tự động hoàn thành trên từ hiện tại bằng cách sử dụng các từ khác trong cùng bộ đệm.

Có thể đạt được chức năng tương tự trong một vỏ? Nếu tôi thấy một số từ trong đầu ra từ một lệnh trước đó và tôi muốn nhanh chóng tự động hoàn thành nó khi gõ một lệnh khác.

Chỉ cần rõ ràng, một ví dụ:

$ ls
Desktop/  Mail/  music/  osx@  something_with_a_pretty_long_name

$ someth

Từ đây, tôi muốn có thể nhấn một phím nóng và tự động hoàn thành những gì tôi đang gõ something_with_a_pretty_long_name.

EDIT: Bắn. Sử dụng tên tệp là một ví dụ tồi cho những gì tôi đang theo đuổi. Hãy xem xét những điều sau đây, ví dụ thứ hai:

$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened

$ happ

Nơi tôi có thể tự động hoàn thành 'hạnh phúc' thành 'xảy ra' chỉ vì nó xuất hiện trong bộ đệm đầu cuối của tôi. Tôi hy vọng điều này làm rõ những gì tôi sau.


Không trả lời (vì đó là một cú chạm táo bạo): làm thế nào về việc chạy vỏ trong emacs ( M-X shell)? M-/hoạt động như mọi khi và <kbd> Tab </ kbd> chỉ hoạt động cho tên tệp / lệnh.
Alexios

Tôi thực sự đôi khi làm điều này! Đó thực sự là nơi tôi mong muốn có chức năng này trong bất kỳ thiết bị đầu cuối nào. =)
kể từ

Tôi cảm nhận được nỗi đau của bạn. Tôi thích các tính năng bổ sung trong emacs shell, nhưng nó có xu hướng làm phiền tôi quá nhiều để sử dụng cho thời gian kéo dài. Emacs tất nhiên thực hiện điều này ở cấp độ thiết bị đầu cuối, và đó có lẽ là nơi bạn muốn tìm kiếm nó. Và tôi sợ bạn cần một bản vá. Tôi chưa thấy một thiết bị đầu cuối chính (hoặc thích hợp) cung cấp chức năng này.
Alexios

Câu trả lời:


3

Câu trả lời ngắn: Không, không phải với các shell cổ điển như zshhoặc bashthông thường, shell và terminal của bạn là các thực thể khác nhau.

Câu trả lời dài: Có thể. Điều điển hình xảy ra là bạn nhập một lệnh và nhấn Enter- bây giờ shell của bạn rẽ nhánh và thực thi lệnh được chỉ định. Sau đó, shell không biết điều gì đang xảy ra, shell không biết điều gì sẽ được ghi vào thiết bị đầu cuối hoặc chương trình đã thực hiện, nếu nó khởi động các chương trình khác, được ghi vào thiết bị đầu cuối của bạn hoặc bất cứ điều gì.

Có hai giải pháp khả thi cho vấn đề của bạn:

  1. Nắm bắt tất cả đầu ra từ các lệnh đã thực hiện của bạn và sử dụng nó bằng cách nào đó cho mục đích hoàn thành (có thể được thực hiện nhưng có lẽ không nên thực hiện)
  2. Sử dụng một Terminal khác hỗ trợ 'hoàn thành' từ "bộ đệm shell" của bạn.

Một giải pháp cho 2 là ví dụ sử dụng emacs multi-termvà chỉ sử dụng M- /như bạn bình thường sẽ hoàn thành mọi thứ từ thiết bị đầu cuối. Các thiết bị đầu cuối khác có thể cung cấp một giải pháp tương tự.

Nhưng bạn có thực sự cần loại hoàn thành này? ngày nay hoàn thành shell có thể hoàn thành các trang man, lệnh, pids, socket, tùy chọn lệnh, đường dẫn tệp từ các hệ thống từ xa, và nhiều hơn nữa. Điều này có thể đã đủ cho trường hợp sử dụng của bạn hoặc có thể được tăng cường cho vấn đề cụ thể của bạn.


Mặc dù đáng thất vọng, nhưng đây là câu trả lời mà tôi mong đợi. Cảm ơn bạn đã giải thích về việc ngắt kết nối giữa trình vỏ thực thi một lệnh và những thứ diễn ra trong nền không biết đến nó.
noffle


1

Bạn có thể làm điều này với Extrakto sử dụng tmux để thu đầu ra và cho phép bạn chọn mờ với fzf:

thêm


0

Đây có thể không phải là câu trả lời bạn mong đợi, nhưng nó có thể phục vụ một số nhu cầu của bạn.

Bạn có thể sử dụng TAB để tự động hoàn thành lệnh trong $ PATH (hoặc các lệnh nội bộ), vì vậy nếu tên tệp của bạn là tệp thực thi và trong $ PATH, nó sẽ được tự động hoàn thành.

Nếu bạn muốn tự động hoàn thành tên tệp không thể thực thi được, bạn có thể nhập " ." -dot, sau đó khoảng trắng (hoặc bất cứ thứ gì thay cho dấu chấm), sau đó là một phần của tên tệp và TAB. Bằng cách này, bạn sẽ lừa shell để tin rằng bạn đang thực thi một lệnh và đặt tên tệp làm đối số cho lệnh. Nhấn TAB sẽ tự động hoàn thành tên tệp, nhưng có lẽ bạn sẽ phải xóa dấu chấm + dấu cách ở phía trước.

Một khả năng khác là sử dụng tính năng hoàn thành BASH . Điều này có thể tự động hoàn thành nhiều hơn chỉ là tên tệp.


Cảm ơn bạn đã dành thời gian để cố gắng hỗ trợ, nhưng đây không phải là điều tôi đang tìm kiếm. Tôi đã nhận thức được (và thường xuyên sử dụng) hoàn thành tab trong trình bao của mình. Những gì tôi đang theo là một cách để hoàn thành đầu ra thiết bị đầu cuối tùy ý. Tôi đã cập nhật bài viết của mình để mô tả rõ hơn về điều này.
noffle
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.