Tự động hoàn thành cho các lệnh dòng lệnh thường được sử dụng?


15

Đối với một số dự án tôi thường gõ một vài lệnh, ví dụ như:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

./runmyproject --with some --command line --options set

Thấy tôi khá lười biếng, tôi cố gắng tránh gõ những lệnh đó hết lần này đến lần khác. Vì vậy, tất nhiên tôi có thể sử dụng phím lên rất nhiều để tìm lại các lệnh đó, nhưng thông thường, tôi cũng có rất nhiều lệnh ở giữa, việc tìm kiếm nó thậm chí còn mất nhiều thời gian hơn là chỉ gõ nó.

Bây giờ tôi tự hỏi liệu có một loại tiện ích nào đó có thể đề xuất một lệnh đầy đủ mà tôi sử dụng rất nhiều, khi tôi chưa gõ tất cả các tiện ích đó. Ví dụ, vì vậy tôi có thể nhập 'cd an /' và nó đã gợi ý phần còn lại của đường dẫn vì tôi đã sử dụng nó rất nhiều trong tháng qua.

Tôi đã tìm thấy một cái gì đó gọi là Bash Smart Complete. Nhưng đó là một chút "ngớ ngẩn" ở chỗ nó không nhìn vào các lệnh tôi đã sử dụng trước đó. Tôi cũng chỉ tìm thấy câu trả lời SO này , trong đó gợi ý đưa các lệnh tôi sử dụng rất nhiều vào một tệp. Tuy nhiên, điều đó không đủ đáp ứng ở chỗ tôi sẽ cần tạo một tệp mới cho nó mỗi khi tôi bắt đầu các dự án mới hoặc thay đổi thư mục hoặc đối số chương trình.

Có ai biết bất kỳ tiện ích khác hoặc cách khác để đạt được điều này? Hoặc, có ai biết làm thế nào tôi có thể thay đổi Bash Smart Complete để nó có thể xem các lệnh tôi đã sử dụng trong tháng vừa qua và hoàn thành lệnh phù hợp và được sử dụng nhiều nhất trong tháng qua không?

[EDIT] Dưới đây là một số câu trả lời thực sự tuyệt vời. Tôi đã đánh dấu bất kỳ như là một câu trả lời chắc chắn. Không phải vì tôi không thích câu trả lời, tôi làm, nhưng vì không ai trong số họ là người chiến thắng tuyệt đối. Tôi nghĩ rằng Finalterm là một dự án tuyệt vời. Thật không may, nó vẫn còn khá thô xung quanh các cạnh. Ví dụ; nó không hỗ trợ sao chép-dán. Tôi sẽ theo dõi dự án đó, bởi vì khi nó hoàn thiện tôi nghĩ nó sẽ là một ứng dụng đầu cuối tuyệt vời. Đối với các câu trả lời khác; họ hoặc đề nghị tạo một bí danh, đó không phải là điều tôi muốn làm vì nó tạo ra công việc phụ thay vì lấy đi công việc hoặc sử dụng Ctrl + R, một điều tuyệt vời (tôi không biết về điều đó!). Một vài người được đề xuất sử dụng Ctrl + R, vì vậy tôi thực sự không thể làm nổi bật một câu trả lời khác.

Vì vậy, hiện tại tôi chắc chắn đang sử dụng Ctrl + R và trong tương lai tôi có thể sử dụng Finalterm.

Cảm ơn tất cả các câu trả lời tuyệt vời các chàng trai!


2
Bạn nên thực sự cố gắng zsh. Nó cung cấp mọi thứ bạn đang yêu cầu và nhiều hơn nữa. Chuyển từ bash sang zsh
Basharat Sialvi

Theo trang man BASH, chức năng này cũng có trong BASH dưới dạng "động-hoàn thành lịch sử". Theo mặc định, nó bị ràng buộc với Alt + Tab khiến nó trở nên vô dụng, nhưng người ta có thể thay đổi liên kết bằng "liên kết".
Boris Bukh

1
@BasharatSial zsh cụ thể làm gì để giúp với điều này?
poolie

Câu trả lời:


16

Nếu các lệnh thường được sử dụng, chúng được ghi lại trong lịch sử lệnh bash track trong .bash_history .

Bây giờ là mẹo: Bạn có thể đảo ngược tìm kiếm lịch sử này để thực hiện lại các lệnh bằng cách nhấn CTRL-r .

