ผมไม่แน่ใจว่านี่คือสิ่งที่คุณกำลังมองหา แต่บางทีคุณอาจจะลอง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ควรจะสามารถทำเช่นนั้นได้ แต่ฉันจะไม่แนะนำเพราะในความคิดของฉันมันเป็นปลั๊กอินที่ค่อนข้างหนักและสร้างข้อผิดพลาด