Как заставить [TAB] работать с аргументами псевдонимов для автозаполнения, как это можно сделать с фактической командой

У меня есть много псевдонимов, которые я создал в файле .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
8
задан 26 July 2015 в 14:50

2 ответа

Я понятия не имею для bash, но это работает с zsh и некоторые плагины

Установите z-оболочку с

sudo apt-get install zsh

и набор z-оболочка как Ваша стандартная оболочка

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

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

Добавьте Antigenv1

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),

enter image description here

enter image description here

enter image description here

0
ответ дан 27 July 2015 в 00:50
  • 1
    Это - моя ошибка так или иначе как он isn' t меню (тире), который используется, но меню команды выполнения. Сложность Ubuntu является подавляющей меня... –  19 October 2016 в 21:09

Большой вопрос! Если Ваш 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

, Если Вы добавляете, что fragement к Вашему .bashrc файл, необходимо получить завершения, работающие, как Вы ожидаете.

0
ответ дан 27 July 2015 в 00:50
  • 1
    You' приветствие ре. Отметьте мой ответ как корректное. – Benny 19 October 2016 в 21:01

Другие вопросы по тегам:

Похожие вопросы: