การทุบตีแท็บกำหนดเองเสร็จสิ้น


34

ฉันมียูทิลิตี้คอนโซลที่กำหนดเองcooltoolพร้อมรายการตัวเลือก

fooOption
barOption

สิ่งที่ฉันควรทำเพื่อการเติมข้อความอัตโนมัติทุบตีสามารถที่ตัวเลือกโดยการกดที่tabสำคัญ?

ฉันหมายถึงผู้ใช้ที่พิมพ์

$ ./cooltool foo_

tabจากนั้นกด และจากนั้น

$ ./cooltool fooOption _

ปรากฏ


1
อย่าข้ามโพสต์
Wuffers

2
ขอให้สังเกตว่าอันนี้ถูกโยกย้ายและอันอื่นไม่ใช่ ฉันคิดว่าผู้ใช้จำนวนมากยังไม่รู้ว่าพวกเขาไม่ควรโพสต์คำถามในเว็บไซต์ SE หลายแห่ง พวกเขาเคยชินกับการฟอรั่มที่ไม่ใช่ระบบแบบครบวงจรซึ่งคุณอาจถามในฟอรัมที่แตกต่างกันสองสามเพื่อโอกาสที่ดีกว่าสำหรับคำตอบที่รวดเร็ว
jcrawfordor

คำตอบ:


2

cooltoolเขียนสคริปต์ทุบตีเสร็จ ทุบตีเสร็จแพคเกจมาพร้อมกับสคริปต์สำหรับโปรแกรมที่นิยมจำนวนมากซึ่งคุณสามารถใช้เป็นตัวอย่าง


40

วิธีที่ง่ายที่สุดคือการเพิ่มสิ่งต่อไปนี้ใน. bashrc ของคุณ

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

เมื่อใดก็ตามที่คุณพิมพ์cooltool f[TAB][TAB]ที่_cooltool()ฟังก์ชั่นถูกเรียก มันจะหาว่าคำบางส่วนในปัจจุบันของคุณคืออะไรแล้วcompgenจะหาว่าตัวเลือกใดตรงกับ เหล่านี้จะถูกเก็บไว้ในอาร์เรย์ที่เรียกว่าCOMPREPLYซึ่งจะปรากฏขึ้น ดูที่man completeและman compgenสำหรับรายละเอียด

สำหรับการกวดวิชาที่ดีลองดู: การเขียนฟังก์ชั่น Bash Completion ของคุณเอง


7

คุณอาจต้องการมองเข้าไปในไดเร็กทอรี /etc/bash_completion.d ของคุณอย่างละเอียดยิ่งขึ้นในระบบของคุณ

นอกจากนี้คุณควรอ่านคำแนะนำนี้ ส่วนที่สองของการแนะนำเป็นหนึ่งที่คุณต้อง


1
ฉันใช้ Mac OS X 10.6 ดังนั้นจึงไม่มีไดเร็กทอรี

อ่ารู้ดี


2

นอกเหนือจากคำตอบของ dogbane แล้วคุณยังสามารถ:

complete -W "fooOption barOption" cooltool

หากคุณต้องการจับคู่รายการคำจากจุดเริ่มต้นของสตริง ดูเหมือนว่าสมบูรณ์และ compgen แบ่งปันตัวเลือกส่วนใหญ่ ฉันสังเกตเห็นการจับคู่ "เริ่มต้นของสตริง" เท่านั้นในคำสั่งที่ฉันใช้ดังนั้นฉันจึงพบว่ามันเป็นระเบียบเรียบร้อยที่คุณสามารถทำสิ่งอื่นในฟังก์ชัน _cooltool เช่น:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

เพื่อจับคู่ที่ใดก็ได้ในชื่อตัวเลือก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.