ইম্যাক্স লিস্পে সেটেক এবং সেটেক-ডিফল্টের মধ্যে পার্থক্য


89

ইমাস লিসপ সম্পর্কে আমার একটি প্রশ্ন আছে। Setq এবং setq- ডিফল্ট মধ্যে পার্থক্য কি ?

টিউটোরিয়ালগুলি বলছে যে স্থানীয় বাফারে সেটক কার্যকর হয় যখন সেটক-ডিফল্ট সমস্ত বাফারকে প্রভাবিত করে।

উদাহরণস্বরূপ, যদি আমি লিখেছি (ক-Var একটি Vars-মান setq) মধ্যে init.el , আমি গিয়ে Emacs শুরু এবং একটি নতুন বাফার খোলার পর পাওয়া যায় নি, একটি Var সেখানে এবং তার মান একটি Vars-মান । আমি ভেবেছিলাম এটি থাকার কথা ছিল না। সেটাক এবং সেটেক-ডিফল্টের মধ্যে কোনও পার্থক্য নেই বলে মনে হচ্ছে ।

আমার বোঝার মধ্যে কিছু ভুল আছে?

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

  1. আমি লিখেছি (setq হ্যালো 123) মধ্যে init.el ফাইল, এবং আমি চালানোর abuffer Emacs শেল করুন, তারপরে আমি ইনপুট "হ্যালো CX সিই" , এটা "123" দেখায়। যখন আমি এটি নতুন সমস্ত বাফারে চালিত করি তখন একই ঘটনা ঘটে।

  2. আমি লিখেছি (setq ট্যাব-চওড়া 4) মধ্যে init.el ফাইল। আমি যখন ট্যাব-প্রস্থের Cx Ce চালাই , এটি "8" দেখায় (বর্তমান মোডটি 'পাঠ্য')। যাইহোক, যখন আমি ব্যবহার করি (setq-default ট্যাব-প্রস্থ 4) , এটি "4" দেখায়। আমি এই ঘটনাটি ব্যাখ্যা করতে পারি না।

উত্তর:


102

ইমাক্সের কিছু ভেরিয়েবলগুলি "বাফার-লোকাল", অর্থাত্ প্রতিটি বাফারকে সেই পরিবর্তনশীলটির জন্য পৃথক মান রাখতে দেওয়া হয় যা বিশ্বব্যাপী ডিফল্টকে ওভাররাইড করে। tab-widthবাফার-লোকাল ভেরিয়েবলের একটি ভাল উদাহরণ।

যদি কোনও ভেরিয়েবল বাফার-স্থানীয় হয় তবে setqতার বর্তমান মানটি বর্তমান বাফারে setq-defaultসেট করে এবং গ্লোবাল ডিফল্ট মান সেট করে।

একটি পরিবর্তনশীল বাফার-স্থানীয় যদি না হয়, তাহলে setqএবং setq-defaultএকই জিনিস করে।

আপনার ক্ষেত্রে ২, বর্তমান বাফারে (setq tab-width 4)বাফার-স্থানীয় মানটি tab-width4 তে নির্ধারণ করুন, গ্লোবাল ডিফল্ট মান tab-widthএখনও 8 এ রেখেছেন, সুতরাং যখন আপনি tab-widthকোনও আলাদা মান বা স্থানীয় মূল্য না পেয়ে অন্য বাফারে মূল্যায়ন করেন , তখন আপনি এটি 8 দেখতে পেয়েছিলেন Then আপনি যখন ডিফল্ট মান 4 এ সেট করেন, সেই বাফার এটিকে তুলে নিয়েছিল, কারণ এর এখনও স্থানীয় কোনও মান নেই।


যখন আমি (ট্যাব-প্রস্থ 4 সেট করে) এবং এটি মূল্যায়ন করি, এটি প্রতিটি বাফারে সর্বদা 8 হয়। কেন জানি না। দেখে মনে হচ্ছে এটি কার্যকর হয় না। তবে যখন আমি ব্যবহার করি (সেট-ডিফল্ট ট্যাব-প্রস্থ 4), এটি প্রতিটি বাফারে কার্যকর হয়। আমিও জানি না কেন :(
— রুয়ানাহাও

(setq tab-width 4)আপনি যেখানে অভিব্যক্তিটি মূল্যায়ন করেছেন সেখানে বাফারে কার্যকর হয়; আপনি যদি এটি *scratch*বাফারে মূল্যায়ন করেন তবে তার বাফারে এর মান পরীক্ষা করুন।
— ট্রিপলি

4
tab-widthএকটি বাফার-লোকাল ভেরিয়েবল। সুতরাং আপনি যখন (setq tab-width 4)এটি বর্তমান বাফারে 4 তে সেট করা থাকে। অন্যান্য সমস্ত বাফার একটি tab-widthগ্লোবাল ডিফল্ট 8 টি ধরে রাখে 8.. আপনি যখন (setq-default tab-width 4), আপনি গ্লোবাল ডিফল্টকে tab-width4 এ পরিবর্তন করছেন , সুতরাং এখন প্রতিটি বাফার যা tab-widthনিজেকে সংজ্ঞায়িত করে না সেটিতে নতুন ডিফল্ট থাকে।
— dfan

4
হ্যাঁ. স্টার্টআপে ইম্যাক্সের ক্রমগুলির ক্রমগুলির তালিকা দেখুন ।
— আরআইডি

4
@ruanhao আপনি যদি init.el এ (setq ট্যাব-প্রস্থ 4) রেখে থাকেন তবে এটি কেবলমাত্র সেই বাফার (init.el) এর জন্য প্রযোজ্য হবে। আপনি যদি এই পরিবর্তনটি সমস্ত নতুন বাফারগুলিতে প্রয়োগ করতে চান তবে (setq-default ট্যাব-প্রস্থ 4) এটি সম্পাদন করবে। অতিরিক্তভাবে, আপনি যদি কোনও নির্দিষ্ট ধরণের ফাইলের জন্য একটি মোড তৈরি করতে চান তবে আপনি সম্ভবত (setq ট্যাব-প্রস্থ 4) ব্যবহার করতে চান যাতে গ্লোবাল ডিফল্টটিকে ওভাররাইড না করে।
— হেম 18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.