วิธีการส่งออกสตริงที่สมบูรณ์เพื่อ stdout?


15

บางส่วนของgitคำสั่งมีตัวเลือกมากมายและมันมักจะจะเป็นประโยชน์ในการค้นหาผ่านพวกเขาสำหรับความต้องการหนึ่งที่ฉัน - ฉันเป็นเพียงการมองหาตัวเลือกที่ควบคุมTABความกว้างในgit-guiแต่มีประมาณ 200 git configสำเร็จ วิธีแก้ปัญหาที่ชัดเจนคือการคัดลอกความสำเร็จทั้งหมดลงในเครื่องมือแก้ไขและค้นหาผ่านสิ่งเหล่านั้น แต่ฉันอยากทำ

[something] | grep tab

ไม่มีmanหรือinfoหน้าสำหรับcompgen, help compgenไม่ได้อธิบายตัวเลือกของตัวเองและไม่มีอัตโนมัติที่สมบูรณ์แบบสำหรับcompgen(ว่าที่สำหรับประชด?)

PS: compgen -Aไม่ทำงาน

PPS: นี่ไม่ใช่คำถามเกี่ยวกับgit-gui- วิธีแก้ปัญหาสำหรับความกว้างของแท็บเป็นที่อื่น

PPPS: นี่คือไม่ได้เกี่ยวกับคำสั่งอัตโนมัติเสร็จสิ้นเพียงพารามิเตอร์ของคำสั่ง


สิ่งนี้คล้ายกันมากกับวิธีไพพ์เอาต์พุตของ "tab complete"? แต่คำตอบที่ยอมรับนั้นมีเฉพาะสำหรับการทำตามคำสั่งโดยไม่มีข้อโต้แย้ง
Michael Mrozek

คำตอบ:


10

คุณสามารถใช้ฟังก์ชั่นต่อไปนี้ซึ่งใช้วิธีsudoการเติมข้อมูลอัตโนมัติแบบเดียวกับที่สร้างรายการเสร็จสมบูรณ์:

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

โดยที่_command_offsetกำหนดไว้ใน bash-completion (แพ็คเกจ)

หมายเหตุ: ฟังก์ชั่นจะต้องทำงานในเชลล์แบบโต้ตอบ (เช่นถ้ามันอยู่ในไฟล์ไฟล์จะต้องมีแหล่งที่มาแทนที่จะเรียกใช้เพียงแค่) มิฉะนั้นจะไม่ได้กำหนดกฎ / ฟังก์ชั่นความสมบูรณ์ที่จำเป็น

PS compgen -Aใช้งานได้กับการกระทำในตัวสิ่งที่คุณควรลอง (แต่ไม่ทำงานอย่างใดอย่างหนึ่ง) คือcompgen -F(หรือจริง ๆcompgen -o bashdefault -o default -o nospace -F _git) ด้วยเหตุนี้ไม่ทำงาน (และเอกสารสำหรับการทุบตีในตัวคำสั่งรวมทั้ง compgen / สมบูรณ์) สามารถพบได้ในทุบตี (1)


@ l0b0 หวังว่าจะใช้ได้ในทุกกรณี
yuyichao

ยอดเยี่ยมมันใช้งานได้! ฉันได้ปรับแต่งเล็กน้อยสองสามครั้งและตอนนี้มันอยู่ใน. bash_aliases ของฉันให้ดี คุณอาจต้องการตัดให้เหลือเพียงวิธีแก้ปัญหาเท่านั้น แต่ไม่ต้องสงสัยเลยว่าคุณจะได้รับเงินรางวัล ฉันจะลบความคิดเห็นการสนทนาของฉันเนื่องจากพวกเขาไม่เกี่ยวข้องอีกต่อไป
l0b0

1
ฉันพบว่าการใช้สิ่งนี้ในเชลล์แบบโต้ตอบสามารถทำลายความสมบูรณ์ของแท็บที่มีอยู่แล้ว การทำให้ตัวแปรแต่ละตัวในตัวเครื่องฟังก์ชั่นแก้ไขปัญหานั้น (เช่นlocal COMP_LINE="$*")
อัลฟลานาแกน

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