Otomatis selesai untuk perintah baris perintah yang sering digunakan?


15

Untuk beberapa proyek saya sering mengetikkan perintah pasangan, seperti misalnya:

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

dan

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

Melihat bahwa saya cukup malas saya mencoba untuk menghindari mengetik perintah-perintah itu secara penuh lagi dan lagi. Jadi saya tentu saja dapat menggunakan tombol-atas banyak untuk menemukan kembali perintah-perintah itu, tetapi sering kali, saya juga memiliki begitu banyak perintah di antaranya, sehingga mencari itu membutuhkan waktu lebih lama daripada hanya mengetiknya.

Saya sekarang bertanya-tanya apakah ada beberapa jenis utilitas yang dapat menyarankan perintah penuh yang saya gunakan banyak, ketika saya belum mengetik semuanya. Jadi saya bisa misalnya mengetik 'cd an /' dan itu sudah menyarankan sisa jalan karena saya sudah menggunakannya begitu banyak bulan lalu.

Saya memang menemukan sesuatu yang disebut Bash Smart Complete. Tapi itu sedikit "bodoh" karena tidak melihat perintah yang saya gunakan sebelumnya. Saya baru saja menemukan jawaban SO ini , yang menyarankan menempatkan perintah yang saya gunakan banyak dalam file. Namun, itu tidak cukup responsif karena saya perlu membuat file baru untuk itu setiap kali saya memulai proyek baru atau mengubah folder atau argumen program.

Adakah yang tahu utilitas lain atau cara lain untuk mencapai ini? Atau, adakah yang tahu bagaimana saya bisa mengubah Bash Smart Complete sehingga bisa melihat perintah yang saya gunakan bulan lalu dan menyelesaikan perintah yang cocok dan paling banyak digunakan dalam sebulan terakhir?

[EDIT] Berikut adalah beberapa jawaban yang sangat bagus. Saya belum menandai apa pun sebagai jawaban yang pasti. Bukan karena saya tidak suka jawabannya, saya suka, tetapi karena tidak ada satu pun dari mereka yang menjadi pemenang mutlak. Saya pikir Finalterm adalah proyek yang hebat. Sayangnya masih agak kasar di tepinya. Sebagai contoh; itu belum mendukung copy-paste. Saya akan terus mengawasi proyek itu, karena ketika akan matang saya pikir itu akan menjadi aplikasi terminal yang hebat. Adapun jawaban lainnya; mereka juga menyarankan untuk membuat alias, yang bukan yang ingin saya lakukan karena itu menciptakan pekerjaan tambahan alih-alih mengambil pekerjaan, atau menggunakan Ctrl + R, yang merupakan brilian (saya tidak tahu tentang itu!). Beberapa orang menyarankan untuk menggunakan Ctrl + R, jadi saya tidak bisa benar-benar menyorot satu jawaban dari yang lain.

Jadi untuk sekarang saya pasti menggunakan Ctrl + R, dan di masa depan saya mungkin menggunakan Finalterm.

Terima kasih atas semua jawaban hebat kawan!


2
Anda harus benar-benar mencoba zsh. Ini menawarkan semua yang Anda minta dan banyak lagi. Pindah dari bash ke zsh
Basharat Sialvi

Menurut halaman manual BASH, fungsi ini juga hadir dalam BASH sebagai "dynamic-complete-history". Secara default itu terikat ke Alt + Tab membuatnya tidak berguna, tetapi orang dapat mengubah ikatan dengan "bind".
Boris Bukh

1
@BasharatSial apa yang secara khusus dilakukan zsh untuk membantu dengan ini?
poolie

Jawaban:


16

Jika perintah sering digunakan, mereka dicatat dalam perintah sejarah bash track in .bash_history.

Sekarang triknya: Anda dapat membalikkan pencarian histori ini untuk menjalankan kembali perintah dengan menekan CTRL-r .

Dalam mode pencarian riwayat terbalik, bash menunjukkan, langsung, saat Anda mengetik , perintah terbaru dalam sejarah yang dimulai dengan input yang Anda berikan. Kemudian tekan enter untuk menerima dan menjalankan perintah yang diusulkan. Terus tekan CTRL-R untuk menggilir perintah yang lebih lama dengan awalan yang sama.

Ini sudah built-in di bash, tidak perlu mengkustomisasi skrip atau menginstal perangkat lunak :) Ini adalah salah satu fitur bash yang paling berguna, imho.


3
Gunakan [ CTRL-g ] untuk keluar dari mode pencarian riwayat, jika tidak menjalankan perintah (seperti jika Anda tidak menemukan yang Anda butuhkan).
MountainX-for-Monica

8

Rekatkan (Ctrl-Shift-V) yang berikut ini ke layar terminal:

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

Keluar (Ctrl-D) layar terminal, lalu buka Terminal lagi.

Sekarang Anda cukup mengetik pasangan karakter pertama, lalu tekan Atas atau Bawah untuk menelusuri daftar yang difilter


3
Ini adalah jawaban paling sederhana yang menyelesaikan pekerjaan!
cxrodgers

8

Term Final

Ada Terminal App yang disebut Final Term ini . Di antara banyak fitur-fiturnya, ia juga memiliki sejarah perintah remebering, sehingga Anda dapat memilihnya. Berikut ini beberapa fitur lainnya:

Term Final

Anda dapat membaca lebih lanjut tentang itu di artikel ini .

Ini adalah situs web dari penciptanya. http://finalterm.org/

Untuk menginstalnya

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

Peringatan

