मुझे यकीन नहीं है कि यह वही है जो आप ढूंढ रहे हैं, लेकिन शायद आप 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
।
इसके अलावा, अगर 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
। फ़ंक्शन को निष्पादित करने के लिए यह कुंजी आमतौर पर रीडलाइन द्वारा उपयोग की जाती 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
ऐसा करने में भी सक्षम होना चाहिए, लेकिन मैं इसकी सिफारिश नहीं करूंगा क्योंकि मेरी राय में यह बहुत भारी और बग बनाने वाला प्लगइन है।