ভিম: লেট এবং সেট এর মধ্যে পার্থক্য কী?


144

ভিএম এডিটরের মধ্যে letএবং পার্থক্য কী set?

আমি সবসময় ভাবছিলাম কেন তাদের দুজনের উপস্থিতি আছে?

এছাড়াও, আমি এর historicalতিহাসিক পটভূমি শুনতে আগ্রহী হব।


15
আপনি চেষ্টা করে দেখুন :help setএবং :help letম্যানুয়ালটি পড়েছেন?
hochl

5
হ্যাঁ আমি এটি করেছিলাম, তবে কেন সেটটির অস্তিত্ব রয়েছে তা এখনও পাই না, কারণ একই জিনিসগুলি করা যাক।
ডেভ হাল্টার

1
@ ডেভিডহাল্টার: letএকই জিনিসগুলি করেন না। এমন কিছু জিনিস রয়েছে যা দিয়ে আপনি অর্জন করতে পারবেন না setসেগুলি দিয়ে letআমার উত্তরটি দেখুন।
রেনী নাইফেনিগার

4
setlocalএখনও কেউ উল্লেখ করেন নি ... এগুলি &l:*ভেরিয়েবলের সমতুল্য ।
ক্রিস মরগান

1
@ ভিক্টরজামানিয়ান: বুলিয়ান সেটিংসের জন্য এটি ন্যায়সঙ্গতভাবে set noicবা পক্ষে সহজতর set ic। যতদুর আমি জানি, setএছাড়াও সঙ্গে সামঞ্জস্যপূর্ণ viযা let, যেমন আমি অনুমান , নয়।
রেনে নিনফেনিগার

উত্তর:


143

:setএকটি ভেরিয়েবলের মান নির্ধারণের জন্য , বিকল্পগুলি সেট করার :letজন্য ।

এটি ঘটে যে কোনও বিকল্পের মান একটি দ্বারা প্রেরিত বিকল্পের নামের সাথে সংযুক্ত থাকে &( &option-nameতারপরে নির্মাণটি "সাধারণ" ভেরিয়েবলগুলির সাথে খুব অনুরূপ আচরণ করে)। সুতরাং, নিম্নলিখিত সমতুল্য:

:set  tw=40
:let &tw=40

তবে, উদাহরণস্বরূপ, গ্লোবাল ভেরিয়েবল foo ( :let g:foo=50) এ 50 অর্পণ করা একটি :setকমান্ড দিয়ে অর্জন করা যায় না (কারণ g: foo একটি পরিবর্তনশীল এবং বিকল্প নয়)।

কিছু বিকল্প বুলিয়ান মত হয়। এগুলি সেট করার সময়, কোনও মান প্রয়োজন হয় না (যেমন :set noicএবং এর বিপরীতে :set ic)।


22

সেট বিকল্পগুলির জন্য বিশেষায়িত আরও বেশি ব্যবহারকারী-বান্ধব ইন্টারফেস

যেমন

:verbose set

কার্যকরভাবে সমস্ত বিকল্প প্রদর্শন করতে।

:set tw=40

শর্টহ্যান্ড হিসাবে কাজ করবে set textwidth=40

:set wrap&

বিকল্পের জন্য ডিফল্ট মান সেট করবেwrap

:set nowrap

বিকল্পটি আনসেট করবে

:set wrap!

হবে টগল বিকল্প

সবচেয়ে গুরুত্বপূর্ণভাবে,

:setTab # ট্যাব সমাপ্তি পেতে!

উপরের কয়েকটি (সহজেই) দিয়ে অর্জন করা যায় let


