ভিমে একটি ফাইল (পুনরাবৃত্ত ডিরেক্টরি ডিরেক্টরি অনুসন্ধানের মাধ্যমে) সন্ধান করুন


84

ভিমে কোনও ফাইল (প্রয়োজনে ওয়াইল্ডকার্ড ব্যবহার করে) জন্য পুনরাবৃত্তভাবে ডিরেক্টরি অনুসন্ধান করার কোনও উপায় আছে কি? স্থানীয়ভাবে না হলে, এমন কোনও প্লাগইন রয়েছে যা এটি পরিচালনা করতে পারে?




@ সিরোস্যান্টিলি 巴拿馬 文件 六四 事件 法轮功 আপনার নাম বলতে চাই .. যা চীনে নিষিদ্ধ কিছু প্রকাশ করে।
E_Jovi

4
@E_ জোভি কিন্তু এর অর্থ কী? কেবল আমার চিনেসিকে উন্নত করতে :-)
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

4
@ সিরোস্যান্টিলি 巴拿馬 文件 六四 事件 com প্রশংসনামূলক শব্দ হিসাবে, এর অর্থ আপনি অন্য কিছু করতে পারেন যখন অন্যান্য লোকেরা পারেন না, এই ক্ষেত্রে, আমি মনে করি যে আপনার নাম ইতিহাসের সত্য কথা বলে তবে বেশিরভাগ চীনা এটি সরকারের আচরণের কারণে করতে পারে না অবমাননাকর শব্দ হিসাবে, এটি ব্যক্তির এমনভাবে কথা বলে বা আচরণ করে যা কোনও ব্যক্তির প্রতি শ্রদ্ধার অভাব দেখায়।
E_Jovi

উত্তর:


110

আপনি :editকমান্ডটি সহ ওয়াইল্ডকার্ড ব্যবহার করতে পারেন । সুতরাং,

:e **/test/Suite.java

পরীক্ষা / স্যুট.জাভা খুলবে এটি বর্তমান ডিরেক্টরি শ্রেণিবদ্ধ যেখানেই হোক না কেন। এটি ট্যাব-সমাপ্তির সাথে কাজ করে যাতে আপনি ফাইলটি খোলার আগে ওয়াইল্ডকার্ডগুলি প্রসারিত করতে [ট্যাব] ব্যবহার করতে পারেন। পরিবর্তে সমস্ত সম্ভাব্য এক্সটেনশানগুলির মাধ্যমে ব্রাউজ করার উপায়টির জন্য ওয়াইল্ডমোড বিকল্পটিও দেখুন ।

আর একটি কৌশল ব্যবহার করা হয়

:r! find . -type f

বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের একটি তালিকা বাফারে লোড করতে। তারপরে আপনি তালিকাটিতে নেভিগেট / বাছাই / ছাঁটাই করতে এবং CTRL+W gfকার্সারের নীচে ফাইলটি একটি নতুন ফলকে খুলতে সাধারণ সমস্ত ভিএম টেক্সট ম্যানিপুলেশন সরঞ্জামগুলি ব্যবহার করতে পারেন ।


4
+1 আমি কখনই সম্পাদনা কমান্ডে ওয়াইল্ডকার্ড চেষ্টা করি নি। এটি ওয়াইল্ডমোডের সাথে সত্যই ভাল কাজ করে। সুতরাং আপনি টাইপ করতে পারেন: ই ** / স্যুট <ট্যাব> এবং সকলের কাছে সম্ভাব্য ফাইলগুলির তালিকা রয়েছে
এমবি 14

7
জটিল ডিরেক্টরি কাঠামোযুক্ত বড় ফাইল সংগ্রহগুলির সাথে খুব সতর্কতা অবলম্বন করুন। এই আদেশটি আপনার ভিমকে খুব দীর্ঘ সময়ের জন্য স্তব্ধ করতে পারে। আমার কোডবেস দিয়ে এটি ইতিমধ্যে 20 মিনিটের জন্য অনুসন্ধান করছে। বিষয়গুলি কী জটিল করে তোলে তা হ'ল এটি বন্ধ করার কোনও উপায় নেই। আমি সাধারন সিটিআরএল + সি এবং সিটিআরএল + ব্রেক চেষ্টা করেছি। প্রোমমন দেখায় যে ভিএম এখনও আমার ফাইল অনুসন্ধান করছে। সুতরাং সমাধানটি সবার জন্য নয় :(

