วิธีรับ [TAB] เพื่อทำงานกับอาร์กิวเมนต์ของ alias เพื่อเติมข้อความอัตโนมัติสามารถทำได้ด้วยคำสั่งจริง


9

ฉันมีนามแฝงจำนวนมากที่ฉันสร้างใน.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

นี่เป็นคำถามที่ดี ฉันชอบความคิดเบื้องหลัง ฉันดูไปทั่วแล้วและฉันพบคำตอบที่ใกล้เคียง แต่พวกเขาก็ล้มเหลวเมื่อฉันลองพวกเขา ถ้าฉันคิดอะไรสักอย่างฉันจะบอกให้คุณรู้ =)
Terrance

คำตอบ:


6

เป็นคำถามที่ดีมาก! หาก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ไฟล์ของคุณคุณควรทำให้การทำงานสำเร็จตามที่คุณคาดหวัง


0

ฉันไม่มีความคิดbashแต่มันใช้ได้กับปลั๊กอินzshบางตัว

ติดตั้ง z-shell ด้วย

sudo apt-get install zsh

และตั้งค่า z-shell เป็นเชลล์มาตรฐานของคุณ

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

และเริ่มต้นเทอร์มินัลใหม่เพื่อใช้ z-shell

เพิ่มAntigen 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.