পুনরায় :set nowrap:, অপশনস টেক্সট (: সাহায্য সেট-অপশন) বলেছেন:: se [t] {বিকল্প og টগল বিকল্প: সেট করুন, এটি স্যুইচ করুন। সংখ্যা বিকল্প: মান দেখান। স্ট্রিং বিকল্প: মান দেখান। এটি আপনার এখানে যা আছে তার সাথে একমত নয়, যখন আপনি বলবেন 'বিকল্পের মোড়কের জন্য ডিফল্ট মান সেট করবে'। ??
উপবৃত্তাকার দর্শন

@ এলিপেটিক্যভিউ আমি কিছুটা বিভ্রান্ত আপনি ডকুমেন্টেশনের অংশগুলি উদ্ধৃত করছেন। আপনি যদি পুরো জিনিসটি পড়েন তবে আপনি এটি দেখতে পাবেন যে এটি আমার সমস্ত ক্ষেত্রে একমত। [দ্রষ্টব্য: noপূর্বনির্ধারিত বিকল্পগুলি বিভ্রান্তিকর হতে পারে। আরো উল্লেখ্য option&একটি trailing হয়েছে &যে আপনি মিস হতে পারে]।
sehe

12

:setকেবলমাত্র বিকল্পগুলির সাথে কাজ করে এবং সেহের উত্তরটি কয়েকটি ভাল ব্যবহারের উদাহরণ প্রদর্শন করে।

:letঅন্যদিকে প্রায় যা কিছু :setকরতে পারে তা করতে পারে আরও অনেক কিছু। এটি একটি মান নির্ধারণ করতে পারে

  • একটি পরিবর্তনশীল, যেমন let vi = 'vim'
  • একটি বিকল্প, যেমন let &tw = 40
  • একটি রেজিস্টার, যেমন let @a = $HOME . '/vimfiles'
  • পরিবেশের পরিবর্তনশীল, যেমন let $NOTHING = 'NOTHING'

আর একটি বড় পার্থক্য হ'ল ডান হাতের দিকটি :letএকটি অভিব্যক্তি , যার অর্থ আপনি স্ট্রিং কন্ডকেটেশন (উপরে আমার রেজিস্টারের উদাহরণে দেখা যায়) এবং গাণিতিক ক্রিয়াকলাপগুলি (যেমন let &tw = 40 + 60) যেমন কাজ করতে পারেন things এর অর্থ হ'ল এটি যদি স্ট্রিং থাকে তবে আপনাকে মানটি উদ্ধৃত করতে হবে। :setঅন্যদিকে মান ভারব্যাটিম পড়ে।

:setবিকল্পগুলির সাথে এটি ব্যবহার করা সহজ যদিও :letএটি বেশিরভাগটি করতে পারে, সেহের উদাহরণগুলি ব্যবহার করে এখানে কিছু তুলনা করা হচ্ছে ("এন / এ" মানে এটি করার কোনও উপায় নেই :let)

  • :verbose set বনাম এন / এ (সমস্ত বিকল্পের তালিকার অন্য উপায় আছে বলে মনে করবেন না)
  • :set tw=40বনাম :let &tw = 40(হ্যাঁ, letআপনিও একই শর্টহ্যান্ড ব্যবহার করতে পারেন )
  • :set wrap& বনাম এন / এ
  • :set nowrapবনাম :let &wrap = 0(বুলিয়ান বিকল্পগুলির জন্য, 0 টি মিথ্যা এবং 1 টি সত্য)
  • :set wrap! বনাম :let &wrap = !&wrap

আরও কয়েকটি উদাহরণ

  • একটি বিকল্পের মান মুদ্রণ করুন: :set formatoptions?বনাম :echo &formatoptions( letমানগুলি প্রিন্ট করে না, বিপরীতে set)
  • একসাথে একাধিক বিকল্প বরাদ্দ করা:

    :set et sw=4 sts=4 
    

    বনাম

    :let [&et, &sw, &sts] = [0, 4, 4]
    
  • গ্লোবাল বিকল্প সেট করুন: setglobal etবনামlet &g:et = 1

  • স্থানীয় বিকল্প সেট করুন: setlocal etবনামlet &l:et = 1

দেখুন :h :setএবং :h :letআরও বিশদ জন্য


TL; ড

:setশুধুমাত্র বিকল্পগুলির সাথে কাজ করে তবে বাক্য গঠনটি আরও সহজ। :letকেবল বিকল্পগুলি নয় ভেরিয়েবল, রেজিস্টার এবং পরিবেশ ভেরিয়েবলগুলির সাথেও কাজ করে। বিপরীতে :set, ডান হাতের দিকটি :letএকটি অভিব্যক্তি।


10

লোকেরা যা লিখেছেন সে সম্পর্কে বিস্তৃত করে :let, আমি লক্ষ্য করেছি যে এটি কোনও বিকল্পের সাথে একটি ভেরিয়েবলের মান নির্ধারণ করতে ব্যবহার করা যেতে পারে, কিছু :setকরতে পারে না। উদাহরণস্বরূপ, এই ফাংশন ব্যবহার letবিশ্বব্যাপী পরিবর্তনশীল মান দায়িত্ব অর্পণ করা orig_twথেকে textwidthবিকল্প:

" Toggle Autowrap
" Default of 72 but can be overridden by tw settings in other vimrc files
let g:orig_tw = 72
function Toggle_autowrap_mode()
    if &textwidth == 0
        " Must use let instead of set here in order for g:orig_tw to be
        " evaluated properly
        let &textwidth = g:orig_tw
        echo "Autowrap mode on tw=" . &textwidth
    else
        let g:orig_tw = &textwidth
        set textwidth=0
        echo "Autowrap mode off tw=" . &textwidth
    endif
endfunction

noremap _A :call Toggle_autowrap_mode()<CR>

সংক্ষিপ্তসার: let একটি বিকল্পে একটি ভেরিয়েবল নির্ধারণের অনুমতি দেয়: let &textwidth = g:orig_twএবং বিপরীতে।
সার্জ Stroobandt

2

এটা খুবই সাধারণ.
লোকেরা setযেমন বলেছে বিকল্পগুলির পক্ষে এবং সীমাবদ্ধতার কারণে আরও ভাল কাজ করে। The setতিহাসিক কমান্ডটি যা সমস্ত সংস্করণ viতাদের বিকল্পগুলি সেট করতে ব্যবহার করে। সর্বাধিক (সমস্ত?) অন্যান্য সংস্করণ viহবে না let

তবে সম্ভবত সবচেয়ে গুরুত্বপূর্ণটি হ'ল setসমস্ত সংস্করণে কাজ করে vim, letআপনি সংকলন করলে কমান্ডটি বাদ দেওয়া যেতে পারে vim। মানক tinyএবং smallবিল্ডগুলি এটি করে।

যদি এটি হারিয়ে যায় letতবে ত্রুটিটি দেয়:
E319: Sorry, the command is not available in this version

দ্রষ্টব্য: ifএবং endifতা কার্যকর করা হয় না vim.tinyতবে এই ক্ষেত্রে কমান্ডগুলি ত্রুটি দেয় না, পরিবর্তে দুটি কমান্ডের মধ্যে থাকা সমস্ত কিছুই বাদ দেওয়া হয় else

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