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


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.