क्या विम में किसी फ़ाइल (वाइल्डकार्ड का उपयोग करके) के लिए किसी निर्देशिका को खोज करने का कोई तरीका है? यदि मूल रूप से नहीं है, तो क्या कोई प्लगइन है जो इसे संभाल सकता है?
क्या विम में किसी फ़ाइल (वाइल्डकार्ड का उपयोग करके) के लिए किसी निर्देशिका को खोज करने का कोई तरीका है? यदि मूल रूप से नहीं है, तो क्या कोई प्लगइन है जो इसे संभाल सकता है?
जवाबों:
आप :editकमांड के साथ वाइल्डकार्ड का उपयोग कर सकते हैं । इसलिए,
:e **/test/Suite.java
खुलेगा / सूट.जवा कोई बात नहीं जहां यह वर्तमान निर्देशिका पदानुक्रम में है। यह टैब-पूर्णता के साथ काम करता है ताकि आप फ़ाइल खोलने से पहले वाइल्डकार्ड के विस्तार के लिए [टैब] का उपयोग कर सकें। इसके बजाय सभी संभावित एक्सटेंशन के माध्यम से ब्राउज़ करने के तरीके के लिए वाइल्डमोड विकल्प भी देखें ।
एक और ट्रिक है इस्तेमाल करने की
:r! find . -type f
वर्तमान निर्देशिका की सभी फ़ाइलों की सूची को एक बफर में लोड करने के लिए। फिर आप सूची को नेविगेट / सॉर्ट / ट्रिम करने के लिए और CTRL+W gfएक नए फलक में कर्सर के नीचे फ़ाइल खोलने के लिए सभी सामान्य विम टेक्स्ट हेरफेर टूल का उपयोग कर सकते हैं ।
एक कमांड है। यदि आप अपने को जोड़ते हैं **(देखें :help starstar) 'path'तो आप पुन: खोज कर सकते हैं:
:set path
आपको अपना वर्तमान रास्ता दिखाएगा, **कुछ ऐसा करके जोड़ें
:set path+=**
तो आप बस टाइप कर सकते हैं
:find myfile.txt
और यह जादुई रूप से खुलता है!
यदि आप सेट कमांड को अपने .vimrc में जोड़ते हैं तो यह सुनिश्चित करेगा कि आप भविष्य में पुनरावर्ती खोज कर सकते हैं। यह खोज करने के लिए प्रतीत नहीं होता डॉट निर्देशिका (उदाहरण के लिए .sh)
my*.txtभी करता है ?
:h find।
:set path+=**
मैं ctrlp.vim की सलाह दूंगा । यह एक बहुत अच्छा प्लगइन है, बड़ी परियोजनाओं के अंदर काम करने के लिए आदर्श है। इसमें फ़ाइल नाम या पूर्ण पथ, regexp खोज, प्रोजेक्ट रूट का स्वत: पता लगाने (a के साथ एक) है। hg | svg | svn | bzr | _darcs फ़ोल्डर), वैयक्तिकृत फ़ाइल नाम बहिष्करण और भी बहुत कुछ।
बस दबाएँ <c-p>और यह एक बहुत ही सहज फलक खोलेगा जहाँ आप खोज सकते हैं कि आप क्या चाहते हैं:
एक साथ कई फ़ाइलों को चुनना और खोलना संभव है। यह अतिरिक्त मनमाना आदेशों को भी स्वीकार करता है, जैसे कि एक निश्चित लाइन पर कूदना, स्ट्रिंग घटना या कोई अन्य Vim कमांड।
एक अंतर्निहित खोज कमांड के रूप में विम (: खोजने में सहायता करें) लेकिन केवल पहले मिली फ़ाइल खोलें। हालाँकि आप इस अद्भुत प्लगइन का उपयोग कर सकते हैं: FuzzyFinder जो आप चाहते हैं और उससे भी अधिक सब कुछ करता है
आप फ़ाइल सिस्टम को ब्राउज़ कर सकते हैं :ex ., लेकिन मैं नहीं जानता कि कैसे पुनरावर्ती खोज करें (मैं एक विम नौसिखिया हूं - मैं केवल दस वर्षों से इसका उपयोग कर रहा हूं)।
कुछ लोकप्रिय फ़ाइल ब्राउज़र प्लग-इन हैं:
इस धागे को सुपरयूजर पर भी देखें ।
आप उपयोग कर सकते हैं ! शेल कमांड चलाने के लिए:
:! find . -name *.xml
vim के पास grep, lgrep, vimgrep या lvimgrep नाम के कमांड हैं, जो ऐसा कर सकते हैं
यहाँ उनका उपयोग करने के तरीके के बारे में एक ट्यूटोरियल है http://vim.wikia.com/wiki/Find_in_files_within_Vim#Recursive_Search
आप इस तरह से इसे निष्पादित करके किसी बाहरी कमांड जैसे वीम से खोज या grep का उपयोग कर सकते हैं
:!find ...
:grep test */.javaशब्द खोजेगा । फ़ाइलों के लिए खोजने के लिए शेल कमांड का उपयोग करेगा । शेल कमांड, सुंदर शक्तिशाली है अगर आप PCRE या विस्तारित regex के साथ संयोजितtest.java:!findfindfind
मुझे आश्चर्य है कि किसी ने भी यूनाइट.विम का उल्लेख नहीं किया है।
फाइल्स ढूंढना (फिज़ूल या अन्यथा) आइसबर्ग का एक बहुत ही सिरा है जो किसी डेवलपर के लिए कर सकता है। यह करने के लिए समर्थन में बनाया गया है ag, git, और अन्य कार्यक्रमों / उपयोगिताओं / vim प्लगइन्स के असंख्य। सीखने की अवस्था थोड़ी खड़ी हो सकती है, लेकिन मैं इसके बिना अपने जीवन की कल्पना नहीं कर सकता। उपयोगकर्ता आधार बड़ा है, और बग तुरंत तय हो गए हैं।
क्विकफिक्स-जैसे परिणाम ब्राउज़िंग
उपयोग:
Find my.regex
परिणाम:
grep -Eरेग्ज से मेल खाता है<enter>या <C-w>gfएक नई टैब में वर्तमान लाइन पर फ़ाइल खोलने के लिएgf फ़ाइल को वर्तमान टैब पर खोलने के लिए और फ़ाइल सूची को खो देंइसके बजाय सभी फ़ाइलें खोजें:
Find
वैकल्पिक तरीके:
Gfind my.regex: केवल गिट ट्रैक की गई फाइलों की खोज करें ( git ls-files)। भगोड़ा अनुरोध: https://github.com/tpope/vim-fugitive/issues/132#issuecomment-200749743Gtfind my.regex: पसंद है Gfind, लेकिन वर्तमान निर्देशिका के बजाय git शीर्ष स्तर से खोजेंLocate somefile: locateसंस्करणकोड:
function! Find(cmd)
let l:files = system(a:cmd)
if (l:files =~ '^\s*$')
echomsg 'No matching files.'
return
endif
tabedit
set filetype=filelist
set buftype=nofile
" TODO cannot open two such file lists with this. How to get a nice tab label then?
" http://superuser.com/questions/715928/vim-change-label-for-specific-tab
"file [filelist]
put =l:files
normal ggdd
nnoremap <buffer> <Enter> <C-W>gf
execute 'autocmd BufEnter <buffer> lcd ' . getcwd()
endfunction
command! -nargs=1 Find call Find("find . -iname '*'" . shellescape('<args>') . "'*'")
command! -nargs=1 Gfind call Find('git ls-files | grep -E ' . shellescape('<args>'))
command! -nargs=1 Gtfind call Find('git rev-parse --show-toplevel && git ls-files | grep -E ' . shellescape('<args>'))
command! -nargs=1 Locate call Find('locate ' . shellescape('<args>'))
आपकी स्थिति के आधार पर (अर्थात, निम्नलिखित कमांड को केवल एक फ़ाइल मिलेगी), शायद इस तरह एक कमांड का उपयोग करें:
:e `locate SomeUniqueFileName.java`
यह विम को चालू टैब में (ई कमांड) एक फ़ाइल को खोलने का कारण बनेगा, जो चलने का परिणाम है (इस उदाहरण में),
locate SomeUniqueFileName.java
ध्यान दें कि यहां जादू कमांड के चारों ओर बैकटिक्स है, जो शेल कमांड से आउटपुट को टेक्स्ट कमांड में बदल देगा।
आपको इस फ़ंक्शन के लिए केवल प्लगइन की आवश्यकता नहीं है, नीचे कोड स्निपेट पर्याप्त है।
function! FindFiles()
call inputsave()
let l:dir = input("Find file in: ", expand("%:p:h"), "dir")
call inputrestore()
if l:dir != ""
call inputsave()
let l:file = input("File name: ")
call inputrestore()
let l:nf = 'find '.l:dir.' -type f -iname '.l:file.' -exec grep -nH -m 1 ".*" {} \;'
lexpr system(l:nf)
endif
endfunction
nnoremap <silent> <leader>fo :call FindFiles()<CR>
Daud:
:args `find . -name '*xml'`
विम बैकटिक्स में शेल कमांड चलाएगा, फ़ाइलों की सूची को आर्गलिस्ट में डाल देगा और पहली फाइल को ओपन करेगा। तो आप उपयोग कर सकते :argsarglist (यानी सूची फ़ाइलें मिल) और देखने के लिए :nऔर :Narglist में फ़ाइलों के माध्यम से आगे और bacwards नेविगेट करने के लिए। देखें https://vimhelp.org/editing.txt.html#%7Barglist%7D और https://vimhelp.org/editing.txt.html#backtick-expansion
आप इस प्लगइन के साथ अपने "पथ" में पुनरावर्ती फ़ाइलें पा सकते हैं । यह फ़ाइल नाम के लिए टैब पूर्णता का भी समर्थन करता है।
एजी उपकरण और इसी एजी विम प्लगइन इस समस्या को पूरी तरह हल करता है:
कुछ पैटर्न का उपयोग करके एक फ़ाइल खोजने के लिए:
AgFile! pattern
यह उन परिणामों के साथ क्विकफ़िक्स विंडो खोलेगा जहां आप चुन सकते हैं।
आप एक पैटर्न के रूप में चयनित शब्द का उपयोग करके इस कमांड को कॉल करने के लिए vim कीबाइंडिंग जोड़ सकते हैं।
nnoremap <silent> <C-h> :AgFile! '<C-R><C-W>'<CR>
vnoremap <silent> <C-h> y :AgFile! '<C-R>"'<CR>