Saya telah mengatakan bahwa itu menjanjikan. Satu-satunya masalah adalah bahwa itu pada versi 0.1 Jadi beberapa hal seperti vimdannano belum berfungsi dengan baik. Saya juga memperhatikan bahwa itu belum mendukung Drag-and-Drop, dan salin dan tempel. Tetapi memiliki fitur yang Anda minta. Saat perangkat lunak matang, itu akan menjadi salah satu terminal terbaik untuk desktop.

Tangkapan layar

Berikut ini fungsinya:

 berfungsi dalam aksi

Semoga ini membantu.

* Saya di Saucy, jadi itu sebabnya saya memiliki latar belakang Salamander :)


Terima kasih atas tipnya! Saya memeriksa akhir semester dan itu memang terlihat bagus. Sayangnya sepertinya belum mendukung copy-paste. Saya mencoba Ctrl + V, Ctrl + Shift + V dan mengklik kanan, tetapi tidak satupun yang berfungsi. Jadi saya akan mengingat ini untuk masa depan!
kramer65

Itulah kelemahan terbesar yang saya lihat. Namun, proyek ini masih muda, jadi saya berharap itu akan ditambahkan segera. Saya dapat melihat aplikasi terminal tanpa dukungan copy-paste.
Max Tither

7

Gunakan aliasuntuk seluruh perintah Anda, atau tambahkan direktori ke dalam $PATH. Selain itu, Anda tidak perlu mengubah direktori ke tempat executable Anda (atau skrip, atau apa pun) untuk menjalankannya, jadi itu cukup sederhana. Kedua metode mengharuskan Anda untuk me-restart terminal yang Anda gunakan sebelum perubahan berlaku.

Inilah cara membuat contoh bash aliasuntuk Anda (tambahkan baris berikut ke ~/.bashrcfile Anda ):

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

Dengan cara ini, yang perlu Anda lakukan adalah input runmyproject ke terminal di mana pun Anda berada, tanpa harus menentukan opsi / argumen.

Atau, Anda dapat menambahkan jalur proyek ke $PATHvariabel lingkungan Anda . Untuk melakukannya, tambahkan baris berikut ke ~/.bashrcfile Anda :

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

Dalam hal ini Anda masih perlu menentukan opsi / argumen Anda untuk dieksekusi saat menjalankannya.


1
Masalahnya adalah saya ingin terminal responsif terhadap penggunaan saya. Dengan ini saya harus mengubah alias setiap kali saya mulai mengerjakan proyek baru atau ketika saya mengubah struktur direktori proyek saya. Bagian utama dari pertanyaan saya adalah bahwa saya ingin belajar dari apa yang saya gunakan, bukannya saya mengatakan apa yang harus saya lakukan.
kramer65

Ah saya mengerti. Maka jawaban teratas saat ini harus melakukan trik. Atau setidaknya erat.
oaskamay

4

Ketika saya menemukan diri saya sering harus berubah ke direktori seperti ini:

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

Saya hanya akan melakukan ini sekali:

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

Dan sejak saat itu, gunakan:

cd ~/pr[tab]

Ketika datang ke:

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

Saya akan menggunakan pencarian histori bash. Pada prompt perintah cukup tekan Ctrl-R dan ketik 'runmy'. Voila, seluruh perintah dengan semua opsi seperti yang dimasukkan terakhir ada di sana untuk dimasukkan kembali. Jika saya tidak menyukai opsi yang saya gunakan terakhir kali dan ingin melihat perintah sebelumnya, saya akan terus menekan Ctrl-R untuk menggilir semua perintah sebelumnya yang berisi "runmy".

Pencarian riwayat Ctrl-R dapat membantu dengan perintah 'cd' juga, jika Anda tidak menyukai ide symlink. [Ctrl-R] ​​/ proj kemungkinan besar akan mengembalikan perintah terakhir yang Anda gunakan untuk cd ke direktori itu.

Daripada menambahkan alias atau beralih ke shell khusus, saya selalu lebih suka belajar menggunakan fitur bash yang dirancang untuk membantu dengan hal semacam ini. Dengan begitu saya bisa menggunakan fitur yang sama pada mesin jarak jauh atau jika saya harus duduk di terminal kolega.


Terima kasih atas saran Anda. Masalahnya adalah bahwa saya tidak ingin mengatur hal lain yang telah saya urus ketika misalnya folder proyek berubah atau saya memulai proyek baru. Masalahnya adalah saya ingin terminal responsif terhadap penggunaan saya. Bagian utama dari pertanyaan saya adalah bahwa saya ingin belajar dari apa yang saya gunakan, bukannya saya mengatakan apa yang harus saya lakukan. Saya sangat suka fungsi Ctrl-R. Terima kasih untuk yang itu!
kramer65


2

Coba ini ... Ini berfungsi untuk semua perintah dalam file histori Anda ... adalah hal yang sama dengan Ctrl+ R, tapi saya pikir itu lebih intuitif :)

  1. sunting /etc/inputrc

    sudo vim /etc/inputrc
  2. batalkan komentar atau tambahkan dua baris ini

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
  3. logout / masuk


kemudian cobalah untuk menulis beberapa perintah yang tercantum dalam sejarah ...

Suka...

ls -lah

menulis

ls

dan tekan

Page Upatau Page Dnuntuk menavigasi file riwayat Anda dalam mencari perintah yang dimulai dengan "ls"

Jika Anda melakukan semuanya dengan benar, maka perintah otomatis Anda harus lengkap ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.