আমি প্লাগইনগুলির জন্য কীভাবে পরীক্ষা করতে পারি এবং কেবল সেগুলিকে অন্তর্ভুক্ত করা যায় তবে সেগুলি .vimrc এ উপস্থিত থাকে?


14

আমার মধ্যে .vimrcআমি ftpluginএটি সম্পর্কিত যে কোনও কমান্ড সাফল্যের সাথে লোড করা হয়েছে অনুমানের অধীনে এবং ব্যবহার করার চেষ্টা করছি use তবে, আমি এখন কয়েকটি পুরানো মেশিনের মুখোমুখি হয়েছি যার মধ্যে প্লাগইন ইনস্টল করা নেই। আমি কি কোনওভাবে এই শর্তসাপূর্ণ filetype onব্লকটিতে এই প্লাগইনটি লোড করা এবং একইরকম নির্দেশাবলী যুক্ত করতে পারি ?

আমি দেখেছি রঙীন স্কিম এবং ভিম সংস্করণের জন্য শর্ত রয়েছে তবে আমি এমন কোনও উদাহরণ দেখিনি যা প্লাগইনটি পরীক্ষা করে (বা এটি সনাক্ত করতে পারে না)।

নোট: ভদ্র থাকুন, আমি একজন ভিমস্ক্রিপ্টের সূচনাপ্রাপ্ত।


1
নোট করুন যে আপনার পরে প্লাগইনগুলি লোড হয়ে গেছে ~/.vimrc, সুতরাং আপনি ~/.vimrcপ্লাগইন ফাইলের অস্তিত্বের জন্য পরীক্ষা না করা বা স্বতঃসমানায় যেমন প্লাগইনগুলি লোড না হওয়া পর্যন্ত পরীক্ষা স্থগিত না করা আপনি নিজের মধ্যে কোনও প্লাগইনের প্রভাবগুলির জন্য পরীক্ষা করতে পারবেন না VimEnter।
গ্যারিজোহান

@ গ্যারিজহান: আহা, এটি আকর্ষণীয়। কারণ এই জাতীয় বিদ্যমান উত্তরের সাথে বিরোধিতা করে। আপনি উত্তর হিসাবে এটি লিখতে পারেন?
0xC0000022L

আমি আমার উত্তরটি কিছুটা সমস্যা সমাধানের জন্য সম্পাদনা করেছি।
কিউএক্সএক্স

আমার মন্তব্য কিউএকএক্স এর উত্তরের বিরোধিতা করে নি; এর অর্থ এমন একটি পয়েন্টের দিকে দৃষ্টি আকর্ষণ করা ছিল যা যদি কেউ QQx এর উত্তর মনোযোগ সহকারে না পড়েন বা এ থেকে ভুল সূচনা না করে তবে তা মিস করা যেত। উত্তরটি শুরু করা ভাল ছিল এবং এখন আরও পরিষ্কার।
গ্যারিজোহান

উত্তর:


19

exists()প্লাগইন দ্বারা সংজ্ঞায়িত কোন ভেরিয়েবল, কমান্ড বা ফাংশনটি ভিএম হিসাবে পরিচিত কিনা তা যাচাই করতে ফাংশনটি ব্যবহার করে শর্তসাপেক্ষে আপনি সেই ব্লকটি মোড়তে পারেন।

এখানে আমার কাছে couple / .vim এর অধীনে থাকা কয়েকটি বিট রয়েছে:

" after/plugin/speeddating.vim
if exists(':SpeedDatingFormat')
    SpeedDatingFormat %-d %B %Y
endif

" ftplugin/ruby.vim
if exists('g:loaded_surround') && !exists('b:surround_'.char2nr(':'))
  let b:surround_{char2nr(':')} = ":\r"
endif

নোট করুন যে উপরের বিটগুলি ফাইলগুলিতে রয়েছে যা সাধারণ প্লাগইনগুলির পরে মূল্যায়ন হয়, এখানে একটি এফটিপ্লাগিন এবং after/pluginডিরেক্টরিতে একটি ফাইল ।

আরেকটি বিকল্প হ'ল ট্রাই / ক্যাচ ব্লক ব্যবহার করা হবে, যদিও এর জন্য কমপক্ষে ভিএম 7.০ প্রয়োজন:

if v:version >= 700
    try
        runtime bundle/pathogen/autoload/pathogen.vim
        call pathogen#infect()
    catch
    endtry
endif

tryBlock ব্লকের অংশে একবার ব্যর্থ হলে এটি catchবিভাগে চলে যাবে। যেহেতু catchবিভাগটি খালি রয়েছে, endtryবিবৃতি দেওয়ার পরে এটি আরম্ভ করা ফাইলের বাকীটি দিয়েই চলতে থাকবে ।

যেহেতু এটি ইতিমধ্যে লোড হওয়া প্লাগইনের উপর নির্ভর করার পরিবর্তে ম্যানুয়ালি কোড লোড হচ্ছে, এটি .vimrc ফাইলে নিজেই করা যেতে পারে।


8

আমার পছন্দসই পদ্ধতিটি কেবলমাত্র প্লাগইন ফাইলটির অস্তিত্ব পরীক্ষা করা। আমি এই সহজ খুঁজে।

