Làm cách nào để [TAB] hoạt động với các đối số của bí danh để tự động hoàn thành như có thể được thực hiện bằng lệnh thực tế


9

Tôi có nhiều bí danh mà tôi đã tạo trong .bash_aliasestệp của mình và chúng rất hữu ích, vì vậy nếu tôi muốn tất cả thông tin trên một gói, tôi sẽ làm một cái gì đó như:

allinfo software-center

Và điều đó tương đương với:

apt-cache show software-center

Vì bí danh được đặt là:

alias allinfo='apt-cache show'

Nhưng có một nhược điểm của điều này, hiện tại tôi không thể tự động hoàn thành TABkhi sử dụng allinfothay vì lệnh thực tế. Vì vậy, tôi đã tự hỏi liệu có cách nào để khắc phục nhược điểm này và làm cho nó để thực hiện allinfo software-ce[TAB]sẽ hoạt động giống như khi bạn sử dụng nó với lệnh thực tế, và không chỉ tạo một không gian tab lớn?

Tôi đang sử dụng gnome-terminal.


Thông tin hệ điều hành:

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

Thông tin gói hàng:

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

Đây là một câu hỏi hay. Tôi thích ý tưởng đằng sau nó. Tôi đã tìm kiếm khắp nơi, và tôi đã tìm thấy một số câu trả lời gần gũi, nhưng chúng thất bại khi tôi thử chúng. Nếu tôi nghĩ ra một cái gì đó, tôi sẽ cho bạn biết. =)
Terrance

Câu trả lời:


6

Câu hỏi tuyệt vời! Nếu allinfolệnh của bạn giống như chỉ apt-cache, (nghĩa là không có show) thì chúng ta có thể xem xét việc hoàn thành apt-cachevà áp dụng điều đó cho allinfobí danh của bạn .

Tuy nhiên, bạn muốn có một tập hợp con apt-cachehoàn thành, vì vậy chúng tôi có thêm một chút việc phải làm.

Nếu chúng ta xem định nghĩa hoàn thành cho apt-cache- trong /usr/share/bash-completion/completions/apt-cache, chúng ta sẽ thấy những điều sau đây được sử dụng cho showtiểu ban:

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

- đây chỉ là thiết lập COMPREPLYbiến cho danh sách các gói phù hợp.

Vì vậy, chúng tôi có thể mượn cái này và viết hàm riêng của chúng tôi và liên kết nó với bí danh allinfo của bạn:

# 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

Nếu bạn thêm đoạn đó vào .bashrctệp của mình , bạn sẽ có được các phần hoàn thành hoạt động như bạn mong đợi.


0

Tôi không có ý tưởng cho bash, nhưng nó hoạt động với zshvà một số bổ trợ

Cài đặt z-shell với

sudo apt-get install zsh

và đặt vỏ z làm vỏ tiêu chuẩn của bạn

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

và bắt đầu một thiết bị đầu cuối mới để sử dụng z-shell

Thêm kháng nguyên v1

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

Và cấu hình

# 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

Một số hình ảnh (dấu nhắc là nojhan / liquidprompt)

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Ah, điều đó chỉ làm việc cho tôi nếu tôi làm chính xác như bạn đã làm, nếu không, nó chỉ cho rằng tôi đang chạy cdvà thực hiện điều đường dẫn tệp. Làm thế nào để tôi có được nó để đọc các .bash_aliasestập tin?

Tôi đã cố gắng cài đặt các plugin đó, nhưng tôi chỉ cần antigen: command not foundcấu hình.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.