zsh เสร็จสมบูรณ์: รับชื่อไฟล์จากไดเรกทอรีเฉพาะ


10

ตกลงพื้นหลังเล็กน้อย: ฉันใช้ Mac และทำเท่าที่จะทำได้ใน CLI

โดยเฉพาะอย่างยิ่งฉันมักจะปรากฏในแท่ง USB cpหรือmvไฟล์บนแล้วต้องการออกทันที (ยกเลิกการต่อเชื่อมและยกเลิกการเชื่อมต่อ) โดยทั่วไปสามารถทำได้ด้วยการกดแป้นจำนวนหนึ่งยกเว้นการยกเลิกการต่อเชื่อมซึ่งต้องการ (ใน 10.7) ไปที่พื้นที่เดสก์ท็อปที่ว่างเปล่า ตรงไปตรงมาขั้นตอนการยกเลิกการเมานต์นี้เป็นไปตามคำสั่งหลายขนาดซึ่งเป็นส่วนที่ใช้เวลามากที่สุดและน่าเบื่อที่สุดของกระบวนการ

มันจะเป็นธรรมชาติและมีประสิทธิภาพมากขึ้นที่จะพิมพ์พูด:

ej<tab> J<tab>

พูดว่าอุปกรณ์ USB ของฉันติดตั้งที่ / Volumes / Jefferson สิ่งที่ฉันคาดหวังที่จะได้รับจากการกดปุ่ม 6 ครั้งของฉันคือ:

eject /Volumes/Jefferson

สิ่งนี้ควรรันคำสั่ง:

diskutil unmount /Volumes/Jefferson

ดังนั้นฉันจึงเขียนฟังก์ชันเล็ก ๆ ที่ดี:

eject() {
    diskutil unmount /Volumes/$1
}

และฟังก์ชั่นเสร็จสมบูรณ์ที่จะไปกับมัน:

compdef '_files -g "/Volumes/*"' eject  

อย่างไรก็ตามมีปัญหากับสิ่งนี้ _filesฟังก์ชั่นสร้างเส้นทางที่สมบูรณ์ ตอนนี้ฉันสามารถเปลี่ยนบรรทัดในฟังก์ชั่น "eject" ของฉันเป็นdiskutil unmount $1และสิ่งต่าง ๆ จะใช้งานได้ แต่จากนั้นฉันก็ไม่สามารถพิมพ์อักษรตัวแรกของชื่อจุดเมานท์ได้เนื่องจากเส้นทางเริ่มต้นด้วย / Volumes / ตัวอย่างเช่นถ้าฉันพิมพ์J<tabฉันจะได้รับการเติมข้อความอัตโนมัติสำหรับไฟล์ใน PWD ฉันจะต้องพิมพ์/Volumes/J<tab>เพื่อให้ได้ความสมบูรณ์ที่ต้องการ

ดังนั้นมีฟังก์ชั่นเสร็จสมบูรณ์ที่จะคว้าชื่อไฟล์จากตำแหน่งที่กำหนดไว้ล่วงหน้าที่เฉพาะเจาะจงมากกว่าที่จะสร้างเส้นทางที่สมบูรณ์?

ฉันอยากจะกดปุ่มนี้ลงไปถึง 6 ครั้ง

คำตอบ:


12
_files -W /Volumes

_path_filesดูเอกสารของ


ที่สมบูรณ์แบบ! ฉันรู้ว่าจะต้องสร้างขึ้นมาขอบคุณมาก!
Marshall Eubanks

ดังนั้นฉันจะให้ฟังก์ชั่นเติมเต็มนี้โดยอัตโนมัติได้อย่างไร ฉันพยายามวางcompdefบรรทัดในไฟล์ที่_ejectอยู่ใน fpath ของฉัน ฉันลองด้วยและไม่มีบรรทัด autoload ฉันดูคำแนะนำหลาย ๆ อย่างเกี่ยวกับฟังก์ชั่นการเติมเต็มและไม่มีใครพูดถึงวิธีการทำตัวอย่างง่ายๆอย่างนี้และไม่มีอะไรที่ฉันได้ลองจากตัวอย่างที่ใช้
Marshall Eubanks

@marshaul คุณต้องมี#compdef ejectบรรทัดแรกของไฟล์ตามด้วยรหัสจริง ดูภายใต้ไฟล์โหลดอัตโนมัติในคู่มือ หากคุณไม่ได้เพิ่มบรรทัดในตอนแรกคุณอาจต้องลบแคช~/.zcompdumpและรีสตาร์ท zsh
Gilles 'หยุดความชั่วร้าย'

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