ขอขอบคุณเป็นพิเศษสำหรับ:
Warp เป็นเทอร์มินัลแบบ Rust-based ที่ทันสมัย พร้อมด้วย AI ในตัว เพื่อให้คุณและทีมของคุณสามารถสร้างซอฟต์แวร์ที่ยอดเยี่ยมได้รวดเร็วยิ่งขึ้น
เยี่ยมชม warp.dev เพื่อเรียนรู้เพิ่มเติม
fzf เป็นโปรแกรมค้นหาฟัซซี่บรรทัดคำสั่งที่ใช้งานทั่วไป
เป็นโปรแกรมกรองแบบโต้ตอบสำหรับรายการทุกประเภท ไฟล์, ประวัติคำสั่ง, กระบวนการ, ชื่อโฮสต์, บุ๊กมาร์ก, คอมมิตคอมไพล์ ฯลฯ โดยจะใช้อัลกอริธึมการจับคู่แบบ "คลุมเครือ" ดังนั้นคุณจึงสามารถพิมพ์รูปแบบด้วยอักขระที่ถูกละเว้นได้อย่างรวดเร็ว และยังคงได้ผลลัพธ์ที่คุณต้องการ
แบบพกพา — กระจายเป็นไบนารีเดียวเพื่อให้ติดตั้งได้ง่าย
รวดเร็วทันใจ — โค้ดที่ได้รับการปรับปรุงประสิทธิภาพระดับสูงจะประมวลผลรายการนับล้านรายการได้ทันที
อเนกประสงค์อย่างยิ่ง — ปรับแต่งได้อย่างเต็มที่ผ่านกลไกการเชื่อมโยงเหตุการณ์
รวมแบตเตอรี่ — รวมการทำงานร่วมกับ bash, zsh, fish, Vim และ Neovim
ฉันขอขอบคุณผู้สนับสนุนโครงการนี้ทุกคนที่ทำให้ฉันสามารถปรับปรุง fzf ต่อไปได้
หากคุณต้องการสนับสนุนโครงการนี้ โปรดไปที่ https://github.com/sponsors/junegunn
การติดตั้ง
การใช้โฮมบรูว์
แพ็คเกจลินุกซ์
แพ็คเกจวินโดวส์
การใช้คอมไพล์
การเปิดตัวไบนารี
การตั้งค่าการรวมเชลล์
ปลั๊กอิน Vim/Neovim
กำลังอัพเกรด fzf
อาคารเอฟเอฟเอฟ
การใช้งาน
--height
โหมดความสูง
--tmux
โหมด tmux
การใช้เครื่องมือค้นหา
โหมดการแสดงผล
ไวยากรณ์การค้นหา
ตัวแปรสภาพแวดล้อม
ตัวเลือก
สาธิต
ตัวอย่าง
การผูกคีย์สำหรับบรรทัดคำสั่ง
เสร็จสิ้นไม่ชัดเจนสำหรับ bash และ zsh
ไฟล์และไดเร็กทอรี
รหัสกระบวนการ
ชื่อโฮสต์
ตัวแปรสภาพแวดล้อม / นามแฝง
การตั้งค่า
คำสั่งที่รองรับ
การปรับแต่งแบบคลุมเครือแบบกำหนดเอง
ปลั๊กอินเป็นกลุ่ม
หัวข้อขั้นสูง
1. อัปเดตรายการกระบวนการโดยกด CTRL-R
2. สลับระหว่างแหล่งข้อมูลโดยการกด CTRL-D หรือ CTRL-F
3. การรวม ripgrep แบบโต้ตอบ
ผลงาน
การดำเนินการโปรแกรมภายนอก
กลายเป็นกระบวนการที่แตกต่างออกไป
กำลังโหลดรายชื่อผู้สมัครอีกครั้ง
หน้าต่างแสดงตัวอย่าง
การดูตัวอย่างรูปภาพ
เคล็ดลับ
ด้วยความเคารพ .gitignore
เปลือกปลา
สนามเด็กเล่นธีม fzf
โครงการที่เกี่ยวข้อง
ใบอนุญาต
คุณสามารถใช้ Homebrew (บน macOS หรือ Linux) เพื่อติดตั้ง fzf
ชงติดตั้ง fzf
สำคัญ
หากต้องการตั้งค่าการรวมเชลล์ (การเชื่อมโยงคีย์และการเสร็จสิ้นแบบคลุมเครือ) โปรดดูคำแนะนำด้านล่าง
fzf ยังมีให้บริการผ่าน MacPorts: sudo port install fzf
ผู้จัดการแพ็คเกจ | การกระจายลินุกซ์ | สั่งการ |
---|---|---|
เอพีเค | อัลไพน์ลินุกซ์ | sudo apk add fzf |
อพาร์ทเมนท์ | เดเบียน 9+/อูบุนตู 19.10+ | sudo apt install fzf |
คอนดา | conda install -c conda-forge fzf | |
ดีเอ็นเอฟ | หมวกฟาง | sudo dnf install fzf |
ห้าม | NixOS เป็นต้น | nix-env -iA nixpkgs.fzf |
แพคแมน | อาร์ค ลินุกซ์ | sudo pacman -S fzf |
แพคเกจ | ฟรีBSD | pkg install fzf |
แพ็คกิน | เน็ตบีเอสดี | pkgin install fzf |
pkg_add | OpenBSD | pkg_add fzf |
การขนส่ง | เจนทู | emerge --ask app-shells/fzf |
สแพ็ค | spack install fzf | |
เอ็กซ์บีพีเอส | โมฆะลินุกซ์ | sudo xbps-install -S fzf |
ซิปเปอร์ | openSUSE | sudo zypper install fzf |
สำคัญ
หากต้องการตั้งค่าการรวมเชลล์ (การเชื่อมโยงคีย์และการเสร็จสิ้นแบบคลุมเครือ) โปรดดูคำแนะนำด้านล่าง
บน Windows fzf มีให้บริการผ่าน Chocolatey, Scoop, Winget และ MSYS2:
ผู้จัดการแพ็คเกจ | สั่งการ |
---|---|
ช็อคโกแลต | choco install fzf |
ตัก | scoop install fzf |
วิงเก็ต | winget install fzf |
MSYS2 (แพ็กแมน) | pacman -S $MINGW_PACKAGE_PREFIX-fzf |
หรือคุณสามารถ "git clone" ที่เก็บข้อมูลนี้ไปยังไดเร็กทอรีใดก็ได้และรันสคริปต์การติดตั้ง
git clone --ความลึก 1 https://github.com/junegunn/fzf.git ~/.fzf~/.fzf/install
สคริปต์การติดตั้งจะเพิ่มบรรทัดลงในไฟล์การกำหนดค่าเชลล์ของคุณเพื่อแก้ไข $PATH
และตั้งค่าการรวมเชลล์
คุณสามารถดาวน์โหลดไบนารี fzf อย่างเป็นทางการได้จากหน้าเผยแพร่
https://github.com/junegunn/fzf/releases
เพิ่มบรรทัดต่อไปนี้ลงในไฟล์คอนฟิกูเรชันเชลล์ของคุณ
ทุบตี
# ตั้งค่าการเชื่อมโยงคีย์ fzf และการดำเนินการเสร็จสิ้นแบบคลุมเครือ "$(fzf --bash)"
zsh
# ตั้งค่าการเชื่อมโยงคีย์ fzf และแหล่งข้อมูลที่สมบูรณ์แบบคลุมเครือ <(fzf --zsh)
ปลา
# ตั้งค่า fzf keybindingsfzf --fish | แหล่งที่มา
บันทึก
--bash
, --zsh
และ --fish
ตัวเลือกมีเฉพาะใน fzf 0.48.0 หรือใหม่กว่า หากคุณมี fzf เวอร์ชันเก่ากว่า หรือต้องการการควบคุมที่ละเอียดยิ่งขึ้น คุณสามารถระบุแหล่งที่มาของไฟล์สคริปต์แต่ละไฟล์ในไดเร็กทอรี /shell ตำแหน่งของไฟล์อาจแตกต่างกันไปขึ้นอยู่กับผู้จัดการแพ็คเกจที่คุณใช้ โปรดดูเอกสารประกอบแพ็คเกจสำหรับข้อมูลเพิ่มเติม (เช่น apt show fzf
)
เคล็ดลับ
คุณสามารถปิดใช้งานการรวม CTRL-T หรือ ALT-C ได้โดยการตั้งค่า FZF_CTRL_T_COMMAND
หรือ FZF_ALT_C_COMMAND
ให้เป็นสตริงว่างเมื่อจัดหาสคริปต์ ตัวอย่างเช่น หากต้องการปิดใช้งานการผูก ALT-C:
ทุบตี: FZF_ALT_C_COMMAND= eval "$(fzf --bash)"
zsh: FZF_ALT_C_COMMAND= source <(fzf --zsh)
ปลา: fzf --fish | FZF_ALT_C_COMMAND= source
การตั้งค่าตัวแปรหลังจากการซอร์สสคริปต์จะไม่มีผลใดๆ
หากคุณใช้ vim-plug ให้เพิ่มสิ่งนี้ลงในไฟล์การกำหนดค่า Vim ของคุณ:
เสียบ 'junegunn/fzf', { 'do': { -> fzf#install() } } เสียบ 'junegunn/fzf.vim'
junegunn/fzf
มีฟังก์ชันไลบรารีพื้นฐาน
fzf#install()
ตรวจสอบให้แน่ใจว่าคุณมีไบนารีล่าสุด
junegunn/fzf.vim
เป็นโปรเจ็กต์แยกต่างหากที่ให้คำสั่งที่มีประโยชน์มากมาย
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการบูรณาการ Vim โปรดดู README-VIM.md
เคล็ดลับ
หากคุณใช้ Neovim และชอบปลั๊กอินที่ใช้ Lua ลองดู fzf-lua
fzf กำลังได้รับการพัฒนาอย่างต่อเนื่อง และคุณอาจต้องการอัปเกรดเป็นครั้งคราว โปรดปฏิบัติตามคำแนะนำด้านล่าง ขึ้นอยู่กับวิธีการติดตั้งที่ใช้
git: cd ~/.fzf && git pull && ./install
ชง: brew update; brew upgrade fzf
macports: sudo port upgrade fzf
ช็อคโกแลต: choco upgrade fzf
เป็นกลุ่มปลั๊ก: :PlugUpdate fzf
ดูที่ BUILD.md
fzf จะเปิดตัวค้นหาแบบโต้ตอบ อ่านรายการจาก STDIN และเขียนรายการที่เลือกไปที่ STDOUT
ค้นหา * - พิมพ์ f | fzf > เลือกแล้ว
หากไม่มีไปป์ STDIN fzf จะสำรวจระบบไฟล์ภายใต้ไดเร็กทอรีปัจจุบันเพื่อรับรายการไฟล์
เป็นกลุ่ม $(fzf)
บันทึก
คุณสามารถแทนที่ลักษณะการทำงานเริ่มต้นได้
โดยการตั้งค่า $FZF_DEFAULT_COMMAND
เป็นคำสั่งที่สร้างรายการที่ต้องการ
หรือโดยการตั้งค่าตัวเลือก --walker
, --walker-root
และ --walker-skip
ใน $FZF_DEFAULT_OPTS
คำเตือน
วิธีแก้ปัญหาที่มีประสิทธิภาพมากกว่าคือการใช้ xargs
แต่เราได้นำเสนอข้างต้นแล้วเนื่องจากเข้าใจได้ง่ายกว่า
fzf --print0 | xargs -0 -o เป็นกลุ่ม
เคล็ดลับ
fzf ยังมีความสามารถในการเปลี่ยนตัวเองเป็นกระบวนการที่แตกต่างออกไป
fzf --bind 'ป้อน: กลายเป็น (กลุ่ม {})'
ดูการเปลี่ยนเป็นกระบวนการอื่นสำหรับข้อมูลเพิ่มเติม
CTRL-K
/ CTRL-J
(หรือ CTRL-P
/ CTRL-N
) เพื่อเลื่อนเคอร์เซอร์ขึ้นและลง
Enter
รหัสเพื่อเลือกรายการ CTRL-C
/ CTRL-G
/ ESC
เพื่อออก
ในโหมดเลือกหลายรายการ ( -m
), TAB
และ Shift-TAB
เพื่อทำเครื่องหมายหลายรายการ
การผูกคีย์สไตล์ Emacs
เมาส์: เลื่อน คลิก ดับเบิลคลิก; shift-click และ shift-scroll ในโหมดเลือกหลายรายการ
โดยค่าเริ่มต้น fzf จะทำงานในโหมดเต็มหน้าจอ แต่มีโหมดการแสดงผลอื่นๆ
--height
โหมดความสูง ด้วย --height HEIGHT[%]
, fzf จะเริ่มใต้เคอร์เซอร์ตามความสูงที่กำหนด
fzf --ความสูง 40%
รูปแบบ reverse
และ --border
เข้ากันได้ดีกับตัวเลือกนี้
fzf --ความสูง 40% --รูปแบบย้อนกลับ --border
โดยการเพิ่ม ~
ไว้ข้างหน้า คุณกำลังตั้งค่าความสูงสูงสุด
# จะใช้เวลาน้อยที่สุดในการแสดง listeq 3 | fzf --ความสูง ~100% ภาคต่อ 3000 | fzf --ความสูง ~100%
ค่าความสูงอาจเป็นจำนวนลบได้
# ความสูงของหน้าจอ - 3fzf --height -3
--tmux
โหมด tmux ด้วยตัวเลือก --tmux
fzf จะเริ่มทำงานในป๊อปอัป tmux
# --tmux [center|top|bottom|left|right][,SIZE[%]][,SIZE[%]]fzf --tmux center # Center, 50% width and heightfzf --tmux 80% # Center, ความกว้างและความสูง 80% fzf --tmux 100%,50% # ตรงกลาง, ความกว้าง 100% และความสูง 50%fzf --tmux ซ้าย,40% # ซ้าย, ความกว้าง 40%fzf --tmux ซ้าย,40%,90% # ซ้าย, ความกว้าง 40%, ความสูง 90%fzf --tmux ด้านบน,40% # ด้านบน, ความสูง 40%fzf --tmux ด้านล่าง,80%,40% # ด้านล่าง, 80 % ความสูง ความสูง 40%
--tmux
จะถูกละเว้นอย่างเงียบๆ เมื่อคุณไม่ได้อยู่บน tmux
บันทึก
หากคุณติดอยู่กับ tmux เวอร์ชันเก่าที่ไม่รองรับป๊อปอัป หรือหากคุณต้องการเปิด fzf ในบานหน้าต่าง tmux ทั่วไป ลองดูสคริปต์ fzf-tmux
เคล็ดลับ
คุณสามารถเพิ่มตัวเลือกเหล่านี้ใน $FZF_DEFAULT_OPTS
เพื่อนำไปใช้ตามค่าเริ่มต้น ตัวอย่างเช่น,
# เปิดในป๊อปอัป tmux หากบน tmux มิฉะนั้นให้ใช้ --height modeexport FZF_DEFAULT_OPTS='--height 40% --tmux bottom,40% --layout Reverse --border top'
เว้นแต่จะระบุไว้เป็นอย่างอื่น fzf จะเริ่มต้นใน "โหมดการค้นหาแบบขยาย" ซึ่งคุณสามารถพิมพ์คำค้นหาหลายคำโดยคั่นด้วยช่องว่าง เช่น ^music .mp3$ sbtrkt !fire
โทเค็น | ประเภทการจับคู่ | คำอธิบาย |
---|---|---|
sbtrkt | การจับคู่คลุมเครือ | รายการที่ตรงกับ sbtrkt |
'wild | การทำงานแบบตรงทั้งหมด (ที่ยกมา) | รายการที่ประกอบด้วย wild |
'wild' | การจับคู่ขอบเขตแบบตรงทั้งหมด (ยกมาทั้งสองด้าน) | รายการที่มีขอบเขตคำที่ wild |
^music | คำนำหน้าตรงทั้งหมด | รายการที่ขึ้นต้นด้วย music |
.mp3$ | คำต่อท้ายที่ตรงทั้งหมด | รายการที่ลงท้ายด้วย .mp3 |
!fire | การจับคู่แบบผกผัน | รายการที่ไม่รวม fire |
!^music | ผกผันคำนำหน้าตรงทั้งหมด | รายการที่ไม่ได้ขึ้นต้นด้วย music |
!.mp3$ | ผกผันคำต่อท้ายตรงทั้งหมด | รายการที่ไม่ได้ลงท้ายด้วย .mp3 |
หากคุณไม่ชอบการจับคู่แบบคลุมเครือและไม่ต้องการ "อ้างอิง" ทุกคำ ให้เริ่ม fzf ด้วยตัวเลือก -e
หรือ --exact
โปรดทราบว่าเมื่อ --exact
ถูกตั้งค่า '
-prefix "unquotes" คำศัพท์
คำที่เป็นอักขระแท่งเดียวทำหน้าที่เป็นตัวดำเนินการ OR ตัวอย่างเช่น แบบสอบถามต่อไปนี้จะจับคู่รายการที่ขึ้นต้นด้วย core
และลงท้ายด้วย go
, rb
หรือ py
^core go$ | rb$ | py$
FZF_DEFAULT_COMMAND
คำสั่งเริ่มต้นที่จะใช้เมื่ออินพุตเป็น tty
เช่น export FZF_DEFAULT_COMMAND='fd --type f'
FZF_DEFAULT_OPTS
ตัวเลือกเริ่มต้น
เช่น export FZF_DEFAULT_OPTS="--layout=reverse --inline-info"
FZF_DEFAULT_OPTS_FILE
หากคุณต้องการจัดการตัวเลือกเริ่มต้นในไฟล์ ให้ตั้งค่าตัวแปรนี้ให้ชี้ไปที่ตำแหน่งของไฟล์
เช่น export FZF_DEFAULT_OPTS_FILE=~/.fzfrc
คำเตือน
FZF_DEFAULT_COMMAND
ไม่ได้ใช้โดยการรวมเชลล์เนื่องจากข้อกำหนดที่แตกต่างกันเล็กน้อย
CTRL-T
รัน $FZF_CTRL_T_COMMAND
เพื่อรับรายการไฟล์และไดเร็กทอรี
ALT-C
รัน $FZF_ALT_C_COMMAND
เพื่อรับรายการไดเรกทอรี
vim ~/**
รัน fzf_compgen_path()
โดยมีคำนำหน้า ( ~/
) เป็นอาร์กิวเมนต์แรก
cd foo**
รัน fzf_compgen_dir()
โดยมีคำนำหน้า ( foo
) เป็นอาร์กิวเมนต์แรก
ตัวเลือกที่ใช้ได้จะอธิบายไว้ภายหลังในเอกสารนี้
ดู man page ( man fzf
) สำหรับรายการตัวเลือกทั้งหมด
หากคุณเรียนรู้จากการดูวิดีโอ ลองดู screencast นี้โดย @samoshkin เพื่อสำรวจฟีเจอร์ fzf
หน้า Wiki ของตัวอย่าง
ข้อสงวนสิทธิ์: ตัวอย่างในหน้านี้ได้รับการดูแลโดยชุมชนและไม่ได้รับการทดสอบอย่างละเอียด
ตัวอย่าง fzf ขั้นสูง
ด้วยการตั้งค่าการรวมเชลล์ คุณสามารถใช้การผูกคีย์ต่อไปนี้ใน bash, zsh และ fish
CTRL-T
- วางไฟล์และไดเร็กทอรีที่เลือกลงในบรรทัดคำสั่ง
คุณสามารถแทนที่ลักษณะการทำงานได้โดยการตั้งค่า FZF_CTRL_T_COMMAND
ให้เป็นคำสั่งที่กำหนดเองซึ่งสร้างรายการที่ต้องการ
หรือคุณสามารถตั้งค่าตัวเลือก --walker*
ใน FZF_CTRL_T_OPTS
รายการถูกสร้างขึ้นโดยใช้ตัวเลือก --walker file,dir,follow,hidden
ตั้งค่า FZF_CTRL_T_OPTS
ให้ส่งตัวเลือกเพิ่มเติมไปที่ fzf
# ดูตัวอย่างเนื้อหาไฟล์โดยใช้ bat (https://github.com/sharkdp/bat)export FZF_CTRL_T_OPTS=" --walker-skip .git,node_modules,target --preview 'bat -n --color=always {}' - -bind 'ctrl-/:change-preview-window(down|hidden|)'"
สามารถปิดใช้งานได้โดยการตั้งค่า FZF_CTRL_T_COMMAND
เป็นสตริงว่างเมื่อจัดหาสคริปต์
CTRL-R
- วางคำสั่งที่เลือกจากประวัติลงในบรรทัดคำสั่ง
หากคุณต้องการดูคำสั่งตามลำดับเวลา ให้กด CTRL-R
อีกครั้ง ซึ่งจะสลับการเรียงลำดับตามความเกี่ยวข้อง
กด CTRL-/
หรือ ALT-/
เพื่อสลับการตัดบรรทัด
ตั้งค่า FZF_CTRL_R_OPTS
ให้ส่งตัวเลือกเพิ่มเติมไปที่ fzf
# CTRL-Y เพื่อคัดลอกคำสั่งลงในคลิปบอร์ดโดยใช้ pbcopyexport FZF_CTRL_R_OPTS=" --bind 'ctrl-y:execute-silent(echo -n {2..} | pbcopy)+abort' --color header:italic --header 'กด CTRL-Y เพื่อคัดลอกคำสั่งไปยังคลิปบอร์ด'"
ALT-C
- cd ลงในไดเร็กทอรีที่เลือก
หรือคุณสามารถตั้งค่าตัวเลือก --walker-*
ใน FZF_ALT_C_OPTS
รายการถูกสร้างขึ้นโดยใช้ตัวเลือก --walker dir,follow,hidden
ตั้งค่า FZF_ALT_C_COMMAND
เพื่อแทนที่คำสั่งเริ่มต้น
ตั้งค่า FZF_ALT_C_OPTS
ให้ส่งตัวเลือกเพิ่มเติมไปที่ fzf
# พิมพ์โครงสร้างต้นไม้ในหน้าต่างแสดงตัวอย่างส่งออก FZF_ALT_C_OPTS=" --walker-skip .git,node_modules,target --preview 'tree -C {}'"
สามารถปิดใช้งานได้โดยตั้งค่า FZF_ALT_C_COMMAND
เป็นสตริงว่างเมื่อจัดหาสคริปต์
โหมดการแสดงผลสำหรับการโยงเหล่านี้สามารถกำหนดค่าแยกกันผ่าน FZF_{CTRL_T,CTRL_R,ALT_C}_OPTS
หรือทั่วโลกผ่าน FZF_DEFAULT_OPTS
(เช่น FZF_CTRL_R_OPTS='--tmux bottom,60% --height 60% --border top'
)
เคล็ดลับเพิ่มเติมสามารถพบได้ในหน้าวิกิ
การเติมไฟล์และไดเร็กทอรีแบบคลุมเครือสามารถทริกเกอร์ได้หากคำที่อยู่หน้าเคอร์เซอร์ลงท้ายด้วยลำดับทริกเกอร์ ซึ่งเป็นค่าเริ่มต้น **
COMMAND [DIRECTORY/][FUZZY_PATTERN]**
# ไฟล์ภายใต้ไดเรกทอรีปัจจุบัน# - คุณสามารถเลือกหลายรายการด้วย TAB keyvim **# ไฟล์ภายใต้ไดเรกทอรีหลักvim ../** # ไฟล์ภายใต้ไดเรกทอรีหลักที่ตรงกับ `fzf`vim ../fzf* * # ไฟล์ภายใต้โฮมไดเร็กตอรี่ของคุณ ~/** # ไดเร็กทอรีภายใต้ไดเร็กทอรีปัจจุบัน (selection) cd ** # ไดเร็กทอรีภายใต้ ~/github ที่ตรงกัน `fzf`cd ~/github/fzf**
การเสร็จสิ้นแบบคลุมเครือสำหรับ PID นั้นมีไว้สำหรับคำสั่ง kill
# สามารถเลือกหลายกระบวนการด้วยคีย์หรือ -9 **
สำหรับคำสั่ง ssh และ telnet จะมีการระบุชื่อโฮสต์ให้สมบูรณ์อย่างคลุมเครือ ชื่อถูกดึงมาจาก /etc/hosts และ ~/.ssh/config
ssh **เทลเน็ต **
ไม่ได้ตั้งค่า **ส่งออก ** unalias **
# ใช้ ~~ เป็นลำดับทริกเกอร์แทนค่าเริ่มต้น **export FZF_COMPLETION_TRIGGER='~~'# ตัวเลือกเพื่อ fzf commandexport FZF_COMPLETION_OPTS='--border --info=inline'# Use fd (https://github.com/ sharkdp/fd) สำหรับการแสดงรายการผู้สมัครเส้นทาง# - อาร์กิวเมนต์แรกของฟังก์ชัน ($1) คือเส้นทางพื้นฐานในการเริ่มต้นการสำรวจเส้นทาง# - ดูซอร์สโค้ด (completion.{bash,zsh}) สำหรับรายละเอียด._fzf_compgen_path() { fd --hidden --follow --exclude ".git" "$1"}# ใช้ fd เพื่อสร้างรายการสำหรับการเสร็จสิ้นไดเรกทอรี_fzf_compgen_dir() { fd --type d --hidden --follow --exclude ".git" "$1"}# การปรับแต่งตัวเลือก fzf ขั้นสูงผ่านฟังก์ชัน _fzf_comprun# - อาร์กิวเมนต์แรกของฟังก์ชันคือชื่อของคำสั่ง # - คุณควรตรวจสอบให้แน่ใจว่าได้ส่งอาร์กิวเมนต์ที่เหลือไปที่ fzf._fzf_comprun() { คำสั่งท้องถิ่น =$1 กะ case "$command" incd) fzf --ดูตัวอย่าง 'tree -C {} | หัว -200' "$@" ;; ส่งออก | ไม่ได้ตั้งค่า) fzf --ดูตัวอย่าง "eval 'echo $'{}" "$@" ;; ssh) fzf --ดูตัวอย่าง 'ขุด {}' "$@" ;;*) fzf --ดูตัวอย่าง 'bat -n --color=always {}' "$@" ;; อีแซค}
บน bash การเสร็จสิ้นแบบคลุมเครือจะเปิดใช้งานสำหรับชุดคำสั่งที่กำหนดไว้ล่วงหน้าเท่านั้น ( complete | grep _fzf
เพื่อดูรายการ) แต่คุณสามารถเปิดใช้งานสำหรับคำสั่งอื่นได้เช่นกันโดยใช้ฟังก์ชันตัวช่วย _fzf_setup_completion
# การใช้งาน: _fzf_setup_completion path|dir|var|alias|host COMMANDS..._fzf_setup_completion path ag git kubectl _fzf_setup_completion แผนผัง dir
(API การเติมคำให้สมบูรณ์แบบกำหนดเองอยู่ระหว่างการทดลองและอาจมีการเปลี่ยนแปลงได้)
สำหรับคำสั่งชื่อ "COMMAND" ให้กำหนดฟังก์ชัน _fzf_complete_COMMAND
โดยใช้ _fzf_complete
helper
# การปรับแต่งแบบคลุมเครือแบบกำหนดเองสำหรับคำสั่ง "doge"# เช่น doge **_fzf_complete_doge() { _fzf_complete --multi --reverse --prompt="doge> " -- "$@" < <( ก้องมาก ก้องว้าว ก้องเช่น ก้อง doge )}
อาร์กิวเมนต์ก่อนหน้า --
เป็นตัวเลือกของ fzf
หลังจาก --
เพียงส่งอาร์กิวเมนต์การเสร็จสิ้นดั้งเดิมไม่เปลี่ยนแปลง ( "$@"
)
จากนั้น เขียนชุดคำสั่งที่สร้างตัวเลือกที่เสร็จสมบูรณ์และป้อนเอาต์พุตไปยังฟังก์ชันโดยใช้การทดแทนกระบวนการ ( < <(...)
)
zsh จะรับฟังก์ชันโดยอัตโนมัติโดยใช้หลักการตั้งชื่อ แต่ใน bash คุณต้องเชื่อมโยงฟังก์ชันกับคำสั่งด้วยตนเองโดยใช้คำสั่ง complete
[ -n "$BASH" ] && เสร็จสิ้น -F _fzf_complete_doge -o default -o bashdefault doge
หากคุณต้องการโพสต์ประมวลผลเอาต์พุตจาก fzf ให้กำหนด _fzf_complete_COMMAND_post
ดังนี้
_fzf_complete_foo() { _fzf_complete --multi --reverse --header-lines=3 -- "$@" < <( ls -al )}_fzf_complete_foo_post() { awk '{พิมพ์ $NF}'} [ -n "$BASH" ] && เสร็จสิ้น -F _fzf_complete_foo -o default -o bashdefault foo
ดู README-VIM.md
fzf เร็วมาก ประสิทธิภาพไม่ควรเป็นปัญหาในกรณีการใช้งานส่วนใหญ่ อย่างไรก็ตาม คุณอาจต้องการทราบตัวเลือกต่างๆ ที่อาจส่งผลต่อประสิทธิภาพการทำงาน
--ansi
บอกให้ fzf แยกและแยกวิเคราะห์รหัสสี ANSI ในอินพุต และทำให้การสแกนครั้งแรกช้าลง ดังนั้นจึงไม่แนะนำให้คุณเพิ่มลงใน $FZF_DEFAULT_OPTS
ของคุณ
--nth
ทำให้ fzf ช้าลงเพราะต้องโทเค็นแต่ละบรรทัด
--with-nth
ทำให้ fzf ช้าลงเนื่องจาก fzf ต้องโทเค็นและประกอบแต่ละบรรทัดอีกครั้ง
คุณสามารถตั้งค่าการเชื่อมโยงคีย์สำหรับการเริ่มต้นกระบวนการภายนอกโดยไม่ต้องออกจาก fzf ( execute
, execute-silent
)
# กด F1 เพื่อเปิดไฟล์โดยมีค่าน้อยกว่าโดยไม่ต้องออกจาก fzf# กด CTRL-Y เพื่อคัดลอกบรรทัดไปยังคลิปบอร์ดและยกเลิก fzf (ต้องใช้ pbcopy)fzf --bind 'f1:execute(less -f {}),ctrl-y: ดำเนินการเงียบ (echo {} | pbcopy) + ยกเลิก '
ดูส่วน KEY BINDINGS ของหน้า man สำหรับรายละเอียด
become(...)
คล้ายกับ execute(...)
/ execute-silent(...)
อธิบายไว้ข้างต้น แต่แทนที่จะดำเนินการคำสั่งและกลับมาเป็น fzf เมื่อเสร็จสิ้น มันเปลี่ยน fzf ให้เป็นกระบวนการใหม่สำหรับ สั่งการ.
fzf --bind 'ป้อน: กลายเป็น (กลุ่ม {})'
เมื่อเปรียบเทียบกับการทดแทนคำสั่งที่ดูเหมือนจะเทียบเท่า vim "$(fzf)"
วิธีการนี้มีข้อดีหลายประการ:
Vim จะไม่เปิดไฟล์เปล่าเมื่อคุณยุติ fzf ด้วย CTRL-C
Vim จะไม่เปิดไฟล์เปล่าเมื่อคุณกด ENTER ในผลลัพธ์ที่ว่างเปล่า
สามารถจัดการการเลือกได้หลายรายการแม้ว่าจะมีช่องว่างก็ตาม
fzf --multi --bind 'ป้อน: กลายเป็น (กลุ่ม {+})'
เพื่อความยุติธรรมให้ใช้งาน fzf --print0 | xargs -0 -o vim
แทน vim "$(fzf)"
แก้ไขปัญหาทั้งหมดที่กล่าวถึง อย่างไรก็ตาม become(...)
ยังคงให้สิทธิประโยชน์เพิ่มเติมในสถานการณ์ที่แตกต่างกัน
คุณสามารถตั้งค่าการเชื่อมโยงหลายรายการเพื่อจัดการผลลัพธ์ด้วยวิธีต่างๆ โดยไม่ต้องใช้สคริปต์ตัดคำ
fzf --bind 'enter:กลายเป็น(กลุ่ม {}),ctrl-e:กลายเป็น(emacs {})'
ก่อนหน้านี้ คุณจะต้องใช้ --expect=ctrl-e
และตรวจสอบบรรทัดแรกของเอาต์พุตของ fzf
คุณสามารถสร้างคำสั่งต่อมาได้อย่างง่ายดายโดยใช้นิพจน์ดัชนีฟิลด์ของ fzf
# เปิดไฟล์ใน Vim และไปที่ linegit grep --line-number |fzf --delimiter : --nth 3.. --bind 'enter:become(vim {1} +{2})'
ด้วยการผูกการดำเนินการ reload
กับคีย์หรือเหตุการณ์ คุณสามารถทำให้ fzf โหลดรายการตัวเลือกแบบไดนามิกได้ ดู #1750 สำหรับรายละเอียดเพิ่มเติม
ปล -ef | fzf --bind 'ctrl-r: โหลดใหม่ (ps -ef)' --header 'กด CTRL-R เพื่อโหลดซ้ำ' --header-lines=1 --ความสูง=50% --layout=ย้อนกลับ
FZF_DEFAULT_COMMAND='ค้นหา -พิมพ์ฉ' fzf --bind 'ctrl-d:reload(find . -type d),ctrl-f:reload(eval "$FZF_DEFAULT_COMMAND")' --ความสูง=50% --layout=ย้อนกลับ
ตัวอย่างต่อไปนี้ใช้ fzf เป็นส่วนต่อประสานตัวเลือกสำหรับ ripgrep เราผูกการดำเนิน reload
เพื่อ change
เหตุการณ์ ดังนั้นทุกครั้งที่คุณพิมพ์บน fzf กระบวนการ ripgrep จะเริ่มต้นใหม่ด้วยสตริงการสืบค้นที่อัปเดตซึ่งแสดงโดยนิพจน์ตัวยึดตำแหน่ง {q}
นอกจากนี้ โปรดทราบว่าเราใช้ตัวเลือก --disabled
เพื่อให้ fzf ไม่ดำเนินการกรองรองใดๆ
- rg_prefix='rg --column --line-number --no-heading --color=always --smart-case' fzf --bind 'เริ่มต้น: โหลดใหม่: $rg_prefix ""' --bind 'change:reload:$rg_prefix {q} || จริง' --bind 'enter:become(กลุ่ม {1} +{2})' --ansi --ปิดการใช้งาน --ความสูง=50% --layout=ย้อนกลับ
หาก ripgrep ไม่พบรายการที่ตรงกัน มันจะออกโดยมีสถานะทางออกที่ไม่เป็นศูนย์ และ fzf จะเตือนคุณเกี่ยวกับเรื่องนี้ เพื่อระงับข้อความเตือน เราได้เพิ่ม || true
กับคำสั่ง ดังนั้นมันจะออกด้วย 0 เสมอ
ดู "การใช้ fzf เป็นตัวเรียกใช้ Ripgrep แบบโต้ตอบ" สำหรับตัวอย่างที่ซับซ้อนยิ่งขึ้น
เมื่อตั้งค่าตัวเลือก --preview
แล้ว fzf จะเริ่มกระบวนการภายนอกโดยอัตโนมัติโดยมีบรรทัดปัจจุบันเป็นอาร์กิวเมนต์ และแสดงผลลัพธ์ในหน้าต่างแยก $SHELL
ของคุณใช้เพื่อรันคำสั่งด้วย $SHELL -c COMMAND
สามารถเลื่อนหน้าต่างได้โดยใช้เมาส์หรือการผูกคีย์แบบกำหนดเอง
# {} ถูกแทนที่ด้วยสตริงเครื่องหมายคำพูดเดี่ยวของ linefzf ที่เน้น --preview 'cat {}'
หน้าต่างแสดงตัวอย่างรองรับสี ANSI ดังนั้นคุณสามารถใช้โปรแกรมใดก็ได้ที่เน้นไวยากรณ์ให้กับเนื้อหาของไฟล์ เช่น Bat หรือ Highlight:
fzf --ดูตัวอย่าง 'ค้างคาว --สี=เสมอ {}' --ดูตัวอย่างหน้าต่าง '~3'
คุณสามารถปรับแต่งขนาด ตำแหน่ง และเส้นขอบของหน้าต่างแสดงตัวอย่างได้โดยใช้ตัวเลือก --preview-window
และสีพื้นหน้าและพื้นหลังด้วยตัวเลือก --color
ตัวอย่างเช่น,
fzf --height 40% --layout ย้อนกลับ --info inline --border --ดูตัวอย่าง 'ไฟล์ {}' --ดูตัวอย่างหน้าต่างขึ้น,1,เส้นขอบแนวนอน --bind 'ctrl-/:change-preview-window(50%|hidden|)' --color 'fg:#bbccdd,fg+:#ddeeff,bg:#334455,preview-bg:#223344,border:#778899'
ดู man page ( man fzf
) สำหรับรายการตัวเลือกทั้งหมด
สามารถดูตัวอย่างขั้นสูงเพิ่มเติมได้ที่นี่
คำเตือน
เนื่องจาก fzf เป็นตัวกรองข้อความที่ใช้งานทั่วไปแทนที่จะเป็นตัวค้นหาไฟล์ จึงไม่ควรเพิ่มตัวเลือก --preview
ให้กับ $FZF_DEFAULT_OPTS
ของคุณ
# *********************# ** อย่าทำเช่นนี้! **# *********************ส่งออก FZF_DEFAULT_OPTS='--ดูตัวอย่าง "bat --style=numbers --color=always --line-range :500 {}"'# bat ใช้ไม่ได้กับอินพุตใดๆ นอกเหนือจากรายการ filesps -ef | fzf ภาคต่อ 100 | fzfhistory | fzf
fzf สามารถแสดงภาพในหน้าต่างแสดงตัวอย่างโดยใช้หนึ่งในโปรโตคอลต่อไปนี้:
โปรโตคอลกราฟิกคิตตี้
โปรโตคอลรูปภาพอินไลน์ iTerm2
ซิกเซล
ดูสคริปต์ bin/fzf-preview.sh สำหรับข้อมูลเพิ่มเติม
fzf --ดูตัวอย่าง 'fzf-preview.sh {}'
.gitignore
คุณสามารถใช้ fd, ripgrep หรือ silver searcher เพื่อสำรวจระบบไฟล์ในขณะที่เคารพ .gitignore
# ป้อนเอาต์พุตของ fd ลงใน fzffd --type f --strip-cwd-prefix | fzf# การตั้งค่า fd เป็นแหล่งเริ่มต้นสำหรับ fzfexport FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix'# ตอนนี้ fzf (ไม่มีไปป์) จะใช้คำสั่ง fd เพื่อสร้าง listfzf# เพื่อใช้คำสั่งกับ CTRL-T เช่นเดียวกับการส่งออก FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
หากคุณต้องการให้คำสั่งติดตามลิงก์สัญลักษณ์และไม่ต้องการให้แยกไฟล์ที่ซ่อนไว้ ให้ใช้คำสั่งต่อไปนี้:
ส่งออก FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix --hidden --follow --exclude .git'
การเชื่อมโยงคีย์ CTRL-T
ของปลา ซึ่งแตกต่างจากการใช้ bash และ zsh จะใช้โทเค็นสุดท้ายบนบรรทัดคำสั่งเป็นไดเร็กทอรีรากสำหรับการค้นหาแบบเรียกซ้ำ ตัวอย่างเช่น การกด CTRL-T
ที่ส่วนท้ายของบรรทัดคำสั่งต่อไปนี้
LS /var/
จะแสดงรายการไฟล์และไดเร็กทอรีทั้งหมดภายใต้ /var/
เมื่อใช้ FZF_CTRL_T_COMMAND
แบบกำหนดเอง ให้ใช้ตัวแปร $dir
ที่ยังไม่ได้ขยายเพื่อใช้คุณลักษณะนี้ $dir
มีค่าเริ่มต้นเป็น .
เมื่อโทเค็นสุดท้ายไม่ใช่ไดเร็กทอรีที่ถูกต้อง ตัวอย่าง:
set -g FZF_CTRL_T_COMMAND "คำสั่ง find -L $dir -type f 2> /dev/null | sed '1d; s#^./##'"
fzf Theme Playground ที่สร้างโดย Vitor Mello เป็นหน้าเว็บที่คุณสามารถสร้างธีม fzf แบบโต้ตอบได้
https://github.com/junegunn/fzf/wiki/Related-projects
ใบอนุญาต MIT (MIT)
ลิขสิทธิ์ (c) 2013-2024 Junegunn Choi