मुझे यकीन नहीं है कि यह वही है जो आप ढूंढ रहे हैं, लेकिन शायद आप fzf और fzf.vim की कोशिश कर सकते हैं ।
यदि आप एक प्लगइन प्रबंधक के रूप में विम-प्लग का उपयोग करते हैं , तो आपको उन्हें स्थापित करने के लिए बस इतना करना होगा, इन पंक्तियों को अपने में जोड़ना होगा 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
गितुब पर परियोजना बताती है कि इसे मैकओएस पर कैसे स्थापित किया जाए:
brew install the_silver_searcher
:Agचारों ओर एक आवरण है $ ag, और आपको वर्तमान निर्देशिका की फ़ाइलों में एक पैटर्न खोज करने की अनुमति देता है (जब आप टाइप करते हैं तो प्रदर्शित होता है :pwd)। मैच प्रत्येक कीस्ट्रोक के बाद अपडेट किए जाते हैं।
आप ऐसा कर सकते हैं:
- चक्र आगे और पीछे के साथ मैचों के माध्यम से
C-nऔरC-p
- वर्तमान मैच और साथ अगले / पिछले एक करने के लिए इस कदम का चयन
Tab/S-Tab
- का चयन करें या साथ सभी मैचों का चयन रद्द
M-aयाM-d
यदि आप एक या कई मैचों का चयन करते हैं, तो एंटर मारने के बाद, वे क्विकफिक्स सूची को पॉप्युलेट करेंगे। वहाँ से आप उनके माध्यम से डिफ़ॉल्ट विम कमांड / मैपिंग के साथ नेविगेट कर पाएंगे, जैसे :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।
इसके अलावा, अगर fzftmux में एक फलक खुलता है, और आप इसे पूरे स्क्रीन के बजाय लेता है पसंद करेंगे, आप सभी आदेशों को एक धमाके के जोड़ सकते हैं ( :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। फ़ंक्शन को निष्पादित करने के लिए यह कुंजी आमतौर पर रीडलाइन द्वारा उपयोग की जाती transpose-charsहै।
आप इस नहीं करना चाहते हैं, एक संभव समाधान अपने अंदर कुंजी बाइंडिंग बहाल करने के लिए किया जाएगा ~/.bashrc, के बाद fzfइसके विन्यास sourced किया है। उदाहरण के लिए, यदि आप 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कमांड के आउटपुट पर एक नज़र डालें , जिसे आप विम बफर में पढ़ सकते हैं:
bind -P | vim -R -
मुझे यकीन नहीं है, लेकिन मुझे लगता है कि इसे सबसे या सभी readlineप्रमुख बाइंडिंग को प्रदर्शित करना चाहिए । यदि आप C-tकुंजी बाउंड में रीडलाइन फ़ंक्शन का नाम देख रहे हैं , तो विम बफर में, आप खोज करेंगे \\C-t। और यदि आप M-c(मेटा / ऑल्ट की) के लिए बाध्य हैं , तो आप खोज करेंगे \\ec( \eभागने की कुंजी के लिए खड़ा है और ऐसा लगता M-cहै कि यह केकोड्स के समान है escape + c)।
कमांड zshके आउटपुट को देखकर आप वही काम कर सकते हैं bindkey। लेकिन इस बार, ^[मेटा / ऑल्ट संशोधक कुंजी के लिए खड़ा है, जबकि एक एकल कैरेट ( ^) वर्ण नियंत्रण कुंजी के लिए खड़ा है।
वर्तमान में, मुझे fzfउनके नाम में कीवर्ड वाले कार्यों को निष्पादित करने वाले 4 प्रमुख बाइंडिंग मिले । वे कुंजी दृश्यों 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ऐसा करने में भी सक्षम होना चाहिए, लेकिन मैं इसकी सिफारिश नहीं करूंगा क्योंकि मेरी राय में यह बहुत भारी और बग बनाने वाला प्लगइन है।