실제 명령으로 수행 할 수있는 것처럼 [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있습니다.


OS 정보 :

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

좋은 질문입니다. 나는 그 아이디어를 좋아합니다. 나는 온통 찾고 있었고, 나는 가까운 대답을 찾았지만 그것을 시도 할 때 그들은 실패합니다. 내가 뭔가를 내 놓으면 알려 줄게 =)
Terrance

답변:


6

좋은 질문입니다! 귀하의 allinfo명령이 just과 동일 하다면 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-shell을 설치하십시오.

sudo apt-get install zsh

z-shell을 표준 쉘로 설정하십시오.

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

z-shell을 사용하기 위해 새 터미널을 시작하십시오.

항원 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구성이 완료되었습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.