4
@ ইপপো আমারও একই সমস্যা ছিল। ফোল্ডারের সংখ্যা হ্রাস করার জন্য অনুসন্ধানের পথে প্রথম অংশটি দিয়ে আমি এটি সমাধান করেছি: e dir / ** / File.java। তারপরে এটি এক সেকেন্ডেরও কম সময় নিয়েছিল।
ব্যবহারকারী 79878

4
আমি কীভাবে এই সম্পর্কে জানতাম না? আমি 20 বছরেরও বেশি সময় ধরে ভিএম ব্যবহার করছি। কেবল আশ্চর্যজনক 👏🏼👏🏼👏🏼
ব্র্যাডলি

4
ওএমজি এই দুর্দান্ত!
ফানকোডাব্যাট

51

একটি ফাইন্ড কমান্ড আছে। আপনি যদি নিজের সাথে যুক্ত হন **(দেখুন :help starstar) 'path'তবে পুনরাবৃত্তভাবে অনুসন্ধান করতে পারেন:

:set path

আপনাকে আপনার বর্তমান পথ দেখাবে, এর **মতো কিছু করে যুক্ত করুন

:set path+=**

তারপরে আপনি কেবল টাইপ করতে পারেন

:find myfile.txt

এবং এটি ম্যাজিকভাবে খোলে!

আপনি যদি আপনার .ভিমিরসিটিতে সেট কমান্ডটি যুক্ত করেন তবে এটি ভবিষ্যতে পুনরাবৃত্ত অনুসন্ধান করতে পারবেন তা নিশ্চিত করে। এটি কোনও বিন্দু ডিরেক্টরি অনুসন্ধান করে বলে মনে হচ্ছে না (উদাহরণস্বরূপ .ssh)


4
যদি ফাইলের নামটি দীর্ঘ হয় তবে এই পদ্ধতিটি খুব আরামদায়ক নয় বা এটিও কি my*.txt?
শ্রীকান্ত শরৎ

4
হ্যাঁ, আপনি * ওয়াইল্ডকার্ড ব্যবহার করতে পারেন। দেখতে :h find
তায়ে

12
আপনি নিজের :set path+=**
পথটিতে

ভিএমআরসি-তে অনুরূপ যুক্তি যুক্ত করার কি কোনও বিপদ আছে? সিসি @ অ্যালানবয়
আইমনোৎসাম

21

আমি ctrlp.vim এর পরামর্শ দিই । এটি একটি খুব ভাল প্লাগইন, বড় প্রকল্পগুলির ভিতরে কাজ করার জন্য আদর্শ। এতে ফাইলের নাম বা পুরো পাথ, রেজিপ এক্সপ অনুসন্ধান, প্রকল্পের মূলের স্বয়ংক্রিয় সনাক্তকরণ (.git | এইচজি | এসএনএন | বিজিআর | _ডার্কস ফোল্ডার সহ একটি), ব্যক্তিগতকৃত ফাইলের নাম বাদ দেওয়া এবং আরও অনেক কিছু অনুসন্ধান রয়েছে।

কেবল টিপুন <c-p>এবং এটি একটি খুব স্বজ্ঞাত ফলকটি খুলবে যেখানে আপনি যা চান তা অনুসন্ধান করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

একসাথে বেশ কয়েকটি ফাইল নির্বাচন করা এবং খোলানো সম্ভব। এটি অতিরিক্ত স্বেচ্ছাচারিত কমান্ডগুলিও গ্রহণ করে যেমন একটি নির্দিষ্ট লাইনে লাফানো, স্ট্রিং উপস্থিতি বা অন্য কোনও ভিম ​​কমান্ড।

