ผมไม่แน่ใจว่านี่คือสิ่งที่คุณกำลังมองหา แต่บางทีคุณอาจจะลองfzfและfzf.vim
หากคุณใช้vim-plugเป็นตัวจัดการปลั๊กอินสิ่งที่คุณต้องทำเพื่อติดตั้งคือการเพิ่มบรรทัดเหล่านี้ในvimrc
:
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
... บางแห่งระหว่างบรรทัด:
call plug#begin('~/.vim/plugged')
และ:
call plug#end()
:PlugInstall
จากนั้นดำเนินการ
ในบรรดาคำสั่งต่างๆและแมปให้โดยfzf.vim
(วัตถุประสงค์เฉพาะซึ่งดูเหมือนว่าจะมีการติดตั้งแมปและคำสั่งขอให้fzf
ไปที่การค้นหาเลือนผ่านแหล่งที่กำหนดไว้ล่วงหน้า) :Ag
มีคำสั่ง
เพื่อให้สามารถใช้มันคุณจะต้องติดตั้งคำสั่งเชลล์เอจี บนการแจกแจงแบบเดเบียนสามารถทำได้ด้วยคำสั่งต่อไปนี้:
apt-get install silversearcher-ag
โครงการบน github อธิบายวิธีติดตั้งบน MacOS:
brew install the_silver_searcher
:Ag
เป็นเสื้อคลุมรอบ ๆ$ ag
และช่วยให้คุณสามารถค้นหารูปแบบในไฟล์ของไดเรกทอรีปัจจุบัน (ที่แสดงเมื่อคุณพิมพ์:pwd
) การแข่งขันจะมีการอัพเดททุกครั้งหลังการกดแป้น
คุณสามารถ:
- วนไปข้างหน้าและข้างหลังผ่านการแข่งขันด้วย
C-n
และC-p
- เลือกการแข่งขันปัจจุบันและย้ายไปยังการแข่งขันถัดไป / ก่อนหน้าด้วย
Tab
/S-Tab
- เลือกหรือยกเลิกการเลือกการแข่งขันทั้งหมดที่มี
M-a
หรือM-d
หากคุณเลือกการแข่งขันหนึ่งหรือหลายรายการหลังจากกด Enter พวกเขาจะเติมรายการรายการแก้ไขด่วน จากนั้นคุณจะสามารถนำทางผ่านพวกเขาด้วยคำสั่งเริ่มต้นที่เป็นกลุ่ม / แมปเช่นและ:cnext
:cprevious
หากคุณต้องการเพิ่มคำนำหน้าให้กับคำสั่งทั้งหมดที่ติดตั้งfzf.vim
และหลีกเลี่ยงการแทนที่คำสั่งที่มีอยู่คุณสามารถเพิ่มสิ่งนี้ในvimrc
:
let g:fzf_command_prefix = 'your_prefix'
ผมใช้Fzf
เป็นคำนำหน้าว่าทำไมผมไม่ได้พิมพ์แต่:Ag
:FzfAg
หากคุณต้องการที่จะใช้git grep
แทนag
ดูเหมือนว่าคุณสามารถติดตั้งเสื้อคลุมที่กำหนดเองของคุณไปรอบ ๆ มัน:GGrep
เช่นนี้
command! -bang -nargs=* GGrep
\ call fzf#vim#grep('git grep --line-number '.shellescape(<q-args>), 0, <bang>0)
มันอธิบาย:h fzf-vim-customization
มา
นอกจากนี้ถ้าfzf
เปิดบานหน้าต่างใน tmux และคุณต้องการที่จะใช้เวลาทั้งหน้าจอแทนคุณสามารถผนวกปังคำสั่งทั้งหมด ( :Ag!
, :GGrep!
, ... )
ดังที่คุณพูดในความคิดเห็นล่าสุดโดยค่าเริ่มต้นfzf
จะเปลี่ยนการกำหนดค่าเปลือกของคุณ ตัวอย่างเช่นถ้าคุณใช้bash
มันจะเพิ่มบรรทัดต่อไปนี้ใน~/.bashrc
:
[ -f ~/.fzf.bash ] && source ~/.fzf.bash
~/.fzf.bash
นี้จะมาไฟล์ หลังมีรหัสบางส่วน:
# Setup fzf
# ---------
if [[ ! "$PATH" == */home/user/.fzf/bin* ]]; then
export PATH="$PATH:/home/user/.fzf/bin"
fi
# Auto-completion
# ---------------
[[ $- == *i* ]] && source "/home/user/.fzf/shell/completion.bash" 2> /dev/null
# Key bindings
# ------------
source "/home/user/.fzf/shell/key-bindings.bash"
รหัสนี้ผนวกเส้นทางไปยังตัวแปรสภาพแวดล้อม$PATH
: /home/user/.fzf/bin
; ซึ่งเป็นโฟลเดอร์ที่มีfzf
โปรแกรม
นอกจากนี้ยังแหล่งที่มา 2 ไฟล์อื่น ๆ :
/home/user/.fzf/shell/completion.bash
/home/user/.fzf/shell/key-bindings.bash
คนแรกดูเหมือนว่าจะกำหนดฟังก์ชั่นเสร็จในขณะที่สองติดตั้งการผูกกุญแจ
น่าเสียดายที่การเชื่อมโยงคีย์อาจแทนที่readline
ฟังก์ชันเริ่มต้น
ยกตัวอย่างเช่นfzf
ผูกฟังก์ชั่นการfzf-file-widget
C-t
คีย์นี้มักใช้โดย readline เพื่อเรียกใช้transpose-chars
ฟังก์ชัน
หากคุณไม่ต้องการสิ่งนี้ทางออกที่เป็นไปได้วิธีหนึ่งคือการคืนค่าการเชื่อมโยงคีย์ภายในของคุณ~/.bashrc
หลังจากที่fzf
ได้กำหนดค่าที่มา ตัวอย่างเช่นหากคุณต้องการC-t
รักษาพฤติกรรมเก่าไว้นั่นคือการสลับอักขระ 2 ตัวรอบเคอร์เซอร์และผูกfzf-file-widget
กับคีย์อื่นสมมติว่าC-x C-t
คุณสามารถเพิ่มบรรทัดเหล่านี้ได้ในตอนท้ายของ~/.bashrc
:
bind -x '"\C-x\C-t": fzf-file-widget'
bind '"\C-t": transpose-chars'
สิ่งเดียวกันนี้ใช้กับzsh
เชลล์ แต่ไวยากรณ์ในการติดตั้งการโยงคีย์นั้นแตกต่างกันเล็กน้อย:
bindkey '^X^T' fzf-file-widget
bindkey '^T' transpose-chars
หากหนึ่งในการผูกคีย์เชลล์ที่คุณคุ้นเคยถูกแทนที่โดยfzf
คุณต้องการกู้คืน แต่ไม่ทราบว่าชื่อที่แน่นอนของฟังก์ชันที่ถูกเรียกใช้คุณสามารถลองทำสิ่งต่อไปนี้
ก่อนอื่นภายในของคุณ~/.bashrc
ให้ใส่เครื่องหมายความคิดเห็นชั่วคราวซึ่งเป็นแหล่งที่มาของการfzf
กำหนดค่า จากนั้นเปิดเทอร์มินัลอีกครั้งและดูผลลัพธ์ของbind -P
คำสั่งซึ่งคุณสามารถอ่านได้ในบัฟเฟอร์ Vim:
bind -P | vim -R -
ฉันไม่แน่ใจ แต่ฉันคิดว่าควรแสดงการreadline
เชื่อมโยงที่สำคัญที่สุดหรือทั้งหมด หากคุณกำลังมองหาชื่อของฟังก์ชั่นที่ ReadLine ผูกพันกับที่สำคัญในบัฟเฟอร์เป็นกลุ่มคุณจะค้นหาC-t
\\C-t
และหากคุณกำลังมองหาสิ่งที่ถูกผูกไว้กับM-c
(คีย์เมตา / alt) คุณจะค้นหา\\ec
( \e
ย่อมาจากคีย์หลบหนีและดูเหมือนว่าจะM-c
ผลิตรหัสเดียวกันescape + c
)
คุณสามารถทำสิ่งเดียวกันได้zsh
โดยดูที่ผลลัพธ์ของbindkey
คำสั่ง แต่ในครั้งนี้^[
ย่อมาจากคีย์ตัวปรับเปลี่ยนเมตา / เอลขณะที่อักขระคาเร็ต ( ^
) ตัวเดียวหมายถึงปุ่มควบคุม
ปัจจุบันฉันพบการเชื่อมโยงคีย์ 4 รายการที่กำลังใช้งานฟังก์ชันที่มีfzf
คำหลักอยู่ในชื่อ พวกเขาใช้คีย์ลำดับC-i
(เหมือนTab
) C-r
, และC-t
M-c
พวกมันถูกผูกไว้กับฟังก์ชั่นต่อไปนี้:
C-i fzf-completion
C-r fzf-history-widget
C-t fzf-file-widget
M-c fzf-cd-widget
แต่เดิมในระบบของฉันreadline
(ไลบรารีที่ใช้bash
เพื่อแก้ไขบรรทัดคำสั่ง) เชื่อมโยงคีย์เหล่านั้นกับฟังก์ชันเหล่านี้:
C-i complete
C-r reverse-search-history
C-t transpose-chars
M-c capitalize-word
และzle
(ตัวแก้ไขบรรทัดที่ใช้zsh
) ผูกไว้กับ:
C-i expand-or-complete
C-r history-incremental-search-backward
C-t transpose-chars
M-c capitalize-word
ctrl-p
หรือปลั๊กอินที่คล้ายกันคือสิ่งที่คุณกำลังมองหา โปรดทราบว่าunite.vim
ควรจะสามารถทำเช่นนั้นได้ แต่ฉันจะไม่แนะนำเพราะในความคิดของฉันมันเป็นปลั๊กอินที่ค่อนข้างหนักและสร้างข้อผิดพลาด