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

7

У меня есть много псевдонимов, которые я создал в файле .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
    
задан Paranoid Panda 25.07.2015 в 22:21
источник

2 ответа

4

Отличный вопрос! Если ваша команда allinfo была такой же, как и apt-cache (т. Е. Без show ), мы могли бы посмотреть на завершение для apt-cache и применить это к вашему псевдониму allinfo .

Однако вы хотите получить подмножество apt-cache , поэтому нам нужно сделать еще немного работы.

Если мы посмотрим в определении завершения для apt-cache - in /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 , вы должны получить завершение работы, как вы ожидаете.

    
ответ дан Jeremy Kerr 27.07.2015 в 05:49
источник
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)

    
ответ дан A.B. 26.07.2015 в 11:53