Як змусити [TAB] працювати з аргументами псевдонімів до автозаповнення, як це можна зробити з фактичною командою


9

У мене є багато псевдонімів, які я створив у своєму .bash_aliasesфайлі, і вони дуже корисні, тому, якщо я хочу всю інформацію в пакеті, я роблю щось на кшталт:

allinfo software-center

І це еквівалент:

apt-cache show software-center

Оскільки псевдонім встановлюється як:

alias allinfo='apt-cache show'

Але є один недолік цього, я наразі не можу автозавершити, TABколи використовую allinfoзамість фактичної команди. Тож мені було цікаво, чи існував спосіб подолати цей недолік і зробити його таким чином, що виконуватиметься allinfo software-ce[TAB]так само, як це робиться, коли ви використовуєте його з фактичною командою, а не просто робити великий простір вкладки?

Я використовую gnome-terminal.


Інформація про ОС:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid

Інформація про пакет:

gnome-terminal:
  Installed: 3.14.2-0ubuntu3
  Candidate: 3.14.2-0ubuntu3
  Version table:
 *** 3.14.2-0ubuntu3 0
        500 http://gb.archive.ubuntu.com/ubuntu/ vivid/main amd64 Packages
        100 /var/lib/dpkg/status

Це гарне запитання. Мені подобається ідея, що стоїть за ним. Я шукав всюди, і знайшов кілька близьких відповідей, але вони не вдається, коли я їх спробую. Якщо я щось придумаю, я дам вам знати. =)
Терранс

Відповіді:


6

Чудове запитання! Якщо ваша allinfoкоманда була такою самою, як apt-cacheі раніше (тобто, без show), ми можемо розглянути завершення apt-cacheі застосувати це до вашого allinfoпсевдоніма.

Однак ви хочете підмножину apt-cacheзавершення, тому у нас є ще трохи роботи.

Якщо ми подивимось на визначення завершення для apt-cache- в /usr/share/bash-completion/completions/apt-cache, ми бачимо, що для showпідкоманди використовується наступне :

        COMPREPLY=( $( apt-cache --no-generate pkgnames "$cur" 2> /dev/null ) )

- це лише встановлення COMPREPLYзмінної до списку відповідних пакетів.

Таким чином, ми можемо запозичити це і написати власну функцію та прив'язати її до свого псевдоніма allinfo:

# define a function to print the possible completions for
# an allinfo invocation
_allinfo()
{
    _init_completion || return
    COMPREPLY=($(apt-cache --no-generate pkgnames "$cur" 2>/dev/null))
    return 0
}

# bind the above completion function to the 'allinfo' alias
complete -F _allinfo allinfo

Якщо ви додасте цей фрагмент до свого .bashrcфайлу, ви повинні отримати завершення роботи, як ви очікували.


0

Я поняття не маю bash, але він працює з zshдеякими плагінами

Встановіть z-оболонку за допомогою

sudo apt-get install zsh

і встановіть z-оболонку як свою стандартну оболонку

sudo chsh "$USER" -s $(which zsh)

і запустити новий термінал для використання z-оболонки

Додайте Антиген v1

cd
git clone https://github.com/zsh-users/antigen.git

І налаштувати

# path to antigen clone
source ~/antigen/antigen.zsh

# Load the oh-my-zsh's library.
antigen use oh-my-zsh

# Bundles from the default repo (robbyrussell's oh-my-zsh).
antigen bundle git
antigen bundle heroku
antigen bundle pip
antigen bundle lein
antigen bundle command-not-found
antigen bundle zsh-users/zsh-completions src

# Syntax highlighting bundle.
antigen bundle zsh-users/zsh-syntax-highlighting

# Load the theme.
antigen theme robbyrussell
# antigen bundle nojhan/liquidprompt

# Tell antigen that you're done.
antigen apply

Деякі зображення (підказка - nojhan / liquidprompt)

введіть тут опис зображення

введіть тут опис зображення

введіть тут опис зображення


Ах, це працює для мене лише в тому випадку, якщо я роблю точно так само, як і ти, інакше це просто передбачає, що я запущений cdі робить справу з файлом. Як змусити його прочитати .bash_aliasesфайл?

Я спробував встановити ці плагіни, але я просто почав antigen: command not foundконфігурацію.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.