রেপো: https://github.com/kien/ctrlp.vim


4
kien / ctrlp.vim মনেহীন। সিটিআরএলপিভিম / সিটিআরএলপি.ভিম কাঁটাচামচ ব্যবহার করার বিষয়ে sensক্যমত্য বলে মনে হচ্ছে, যা সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়েছে বলে মনে হচ্ছে: github.com/ctrlpvim/ctrlp.vim
ড্যামিয়েন

4
fzf ctrlp এর সাথে খুব মিল। এটি দ্রুত এবং ফলাফলগুলি আরও ভাল সাজায়। এটি ভিমের
still_dreaming_1

6

ভিআইএম একটি বিল্টিন ফাইন্ড কমান্ড হিসাবে (: সাহায্য করতে সাহায্য করুন) তবে কেবল প্রথম পাওয়া ফাইলটি খুলুন। তবে আপনি এই আশ্চর্যজনক প্লাগইনটি ব্যবহার করতে পারেন: ফজিফাইন্ডার যা আপনার যা চান সব কিছুই করে এবং আরও অনেক কিছু করে


3

আপনি এর সাহায্যে ফাইল সিস্টেমটি ব্রাউজ করতে পারেন :ex ., তবে পুনরাবৃত্তভাবে কীভাবে অনুসন্ধান করতে হয় তা আমি জানি না (আমি একজন ভিম আভিজাত্য - আমি এটি মাত্র দশ বছর ব্যবহার করছি)।

কয়েকটি জনপ্রিয় ফাইল ব্রাউজার প্লাগ-ইন রয়েছে:

সুপার ইউজারে এই থ্রেডটিও দেখুন


3

কমান্ড-টি আপনাকে কেবল কয়েকটি অক্ষর টাইপ করে খুব দ্রুত একটি ফাইল সন্ধান করতে দেয়। আপনি ফাইলটি একটি নতুন ট্যাবেও খুলতে পারেন, তবে এটি রুবি সমর্থন সহ সংকলিত ভিএম দরকার।


এবং পাশাপাশি ctrlp.vim।
ক্রিস


1

ভিএম এর গ্রেপ, এলগ্রিপ, ভিমগ্রিপ বা লভিমগ্রিপ নামের কমান্ডগুলিতে বিল্ড রয়েছে যা এটি করতে পারে

সেগুলি কীভাবে ব্যবহার করতে হয় তার একটি টিউটোরিয়াল এখানে http://vim.wikia.com/wiki/Find_in_files_within_Vim#Recursive_S Search

আপনি এই জাতীয় নির্বাহের মাধ্যমে কোনও ভিএম থেকে সন্ধান বা গ্রেপ করার মতো একটি বাহ্যিক কমান্ডও ব্যবহার করতে পারেন

:!find ...

গ্রেপ, এলগ্রিপ, ভিমগ্রিপ বা লভিমগ্রিপ কীভাবে এটি করতে পারে? তারা একটি ফাইল অনুসন্ধান করে কোনও ফাইলের জন্য নয়।
ক্রুজ

উদাহরণস্বরূপ:
গ্রেপ

এই ফাইলগুলির নাম। জাভা শব্দ পরীক্ষার শব্দটি অনুসন্ধান করবে না? আপনি দয়া করে ব্যাখ্যা করতে পারেন? আমি এটি কাজ করতে পারে না।
kroiz

@ ক্রোজ, হ্যাঁ সমস্ত ফাইলের মধ্যে :grep test */.javaশব্দটি অনুসন্ধান করবে । ফাইলগুলি অনুসন্ধানের জন্য শেল কমান্ড ব্যবহার করবে । শেল কমান্ড চমত্কার শক্তিশালী যদি আপনি pcre বা বর্ধিত Regex সঙ্গে এটি একত্রিতtest.java:!findfindfind
alpha_989

1

আমি অবাক হয়ে এখনও কেউ ইউনাইট.ভিমের কথা উল্লেখ করি নি।

