ভিম ফাইলের নাম / পথের সমাপ্তি


11

আমি জানি যে আমি বর্তমান ডিরেক্টরি থেকে ফাইলের নাম / পাথ সিটিটিএল + এক্স, সিটিআরএল + এফ ( compl-filename) ব্যবহার করে সম্পূর্ণ করতে পারি । এটি সেট অটোচডির সাথে একত্রে দুর্দান্ত কাজ করে যা বর্তমান ডিরেক্টরিটি সক্রিয় বাফার ডিরেক্টরিতে আপডেট করে।

যাইহোক, আমি airblade/vim-rooterবর্তমান ডিরেক্টরিটিকে "প্রকল্প" ফোল্ডার তৈরি করতে ব্যবহার শুরু করেছি । এখন ফাইলের নাম সমাপ্তি সবসময় প্রকল্প ফোল্ডার থেকে শুরু হয়।

প্রশ্ন: বর্তমান নামের পরিবর্তে অ্যাক্টিভ বাফার ডিরেক্টরিটি ফাইল নাম সম্পূর্ণ করার কোনও উপায় আছে কি? বা অন্য কিছু workaround?

স্ট্যাকওভারফ্লোতেও জিজ্ঞাসা করা হয়েছে


5
সি-এক্সসি-এফ এটির কনফিগার করার জন্য কোনও বিকল্প ছাড়াই সর্বদা বর্তমান বাফারের ওয়ার্কিং ডিরেক্টরি ব্যবহার করে (এটি কোনওভাবে সমর্থন করে না path)। এটি নির্ভর করে আপনার ভিএম-রুটারের জন্য কী ব্যবহার করা হয় তা নির্ভর করে। আপনি এটি থেকে কী চান তার উপর নির্ভর করে আমরা অন্যান্য প্লাগইন ব্যবহার করতে পারি। অন্যদিকে: আমি youcompleteme ব্যবহার করি, যা আপনি টাইপ করা শুরু করলে বর্তমান বাফার ডিরেক্টরি থেকে পাথ সম্পূর্ণ করে ./। দেখুন reddit.com/r/vim/comments/216jdd/...
muru

উত্তর:


7

@ মুরু যেমন উল্লেখ করেছেন, যে ডিরেক্টরি থেকে পথ এবং ফাইলের নাম সম্পূর্ণ করতে হবে সেটি কনফিগার করার কোনও বিকল্প নেই। এটি সর্বদা উইন্ডোটির কার্যকরী ডিরেক্টরি ব্যবহার করে।

এটিতে সহায়তার জন্য আমি কয়েকটি ফাংশন এবং ম্যাপিং লিখেছি। পর্দার আড়ালে, তারা :lcdঅস্থায়ীভাবে স্থানীয় ওয়ার্কিং ডিরেক্টরি (ব্যবহার করে ) পরিবর্তন করে , তারপরে সম্পন্ন হওয়ার পরে পূর্ববর্তী কার্য ডিরেক্টরিটি পুনরুদ্ধার করে।

হাতি

এমনকি আমার অজানা কারণে, আমি এই মাইক্রো-প্লাগইন এলিফ্যান্ট বলেছি ।

এখানে কোডটি ( গিটহাবের আমার ভিম কনফিগারেশন থেকে অনুলিপি করা হয়েছে ):

let g:elephant_map = {
    \ 'f': function('elephant#current_file'),
    \ 'p': function('elephant#vcs_project')
\ }

function! elephant#prompt(base)
    let l:Fcn = get(g:elephant_map, a:base, function('elephant#identity'))
    let l:basedir = l:Fcn()
    execute 'lcd' l:basedir
    let l:file = fnamemodify(input(l:basedir.'/', '', 'file'), ':p')
    lcd -
    return fnamemodify(l:file, ':.')
endfunction

function! s:elephant_init()
    let l:base = getchar()
    return elephant#prompt(nr2char(l:base))
endfunction

function! elephant#identity()
    return '.'
endfunction

function! elephant#vcs_project()
    return fnamemodify(finddir('.git', '.;'), ':h')
endfunction

function! elephant#current_file()
    return expand('%:h')
endfunction

inoremap <silent> <expr> <C-R><C-E> <SID>elephant_init()
cnoremap <silent> <C-R><C-E> <C-R>=<SID>elephant_init()<CR>

এটি কিভাবে ব্যবহার করতে

এই ম্যাপিংগুলি ব্যবহার করে 3 টি ধাপে ঘটে।

1. ম্যাপিং শুরু করুন

সন্নিবেশ মোড বা কমান্ড-লাইন মোডে, ম্যাপিংটি ব্যবহার করে অনুরোধ করুন <C-R><C-E>

2. একটি ডিরেক্টরি চয়ন করুন

আপনি কোন মূল ডিরেক্টরিটি থেকে সম্পূর্ণ করতে চান তা চয়ন করতে একটি একক অক্ষর টাইপ করুন। উপরের কোডটি দুটি ধরণের শিকড় সরবরাহ করে:

  • f - বর্তমান ফাইল (বাফার) যে ডিরেক্টরিতে থাকে
  • p - গিট প্রকল্পের বেস ডিরেক্টরি বর্তমান ফাইলের অন্তর্ভুক্ত

৩.পথ বা ফাইলের নাম লিখুন

সম্পূর্ণ ডিরেক্টরি উপলব্ধ হওয়ার সাথে সাথে আপনাকে নির্দিষ্ট ডিরেক্টরিটির সাথে সম্পর্কিত বা ফাইলের নাম লিখতে অনুরোধ করা হবে। Enterশেষ হয়ে গেলে টিপুন ।

কিছু নোট

  • এটি সন্নিবেশ মোডে ইনলাইন সম্পূর্ণতা প্রদান করে না <C-X><C-F>; পরিবর্তে, আপনি কমান্ড-লাইন প্রম্পটে (যেখানে :কমান্ডগুলি যায়) তে পথ বা ফাইলের নাম লিখবেন । টিপানোর পরে Enter, পাথটি বাফারে .োকানো হবে।
  • কমান্ড-লাইন মোডেও এটি একই সত্য, যা আপনি আঘাত করতে গিয়ে কখনও কখনও বিভ্রান্ত হয়ে যেতে পারেন Enterএবং ভুলে যান যে আপনি যে Enterটাইপটি টাইপ করছিলেন তা আপনাকে এখনও চাপতে হবে।
  • অন্যান্য ডিরেক্টরি ফাংশন এগুলিতে যুক্ত করে নিবন্ধভুক্ত হতে পারে g:elephant_map
  • Pathোকানো পথটি হবে সম্পূর্ণ, পরম পথ। সেই আচরণটি পরিবর্তন করতে স্ক্রিপ্টটি টুইট করা যেতে পারে, তবে আমি এটির কাছে পাইনি।

সমাধানটি বেশ পরীক্ষা করে দেখেনি, তবে সম্পূর্ণতার কারণে এটি গ্রহণ করেছে। পরিবর্তে আমি প্রস্তাবটি কার্যকরভাবে ব্যবহার করেছি: আপনি Ctrl + x, ctrl + f এর পরিবর্তে কমপ্লেমমে
রাফায়েল বারবোসা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.