Trong chế độ tìm kiếm lịch sử nghịch đảo, bash hiển thị, trực tiếp, khi bạn nhập , lệnh gần đây nhất trong lịch sử bắt đầu với đầu vào đã cho của bạn. Sau đó nhấn enter để chấp nhận và thực hiện lệnh được đề xuất. Tiếp tục nhấn CTRL-R để chuyển sang các lệnh cũ hơn có cùng tiền tố.

Điều này được tích hợp sẵn trong bash, không cần tùy chỉnh tập lệnh hoặc cài đặt phần mềm :) Đây là một trong những tính năng hữu ích nhất của bash, imho.


3
Sử dụng [ CTRL-g ] để thoát khỏi chế độ tìm kiếm lịch sử, nếu không thực thi lệnh (chẳng hạn như nếu bạn không tìm thấy lệnh bạn cần).
MountainX cho Monica Cellio

8

Dán (Ctrl-Shift-V) vào màn hình đầu cuối:

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc

Thoát (Ctrl-D) màn hình thiết bị đầu cuối, sau đó mở lại Terminal.

Bây giờ bạn có thể chỉ cần nhập một vài ký tự đầu tiên, sau đó nhấn Lên hoặc Xuống để cuộn qua danh sách đã lọc


3
Đây là câu trả lời đơn giản nhất để hoàn thành công việc!
cxrodgers

8

Thời hạn cuối cùng

Có ứng dụng Terminal App được gọi là Thuật ngữ cuối cùng rất hứa hẹn này . Trong số nhiều tính năng của nó, nó cũng có một lịch sử của các lệnh ghi nhớ, do đó bạn có thể chọn nó. Dưới đây là một số tính năng khác:

Thời hạn cuối cùng

Bạn có thể đọc thêm về nó trong bài viết này .

Đây là trang web từ những người sáng tạo. http://finalterm.org/

Để cài đặt nó

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm

Cảnh báo

Tôi đã nói rằng nó đầy hứa hẹn. Vấn đề duy nhất là nó ở phiên bản 0.1. Vì vậy, một số điều như vimnanokhông hoạt động tốt. Tôi cũng nhận thấy rằng nó chưa hỗ trợ Kéo và Thả, sao chép và dán. Nhưng nó có tính năng bạn yêu cầu. Khi phần mềm đáo hạn, nó sẽ trở thành một trong những thiết bị đầu cuối tốt nhất cho máy tính để bàn.

Ảnh chụp màn hình

Đây là chức năng trong hành động:

 hoạt động

Hi vọng điêu nay co ich.

* Tôi đang ở Saucy, vì vậy đó là lý do tại sao tôi có nền Salamander :)


Cảm ơn vì tiền hỗ trợ! Tôi đã kiểm tra Finalterm và nó có vẻ tốt. Thật không may, nó dường như không hỗ trợ sao chép-dán. Tôi đã thử Ctrl + V, Ctrl + Shift + V và nhấp chuột phải, nhưng không ai trong số chúng dường như hoạt động. Vì vậy, tôi sẽ ghi nhớ điều này cho tương lai!
kramer65

Đó là nhược điểm lớn nhất mà tôi thấy. Tuy nhiên, dự án còn non trẻ, và vì vậy tôi hy vọng rằng điều đó sẽ sớm được bổ sung. Tôi có thể thấy một ứng dụng đầu cuối có hỗ trợ sao chép-dán.
Tối đa

7

Sử dụng một aliascho toàn bộ lệnh của bạn, hoặc thêm thư mục vào $PATH. Ngoài ra, bạn không phải thay đổi thư mục thành nơi thực thi (hoặc tập lệnh hoặc bất cứ thứ gì) của bạn để chạy nó, vì vậy nó khá đơn giản. Cả hai phương pháp đều yêu cầu bạn khởi động lại thiết bị đầu cuối mà bạn đang sử dụng trước khi các thay đổi có hiệu lực.

Đây là cách tạo bash aliasví dụ cho bạn (thêm dòng sau vào ~/.bashrctệp của bạn ):

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'

Bằng cách này, tất cả những gì bạn cần làm là đầu vào runmyproject vào thiết bị đầu cuối mọi lúc mọi nơi mà không phải chỉ định các tùy chọn / đối số.

