มีโหมดการจับคู่แบบคลุมเครือสำหรับเชลล์ zsh หรือไม่


22

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

ตัวอย่างการใช้งานของโหมดนี้ในโปรแกรมแก้ไขข้อความ:

ผู้ใช้พยายามกรอกคำว่า longWordNameThatTheyDontWantToWriteByHand และพวกเขาสามารถทำได้โดยพิมพ์เช่นตัวอักษรตัวแรกและตัวพิมพ์ใหญ่บางตัว ดังนั้นการพิมพ์lwntสามารถทำได้ทั้งคำ

คำถามของฉันคือ: มีโหมดหรือสิ่งที่คล้ายกันที่ฉันสามารถใช้กับเปลือก zsh หรือไม่

คำตอบ:


27

ฉันมีสิ่งนี้ในของฉัน .zshrc

# 0 -- vanilla completion (abc => abc)
# 1 -- smart case completion (abc => Abc)
# 2 -- word flex completion (abc => A-big-Car)
# 3 -- full flex completion (abc => ABraCadabra)
zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'

มันเพิ่มการจับคู่แบบคลุมเครือแบบเต็มไปยังเอ็นzshจิ้นการเสร็จ มันขาดกึ๋นสุดของข้อความประเสริฐ lwnt -> longWordNameThatTheyDontWantToWriteByHandแต่ใช่มันจะเสร็จสมบูรณ์


1
ฉันเพิ่งพบข้อผิดพลาด: ไม่ทำงานสำหรับชื่อไฟล์ที่มีช่องว่างให้อะไรคุณพิมพ์คุณหลังจากพื้นที่☹ Ie ไม่สมบูรณ์ในการstack install && vlc ~/Music/erf stack install && vlc ~/Music/FGFC820\ -\ Perfect\ War.mp3
สวัสดีแองเจิล

5
@ Hi-Angel เฮ้ขอบคุณสำหรับการชนนี้ จริง ๆ แล้วฉันใช้'r:|?=** m:{a-z\-}={A-Z\_}'ตอนนี้ซึ่งเป็นพวงง่ายกว่าและไม่ประสบปัญหาที่คุณอธิบาย
PythonNut

เยี่ยมมาก! บางทีคุณอาจสร้างปลั๊กอินด้วยรหัสนี้ เพียงเพื่อให้ง่ายต่อการค้นหา
Julien__

15

ตรวจสอบโครงการของฉันfzf

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

สำหรับ zsh จัดเตรียมการโยงคีย์ต่อไปนี้:

  • CTRL-T - วางเส้นทางไฟล์ที่เลือกลงในบรรทัดคำสั่ง
  • CTRL-R - วางคำสั่งที่เลือกจากประวัติลงในบรรทัดคำสั่ง
  • ALT-C - cd ลงในไดเรกทอรีที่เลือก

และโหมดเสร็จสิ้นเลือน:

# Files under current directory
# - You can select multiple items with TAB key
vim **<TAB>

# Files under parent directory
vim ../**<TAB>

# Files under parent directory that match `fzf`
vim ../fzf**<TAB>

# Files under your home directory
vim ~/**<TAB>

# Directories under current directory (single-selection)
cd **<TAB>

# Directories under ~/github that match `fzf`
cd ~/github/fzf**<TAB>

# Process IDs. Can select multiple processes with TAB or Shift-TAB
kill -9 <TAB>

# Host names
ssh **<TAB>
telnet **<TAB>

# Environment variables / aliases
unset **<TAB>
export **<TAB>
unalias **<TAB>

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