if !empty(glob("path/to/plugin.vim"))
   echo "File exists."
endif

যুক্তিযুক্ত মনে হচ্ছে, তবে বেস পাথটি কী? এটি কি স্বয়ংক্রিয়ভাবে ভিম হোম (অর্থাত্ সাধারণত ~/.vim)?
0xC0000022L

আপনার .vimrc কনফিগারেশন এবং আপনার প্যাকেজ পরিচালনার পছন্দগুলিতে নির্ভর করে। আমি এটি করি:if filereadable($HOME."/.vim/plugins.vim") source ${HOME}/.vim/plugins.vim endif
user3751385

ধন্যবাদ, দুর্দান্ত আমি আরও উদ্বিগ্ন ছিলাম যে আপনি যা দিয়েছিলেন তার দ্বারা কিছুটা বেস পথ রয়েছে।
0xC0000022L

4

আমি আমার ভিম কনফিগারেশনকে একসাথে ডিরেক্টরিগুলির .vimrcপরিবর্তে একসাথে রাখার সময় এটি অর্জন করতে চেয়েছিলাম after/। এই সমাধানটি আমি নিয়ে এসেছি:

  1. এটি সরবরাহ করে এমন একক কমান্ড পরীক্ষা করে প্রতিটি প্লাগইনের অস্তিত্ব পরীক্ষা exists()করুন এবং যদি উপস্থিত থাকে তবে তার বিকল্পগুলি সেট করুন। (এটি গ্রহণযোগ্য উত্তরের মতোই।)

  2. উপরের পদ্ধতিতে সেট করা সমস্ত অপশন একটি ফাংশনের মধ্যে রাখুন ( SetPluginOptionsNow()আমার কোডে ডাকা )।

  3. VimEnterইভেন্টটিতে এই ফাংশনটি কল করুন , যা একটি নতুন ভিম সেশনে প্রবেশের সময় ট্রিগার হয়েছিল - তবে গুরুত্বপূর্ণভাবে, প্লাগইনগুলি সমস্ত লোড হওয়ার পরে । এই সত্যের কারণে, আমাদের exists()চেকগুলি কোনও সমস্যা ছাড়াই প্লাগইন ফাংশনগুলি পরীক্ষা করতে পারে।

আমার সেই অংশের একটি নমুনা এখানে .vimrc

""" PLUGIN-SPECIFIC OPTIONS
" These are "supposed to be" set in after/plugin directory, but then
" cross-platform synchronization would get even messier. So, au VimEnter it is. 

function! SetPluginOptionsNow()


    " NERDTree Options
    if exists(":NERDTree")
        map <F10> :NERDTreeToggle<CR>
    endif

    " Syntastic Options
    if exists(":SyntasticCheck")
        let g:syntastic_stl_format = '[Syntax: line:%F (%e+%w)]'
        set statusline+=%#warningmsg#
        set statusline+=%{SyntasticStatuslineFlag()}
        set statusline+=%*
        " and so on...

endfunction

au VimEnter * call SetPluginOptionsNow()
""" END OF PLUGIN-SPECIFIC OPTIONS

এই উত্তরটি ভিএম-এয়ারলাইন্সের সাথে ভাল লাগবে না। বিশেষত, VimEnter ইভেন্টের মতো কিছু নির্দিষ্ট করার জন্য অপেক্ষা করা দেখে airline_themeমনে হচ্ছে এটি বেশ কিছু ত্রুটি ঘটায় ... কেন আমি সত্যি তা নিশ্চিত নই।
স্টিভিপ

3

তবুও আরেকটি বিকল্প ব্যবহার করা হচ্ছে :silent! {cmd}, যা {cmd}অস্তিত্বহীন অবস্থায় ত্রুটিটিকে দমন করে । মূল সুবিধাটি হ'ল এটি একটি সংক্ষিপ্ত একক কমান্ড। এটি এমনকি ভিম 6 এ কাজ করে এবং andচ্ছিক স্টাফগুলির জন্য দুর্দান্ত।

উদাহরণস্বরূপ, এটি প্লাগইনগুলির টিম পোপ এর ব্যবহার দ্বারা ব্যবহৃত হয় repeat.vim ম্যাপিং পুনরাবৃত্তি করা।


এটি :silent!না !silent, এবং এটি অন্তর্ভুক্ত :unsilentকোথাও কখন ব্যবহৃত হয় তা বাদ দিয়ে সমস্ত ধারণকৃত কমান্ডের ক্ষেত্রে এটি প্রযোজ্য । (তবে এটি বিরল))
ইনগো কারকাত

2

প্রাথমিকভাবে অন্য একটি প্রশ্নে পোস্ট করা হয়েছে: /programming//a/48178537/2843583

ঠিক তেমন বিকল্প হিসাবে আপনি সিদ্ধান্ত নিতে একটি রেজিএক্সপেক্টও ব্যবহার করতে পারেন হাতের প্লাগইন আপনার কাছে রয়েছে কিনা runtimepath:

if &rtp =~ 'plugin-name'
    ...
endif

autoloadডিরেক্টরিতে কেবলমাত্র উইমস্ক্রিপ্ট কোড রয়েছে এমন প্লাগইনগুলির সাথে এটির কাজ করার এটির সুবিধা রয়েছে detected

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.