ফাইল সন্ধান করা (অস্পষ্টভাবে বা অন্যথায়) এটি কোনও বিকাশকারীর জন্য কী করতে পারে তার আইসবার্গের খুব ইঙ্গিত। এটা তোলে জন্য সমর্থনে গড়ে তুলেছে ag, gitএবং অন্যান্য অনুষ্ঠান / ইউটিলিটি / তেজ থাকা প্লাগইনগুলির একটি অগণ্য। শেখার বক্ররেখা কিছুটা খাড়া হতে পারে তবে আমি এটি ছাড়া আমার জীবন ভাবতে পারি না। ব্যবহারকারীর বেস বড়, এবং তত্ক্ষণাত বাগগুলি স্থির করা হয়।


1

কুইকফিক্সের মতো ফলাফল ব্রাউজিং

ব্যবহার:

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-200749743
  • Gtfind 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>'))

1

আপনার পরিস্থিতির উপর নির্ভর করে (এটি হ'ল নিম্নলিখিত কমান্ডটি কেবল একটি একটি ফাইল খুঁজে পাবে), সম্ভবত একটি কমান্ড ব্যবহার করুন:

:e `locate SomeUniqueFileName.java`

এটি বর্তমান ট্যাবে (ই কমান্ড) একটি ফাইল যা চলমান (এই উদাহরণস্বরূপ) চলার ফলস্বরূপ, ভিমকে খোলার কারণ করবে,

locate SomeUniqueFileName.java

এখানে লক্ষ্য করুন যে যাদুটি হ'ল কমান্ডের চারপাশে ব্যাকটিকস, এটি শেল কমান্ড থেকে আউটপুটকে Vim কমান্ডে ব্যবহারযোগ্য টেক্সটে রূপান্তরিত করবে।


1

এই ফাংশনটির জন্য আপনার কেবল একটি প্লাগইন লাগবে না, নীচে কোড স্নিপেটই যথেষ্ট।

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>

এটি কিভাবে ব্যবহার করবেন দয়া করে উদাহরণ যুক্ত করুন।
ভাইটালি জাদানেভিচ

1

চালান:

:args `find . -name '*xml'`

ভিম ব্যাকটিক্সে শেল কমান্ড চালাবে, ফাইলগুলির তালিকাটি আর্গলিস্টে রাখবে এবং প্রথম ফাইলটি খুলবে। তারপর আপনি ব্যবহার করতে পারেন :argsarglist (অর্থাত তালিকা ফাইল পাওয়া যায়নি) এবং দেখতে :nএবং :Narglist ফাইল মাধ্যমে এগিয়ে এবং bacwards নেভিগেট করতে। দেখুন https://vimhelp.org/editing.txt.html#%7Barglist%7D এবং https://vimhelp.org/editing.txt.html#backtick-expansion


0

আপনি এই প্লাগইনটি দিয়ে আপনার "পথে" পুনরাবৃত্তভাবে ফাইলগুলি সন্ধান করতে পারেন । এটি ফাইলের নামের জন্য ট্যাব সমাপ্তি সমর্থন করে।


0

এজি সরঞ্জাম এবং সংশ্লিষ্ট এজি ভিএম প্লাগইন এই সমস্যাটিকে পুরোপুরি সমাধান করে:

কিছু প্যাটার্ন ব্যবহার করে একটি ফাইল সন্ধান করতে:

AgFile! pattern

এটি ফলাফলের সাথে কুইকফিক্স উইন্ডোটি খুলবে যেখানে আপনি চয়ন করতে পারেন।

প্যাটার্ন হিসাবে নির্বাচিত শব্দটি ব্যবহার করে এই কমান্ডটি কল করতে আপনি ভিম কী-বাইন্ডিং যুক্ত করতে পারেন।

nnoremap <silent> <C-h> :AgFile! '<C-R><C-W>'<CR>
vnoremap <silent> <C-h> y :AgFile! '<C-R>"'<CR>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.