У меня есть много псевдонимов, которые я создал в файле .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
Я понятия не имею для 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),
Большой вопрос! Если Ваш 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
файл, необходимо получить завершения, работающие, как Вы ожидаете.