Ngoài ra, bạn có thể thêm đường dẫn dự án của bạn vào $PATHbiến môi trường của bạn . Để làm như vậy, thêm các dòng sau vào ~/.bashrctệp của bạn :

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH

Trong trường hợp này, bạn vẫn sẽ cần chỉ định các tùy chọn / đối số cho tệp thực thi của mình khi chạy nó.


1
Có điều là tôi muốn thiết bị đầu cuối phản ứng nhanh với việc sử dụng của tôi. Với điều này, tôi phải thay đổi bí danh mỗi khi tôi bắt đầu làm việc với các dự án mới hoặc khi tôi thay đổi cấu trúc thư mục của dự án. Phần chính của câu hỏi của tôi là tôi muốn nó học hỏi từ những gì tôi sử dụng, thay vì tôi nói nó phải làm gì.
kramer65

Ah tôi thấy. Sau đó, câu trả lời hàng đầu hiện nay nên làm thủ thuật. Hoặc ít nhất là chặt chẽ.
oaskamay

4

Khi tôi thấy mình thường xuyên phải thay đổi một thư mục như thế này:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

Tôi sẽ chỉ làm điều này một lần:

ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project

Và từ đó trở đi, sử dụng:

cd ~/pr[tab]

Khi nó đến:

./runmyproject --with some --command line --options set

Tôi sẽ sử dụng tìm kiếm lịch sử bash. Tại dấu nhắc lệnh, chỉ cần nhấn Ctrl-R và nhập 'runmy'. Voila, toàn bộ lệnh với tất cả các tùy chọn như được nhập lần cuối là ở ngay đó để được nhập lại. Nếu tôi không thích các tùy chọn tôi đã sử dụng lần trước và muốn xem các lệnh trước đó, tôi sẽ tiếp tục nhấn Ctrl-R để duyệt qua tất cả các lệnh trước đó có chứa "runmy".

Tìm kiếm lịch sử Ctrl-R cũng có thể giúp với lệnh 'cd', nếu bạn không thích ý tưởng liên kết tượng trưng. [Ctrl-R] ​​/ proj thực sự có khả năng mang lại lệnh cuối cùng mà bạn đã sử dụng để cd vào thư mục đó.

Thay vì thêm bí danh hoặc chuyển sang hệ vỏ đặc biệt, tôi luôn thích học cách sử dụng các tính năng bash được thiết kế để trợ giúp cho việc này. Bằng cách đó, tôi có thể sử dụng các tính năng tương tự trên các máy từ xa hoặc nếu tôi phải ngồi ở thiết bị đầu cuối của đồng nghiệp.


Cảm ơn lời đề nghị của bạn. Vấn đề là tôi không muốn thiết lập một thứ khác mà tôi đã quan tâm khi ví dụ thư mục dự án thay đổi hoặc tôi bắt đầu một dự án mới. Có điều là tôi muốn thiết bị đầu cuối phản ứng nhanh với việc sử dụng của tôi. Phần chính của câu hỏi của tôi là tôi muốn nó học hỏi từ những gì tôi sử dụng, thay vì tôi nói nó phải làm gì. Tôi thực sự thích chức năng Ctrl-R. Cảm ơn vì điều đó!
kramer65

4

nhấn control + r trên bàn phím của bạn - nó sẽ đưa bạn vào chế độ lịch sử đảo ngược và bạn có thể nhập phần bạn biết và toàn bộ lệnh sẽ hiển thị

Có những cách khác được liệt kê ở đây

http://www.talug.org/events/20030709/cmdline_history.html

Tôi có xu hướng sử dụng điều khiển R nhất


2

Hãy thử điều này ... Điều này hoạt động cho tất cả các lệnh trong tệp lịch sử của bạn ... cũng giống như Ctrl+ R, nhưng tôi nghĩ rằng nó trực quan hơn :)

  1. biên tập /etc/inputrc

    sudo vim /etc/inputrc
  2. uncomment hoặc thêm hai dòng này

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
  3. đăng xuất / đăng nhập


sau đó thử viết một số lệnh được liệt kê trong lịch sử ...

giống...

ls -lah

viết

ls

và hãy nhấn

Page Uphoặc Page Dnđể điều hướng máng tệp lịch sử của bạn để tìm kiếm các lệnh bắt đầu bằng "ls"

Nếu bạn đã làm mọi thứ đúng, nó sẽ tự động hoàn thành lệnh của bạn ...

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.