มีเชลล์ที่รองรับการเสร็จฟัซซี่ใน Sublime Text ไหม


14

ฉันกำลังใช้ bash และฉันสงสัยว่ามีปลั๊กอินใด ๆ ใน bash หรือ shell อื่น ๆ ซึ่งทำให้ฉันสามารถทำสิ่งนี้ cat tfnislong.txt+ [tab]เสร็จcat ThisFileNameIsSoLong.txtเหมือนกับแท็บใน Sublime Text


ทำไมไม่เพียงแค่ทำcat Th+ tab?
daviewales

1
@daviewales แสดงเหตุผลทั้งหมด 269 รายการหรือไม่
โทรสาร

คำตอบ:


11

ฉันรู้https://github.com/mgalgs/fuzzy_bash_completioncompleteซึ่งเป็นพวงของฟังก์ชั่นเปลือกใช้กับ

ฉันคิดว่าเราน่าจะทำได้ดีกว่านี้เล็กน้อย ถึงเวลาที่จะเปิด. bashrc หรือ. profile ของคุณ

เบ็ดพื้นฐานที่เราใช้คือ:

complete -o nospace -o filenames -F fuzzypath cd ls cat

ตัวเลือก -F หมายถึงใช้ฟังก์ชั่นเปลือกสำหรับแท็บเสร็จที่ตัวเลือกที่ตั้งอยู่ในCOMPREPLYตัวแปร ตัวอย่างเช่น:

ฟังก์ชั่น fuzzypath () {
    ถ้า [-z $ 2] 
    แล้วก็
        COMPREPLY = (`ls ')
    อื่น
        DIRPATH = `echo" $ 2 "| gsed 's | [^ /] * $ ||' `
        BASENAME = `echo" $ 2 "| gsed 's |. * / ||' '
        ตัวกรอง = `echo" $ BASENAME "| gsed 's |. | \ 0. * | g'`
        COMPREPLY = (`ls $ DIRPATH | grep -i" $ FILTER "| gsed" s | ^ | $ DIRPATH | g "`)
    Fi
}

ที่DIRPATHเป็นทุกอย่างก่อนที่ / ที่ผ่านมาบนเส้นทางของคุณที่คุณพิมพ์และกำลังBASENAMEเป็นที่ที่เคอร์เซอร์ของคุณในขณะนี้

FILTERเป็นที่ซึ่งฟัสซีเนสเข้ามาโดยทั่วไปใช้BASENAMEและแทรกตัวอักษร.*ระหว่างตัวละครทุกตัวเพื่อสร้างเรกซ์ฝอยของเรา

ส่วนที่เหลือเป็นเพียงการรวม regex กับ LS COMPREPLYการผลิต findคุณอาจพบสิ่งที่ฉลาดมากขึ้นที่จะทำที่นี่อาจจะมี

ฉันยังพบhttp://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.htmlเพื่อเป็นประโยชน์


6

คุณอาจพบว่ามีประโยชน์fzf มันเป็นตัวค้นหาฟัซซี่เอนกประสงค์ที่เขียนขึ้นในทับทิมที่สามารถใช้กับรายการสิ่งต่าง ๆ : ไฟล์กระบวนการประวัติคำสั่งกิ่งคอมไพล์ ฯลฯ

สคริปต์การติดตั้งจะตั้งค่าการCTRL-Tโยงคีย์สำหรับเชลล์ของคุณ GIF ต่อไปนี้แสดงวิธีการทำงาน


FZF ยอดเยี่ยมมาก! ขอบคุณมากสำหรับการมีส่วนร่วม สิ่งนี้ช่วยฉันในการทำงานหลายสัปดาห์ .. ฉันเริ่มเขียน Fashy ให้กับ Bash เมื่อฉันโชคดีที่พบ FZF มันทำงานได้สมบูรณ์แบบฉันต้องจำไว้ว่าต้องบันทึกตำแหน่งเคอร์เซอร์ก่อนที่จะโทรหาfzf.. (tput sc) และหลังจากนั้นก็กู้คืนด้วยtput rc..
HåkonHægland

3

หากต้องการไปพร้อมกับคำตอบอื่น ๆ ของคุณคุณอาจต้องการดู zsh มันใช้งานได้กับ bash ย้อนหลังเพื่อให้คุณสามารถใช้แทนการแทนที่ได้ แต่รองรับคุณสมบัติที่ขยายอย่างมีนัยสำคัญและหนึ่งในนั้นคือการทำให้แท็บบริบทรับรู้ได้รับการปรับปรุงอย่างมาก

zsh คำถามที่พบบ่อยเสร็จจะขยายในกรณีการใช้งาน แต่ฉันเชื่อว่าตามตัวอย่างของคุณคุณจะสนใจCOMPLETE_IN_WORDฟังก์ชั่นมากที่สุด มันไม่ได้เป็นพฤติกรรมที่ต้องการ แต่ใกล้เคียง ประเด็นหลักคือมีหลายวิธีที่จะขยายการทำงานพื้นฐานในวิธีที่เข้าถึงได้ง่ายกว่าการใช้ bash

นี่คือส่วนขยายการจับคู่แบบคลุมเครือที่จะประมาณสิ่งที่คุณต้องการโดยเฉพาะ การจับคู่ zsh-fuzzy

สำหรับแนวคิดบางอย่างคุณสามารถดูoh-my-zsh framework ที่ได้รับความนิยมซึ่งมีฟังก์ชั่นมากมายสำหรับการจัดการ zsh และขยายมัน มันเป็นมากกว่าที่คุณต้องการส่วนใหญ่ แต่ภายใต้ปลั๊กอินคุณจะสังเกตเห็นสคริปต์การทำให้สมบูรณ์อัตโนมัติสำหรับบทบาทที่หลากหลาย เพื่อให้ได้แนวคิดของความสามารถ

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