Як зробити термінал автозаповненням, коли є кілька файлів / каталогів?


32

Якщо у мене є кілька каталогів, наприклад:

afoo abar

іноді мій термінал відмовиться від автоматичного заповнення, коли натискаю вкладку (наприклад, "cd a", потім вкладка), і замість цього надрукує список каталогів. Іноді навіть видає шумний, дратівливий звук. Будь-яка ідея, як зробити це автозавершеним у таких випадках? Наприклад, він може показувати спочатку abar, а потім пізніше, якщо я знову натискаю вкладку. Я бачив, що це стосується Windows, або деяких програм у Ubuntu

Відповіді:


46

Щось, що для мене рятує життя, - це провести цикл баз через можливості, а не показувати німий список.

Оскільки bash використовує readlineдля автоматичного завершення, додайте наступні рядки до~/.inputrc

Після того, як ви задоволені за недостатністю майна ретельно протестовані нижче розчину в протягом декількох днів / тижнів, вирізати і вставити (не копіювати!) Одні і ті ж параметри з ~/.inputrcдо /etc/inputrcякої містить системні настройки, що робить його доступні для всіх користувачів системи (включаючи гостя).

Кодез:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

тоді exitваш термінал (або віддалений термінал, як шпаклівка) і відкрийте його знову ...

Приклади:

  1. Якщо у вас є 3 файлу: file1, file2і , file3і ви наберете:

    e fTabTabTab

    він перейде через:

    e file1
    e file2
    e file3
    

    і коли ви хочете рухатись назад, просто натисніть Shift+Tab

  2. Коли ви вводите:

    very-complicated-command with lots of command line parameters

    і наступного разу, коли вам потрібна та сама команда, просто введіть:

    very

    і він набере для вас:

    very-complicated-command with lots of command line parameters

Це допоможе вам заощадити тонну часу на баш! ;-)


2
+1, цікаво, але: 1. ~/.inputrcможливо, краще, ніж /etc/inputrc2. і, я думаю, ви можете встановити це bashбезпосередньо: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru

Це дуже приємно, спасибі (і я отримав свою підсумку). Чи існує універсальний спосіб показати варіанти, за допомогою яких він пройде цикл, який поєднує в собі найкращі з обох світів? Мені подобається можливість вкладки + вкладка з папками та підкомандами тощо, тому мені не доведеться їх запам’ятовувати (наприклад git branch <tab through branches>. Однак, якби я міг побачити список і вкладку через його елементи, це було б чудово! Для каталогів і файлів ls- це можливість побачити, які предмети доступні. Однак, для підкоманд, це, на жаль, не так просто чи очевидно
Ерік,

Це працює і на PuTTy! Просто довелося її перезапустити один раз :)
np8

@Erik: Мабуть, те, що ви просили , можливо, але не збираєтесь редагувати мою відповідь, щоб все було просто. (видалено старий коментар, що це неможливо)
Fabby

18

Після 1-го tabвам потрібно вставити більше літер. Тож якщо ви наберете

cd a

і натисніть, tabви нічого не отримуєте, і через секунду tab(відразу після) ви отримуєте список імен, починаючи з цього, aа потім потрібно вставити, fщоб він автоматично заповнив решту так

cd atabtabftabtab

призведе до

cd afoo

2
ІМХО: Це вірний шлях. Особисто мені поведінка windows дуже дратує. Розглянемо випадок, коли у вас багато файлів, починаючи з aі вам потрібен останній. Якщо ви випадково натисніть на вкладку, aвам доведеться переглядати список усіх можливих завершень, щоб дістатись до потрібного.
Тобіас

@Tobias: коли ви випадково потрапили в [Tab] занадто рано, використовуючи іншу систему , все ще є [Ctrl] [K] ... ;-)
Fabby
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.