ভিমে কোনও ফাইল (প্রয়োজনে ওয়াইল্ডকার্ড ব্যবহার করে) জন্য পুনরাবৃত্তভাবে ডিরেক্টরি অনুসন্ধান করার কোনও উপায় আছে কি? স্থানীয়ভাবে না হলে, এমন কোনও প্লাগইন রয়েছে যা এটি পরিচালনা করতে পারে?
ভিমে কোনও ফাইল (প্রয়োজনে ওয়াইল্ডকার্ড ব্যবহার করে) জন্য পুনরাবৃত্তভাবে ডিরেক্টরি অনুসন্ধান করার কোনও উপায় আছে কি? স্থানীয়ভাবে না হলে, এমন কোনও প্লাগইন রয়েছে যা এটি পরিচালনা করতে পারে?
উত্তর:
আপনি :edit
কমান্ডটি সহ ওয়াইল্ডকার্ড ব্যবহার করতে পারেন । সুতরাং,
:e **/test/Suite.java
পরীক্ষা / স্যুট.জাভা খুলবে এটি বর্তমান ডিরেক্টরি শ্রেণিবদ্ধ যেখানেই হোক না কেন। এটি ট্যাব-সমাপ্তির সাথে কাজ করে যাতে আপনি ফাইলটি খোলার আগে ওয়াইল্ডকার্ডগুলি প্রসারিত করতে [ট্যাব] ব্যবহার করতে পারেন। পরিবর্তে সমস্ত সম্ভাব্য এক্সটেনশানগুলির মাধ্যমে ব্রাউজ করার উপায়টির জন্য ওয়াইল্ডমোড বিকল্পটিও দেখুন ।
আর একটি কৌশল ব্যবহার করা হয়
:r! find . -type f
বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের একটি তালিকা বাফারে লোড করতে। তারপরে আপনি তালিকাটিতে নেভিগেট / বাছাই / ছাঁটাই করতে এবং CTRL+W gf
কার্সারের নীচে ফাইলটি একটি নতুন ফলকে খুলতে সাধারণ সমস্ত ভিএম টেক্সট ম্যানিপুলেশন সরঞ্জামগুলি ব্যবহার করতে পারেন ।
একটি ফাইন্ড কমান্ড আছে। আপনি যদি নিজের সাথে যুক্ত হন **
(দেখুন :help starstar
) 'path'
তবে পুনরাবৃত্তভাবে অনুসন্ধান করতে পারেন:
:set path
আপনাকে আপনার বর্তমান পথ দেখাবে, এর **
মতো কিছু করে যুক্ত করুন
:set path+=**
তারপরে আপনি কেবল টাইপ করতে পারেন
:find myfile.txt
এবং এটি ম্যাজিকভাবে খোলে!
আপনি যদি আপনার .ভিমিরসিটিতে সেট কমান্ডটি যুক্ত করেন তবে এটি ভবিষ্যতে পুনরাবৃত্ত অনুসন্ধান করতে পারবেন তা নিশ্চিত করে। এটি কোনও বিন্দু ডিরেক্টরি অনুসন্ধান করে বলে মনে হচ্ছে না (উদাহরণস্বরূপ .ssh)
my*.txt
?
:h find
।
:set path+=**
আমি ctrlp.vim এর পরামর্শ দিই । এটি একটি খুব ভাল প্লাগইন, বড় প্রকল্পগুলির ভিতরে কাজ করার জন্য আদর্শ। এতে ফাইলের নাম বা পুরো পাথ, রেজিপ এক্সপ অনুসন্ধান, প্রকল্পের মূলের স্বয়ংক্রিয় সনাক্তকরণ (.git | এইচজি | এসএনএন | বিজিআর | _ডার্কস ফোল্ডার সহ একটি), ব্যক্তিগতকৃত ফাইলের নাম বাদ দেওয়া এবং আরও অনেক কিছু অনুসন্ধান রয়েছে।
কেবল টিপুন <c-p>
এবং এটি একটি খুব স্বজ্ঞাত ফলকটি খুলবে যেখানে আপনি যা চান তা অনুসন্ধান করতে পারেন:
একসাথে বেশ কয়েকটি ফাইল নির্বাচন করা এবং খোলানো সম্ভব। এটি অতিরিক্ত স্বেচ্ছাচারিত কমান্ডগুলিও গ্রহণ করে যেমন একটি নির্দিষ্ট লাইনে লাফানো, স্ট্রিং উপস্থিতি বা অন্য কোনও ভিম কমান্ড।
ভিআইএম একটি বিল্টিন ফাইন্ড কমান্ড হিসাবে (: সাহায্য করতে সাহায্য করুন) তবে কেবল প্রথম পাওয়া ফাইলটি খুলুন। তবে আপনি এই আশ্চর্যজনক প্লাগইনটি ব্যবহার করতে পারেন: ফজিফাইন্ডার যা আপনার যা চান সব কিছুই করে এবং আরও অনেক কিছু করে
আপনি এর সাহায্যে ফাইল সিস্টেমটি ব্রাউজ করতে পারেন :ex .
, তবে পুনরাবৃত্তভাবে কীভাবে অনুসন্ধান করতে হয় তা আমি জানি না (আমি একজন ভিম আভিজাত্য - আমি এটি মাত্র দশ বছর ব্যবহার করছি)।
কয়েকটি জনপ্রিয় ফাইল ব্রাউজার প্লাগ-ইন রয়েছে:
সুপার ইউজারে এই থ্রেডটিও দেখুন ।
তুমি ব্যবহার করতে পার ! শেল কমান্ড চালাতে:
:! find . -name *.xml
ভিএম এর গ্রেপ, এলগ্রিপ, ভিমগ্রিপ বা লভিমগ্রিপ নামের কমান্ডগুলিতে বিল্ড রয়েছে যা এটি করতে পারে
সেগুলি কীভাবে ব্যবহার করতে হয় তার একটি টিউটোরিয়াল এখানে http://vim.wikia.com/wiki/Find_in_files_within_Vim#Recursive_S Search
আপনি এই জাতীয় নির্বাহের মাধ্যমে কোনও ভিএম থেকে সন্ধান বা গ্রেপ করার মতো একটি বাহ্যিক কমান্ডও ব্যবহার করতে পারেন
:!find ...
:grep test */.java
শব্দটি অনুসন্ধান করবে । ফাইলগুলি অনুসন্ধানের জন্য শেল কমান্ড ব্যবহার করবে । শেল কমান্ড চমত্কার শক্তিশালী যদি আপনি pcre বা বর্ধিত Regex সঙ্গে এটি একত্রিতtest
.java
:!find
find
find
আমি অবাক হয়ে এখনও কেউ ইউনাইট.ভিমের কথা উল্লেখ করি নি।
ফাইল সন্ধান করা (অস্পষ্টভাবে বা অন্যথায়) এটি কোনও বিকাশকারীর জন্য কী করতে পারে তার আইসবার্গের খুব ইঙ্গিত। এটা তোলে জন্য সমর্থনে গড়ে তুলেছে ag
, git
এবং অন্যান্য অনুষ্ঠান / ইউটিলিটি / তেজ থাকা প্লাগইনগুলির একটি অগণ্য। শেখার বক্ররেখা কিছুটা খাড়া হতে পারে তবে আমি এটি ছাড়া আমার জীবন ভাবতে পারি না। ব্যবহারকারীর বেস বড়, এবং তত্ক্ষণাত বাগগুলি স্থির করা হয়।
কুইকফিক্সের মতো ফলাফল ব্রাউজিং
ব্যবহার:
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
তবে বর্তমান ডিরেক্টরিটির পরিবর্তে গিট শীর্ষ স্তর থেকে অনুসন্ধান করুন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
এখানে লক্ষ্য করুন যে যাদুটি হ'ল কমান্ডের চারপাশে ব্যাকটিকস, এটি শেল কমান্ড থেকে আউটপুটকে Vim কমান্ডে ব্যবহারযোগ্য টেক্সটে রূপান্তরিত করবে।
এই ফাংশনটির জন্য আপনার কেবল একটি প্লাগইন লাগবে না, নীচে কোড স্নিপেটই যথেষ্ট।
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>
চালান:
:args `find . -name '*xml'`
ভিম ব্যাকটিক্সে শেল কমান্ড চালাবে, ফাইলগুলির তালিকাটি আর্গলিস্টে রাখবে এবং প্রথম ফাইলটি খুলবে। তারপর আপনি ব্যবহার করতে পারেন :args
arglist (অর্থাত তালিকা ফাইল পাওয়া যায়নি) এবং দেখতে :n
এবং :N
arglist ফাইল মাধ্যমে এগিয়ে এবং bacwards নেভিগেট করতে। দেখুন https://vimhelp.org/editing.txt.html#%7Barglist%7D এবং https://vimhelp.org/editing.txt.html#backtick-expansion
আপনি এই প্লাগইনটি দিয়ে আপনার "পথে" পুনরাবৃত্তভাবে ফাইলগুলি সন্ধান করতে পারেন । এটি ফাইলের নামের জন্য ট্যাব সমাপ্তি সমর্থন করে।
এজি সরঞ্জাম এবং সংশ্লিষ্ট এজি ভিএম প্লাগইন এই সমস্যাটিকে পুরোপুরি সমাধান করে:
কিছু প্যাটার্ন ব্যবহার করে একটি ফাইল সন্ধান করতে:
AgFile! pattern
এটি ফলাফলের সাথে কুইকফিক্স উইন্ডোটি খুলবে যেখানে আপনি চয়ন করতে পারেন।
প্যাটার্ন হিসাবে নির্বাচিত শব্দটি ব্যবহার করে এই কমান্ডটি কল করতে আপনি ভিম কী-বাইন্ডিং যুক্ত করতে পারেন।
nnoremap <silent> <C-h> :AgFile! '<C-R><C-W>'<CR>
vnoremap <silent> <C-h> y :AgFile! '<C-R>"'<CR>