Cara mendapatkan [TAB] untuk bekerja dengan argumen alias ke autocomplete seperti yang dapat dilakukan dengan perintah aktual

9

Saya memiliki banyak alias yang saya buat di .bash_aliasesfile saya , dan mereka sangat berguna, jadi jika saya ingin semua info pada paket saya melakukan sesuatu seperti:

allinfo software-center

Dan itu setara dengan:

apt-cache show software-center

Karena alias ditetapkan sebagai:

alias allinfo='apt-cache show'

Tetapi ada satu kelemahan dari ini, saya saat ini tidak dapat melengkapi otomatis TABketika menggunakan allinfoalih-alih perintah yang sebenarnya. Jadi saya bertanya-tanya apakah ada cara untuk mengatasi kerugian ini dan membuatnya agar allinfo software-ce[TAB]bekerja akan sama seperti ketika Anda menggunakannya dengan perintah yang sebenarnya, dan bukan hanya membuat ruang tab yang besar?

Saya menggunakan gnome-terminal.


Informasi OS:

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

Informasi paket:

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

sumber
Ini pertanyaan yang bagus. Saya suka ide di baliknya. Saya telah mencari di mana-mana, dan saya telah menemukan beberapa jawaban dekat, tetapi mereka gagal ketika saya mencobanya. Jika saya menemukan sesuatu, saya akan memberi tahu Anda. =)
Terrance

Jawaban:

6

Pertanyaan bagus! Jika allinfoperintah Anda sama dengan adil apt-cache, (yaitu, tanpa show) maka kita bisa melihat penyelesaiannya apt-cache, dan menerapkannya pada allinfoalias Anda .

Namun, Anda ingin bagian dari apt-cachepenyelesaian, jadi kami memiliki sedikit pekerjaan yang harus dilakukan.

Jika kita melihat definisi penyelesaian untuk apt-cache- dalam /usr/share/bash-completion/completions/apt-cache, kita melihat yang berikut ini digunakan untuk showsubperintah:

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

- ini hanya mengatur COMPREPLYvariabel ke daftar paket yang cocok.

Jadi, kami dapat meminjam ini dan menulis fungsi kami sendiri, dan mengikatnya ke allinfo alias Anda:

# 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

Jika Anda menambahkan frmentasi itu ke .bashrcfile Anda, Anda harus menyelesaikannya sesuai dengan yang Anda harapkan.

Jeremy Kerr
sumber
0

Saya tidak tahu bash, tetapi berfungsi dengan zshdan beberapa plugin

Instal z-shell dengan

sudo apt-get install zsh

dan atur z-shell sebagai shell standar Anda

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

dan mulai terminal baru untuk menggunakan z-shell

Tambahkan Antigen v1

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

Dan konfigurasikan

# 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

Beberapa gambar (prompt adalah nojhan / liquidprompt)

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

AB
sumber
Ah, itu hanya bekerja untuk saya jika saya melakukan persis seperti yang Anda lakukan, kalau tidak, itu hanya mengasumsikan bahwa saya sedang menjalankan cddan melakukan hal path file. Bagaimana saya mendapatkannya untuk membaca .bash_aliasesfile?
Saya mencoba menginstal plugin tersebut, tetapi saya baru saja antigen: command not foundmelakukan konfigurasi.