একটি তালিকার একটি উপাদান প্রতিস্থাপন কিভাবে?


36

এটি আমার মধ্যে ডিফল্টরূপে রয়েছে auto-mode-alist:

("\\.js\\'" . javascript-mode)

(এমনকি সহ emacs -Q) আমি বিকল্প js2-modeজন্য চাই javascript-mode। অবশ্যই, আমি ব্যবহার করতে পারে assq-delete-allএবং তারপর add-to-listআবার, কিন্তু আমি হতাশ করছি কিনা একটি ভাল উপায় নয়।

সম্পাদনা করুন: আমি স্পষ্টতই কাস্টমাইজ ব্যবহার করতে চাই না , আমি init.elনিজের তৈরিতে পছন্দ করি।

উত্তর:


37

@ ড্যানের উত্তর পুরোপুরি সূক্ষ্ম সমাধান হলেও এটি অপ্রয়োজনীয়। ইমাকস এখানে একটি বিকল্প ব্যবহার করার একটি কারণ হ'ল তালিকার সাহায্যে আপনি কেবল তালিকার সামনের অংশে একটি নতুন উপাদান যুক্ত করতে পারেন এবং এটি ছায়াটি তালিকার আরও সাথে মেলে

(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))

1
ডাউনওয়েটে কেন বলতে হবে?
ড্রিউ

1
আমি আপনার উত্তর upvated - ধন্যবাদ, এটি জানা ভাল। আমার ধারণা, ডাউনভোটার এই সমাধানটিকে অকার্যকর বলে মনে করেছেন (আমি বলতে চাই যে আমি একমত, যদিও এটিকে ডাউনভোটিংয়ের কারণ হিসাবে বিবেচনা করবেন না - সর্বোপরি, এটি উভয়ই আমার সমস্যা সমাধান করে এবং তথ্যের একটি মূল্যবান অংশ!)
এমবার্ক

7
স্বীকার করা যায়, এটি কীভাবে প্রতিস্থাপন করবেন সে প্রশ্নের উত্তর দেয় না । এর বক্তব্যটি হ'ল আপনাকে প্রতিস্থাপনের প্রয়োজন হবে না (যদি না আপনি বর্ণিত বিষয়গুলির তুলনায় অন্য কোনও প্রয়োজন না থাকে)।
ড্রিউ

2
প্রশ্নটি প্রকৃত অর্থে প্রযুক্তিগত দিক থেকে প্রতিস্থাপনের বিষয়ে নয় বরং উচ্চ-স্তরের অর্থে পরিবর্তনের বিষয়ে ছিল।
এরিক অলিক

2
এটি সর্বদা কার্যকর হবে না কোনও ক্ষেত্রেই যদি বিশুদ্ধ স্থানে থাকে বা ভবিষ্যতের কোনও সংস্করণে সরানো হয়।
রাজনীতি

33

setfজায়গায় মান পরিবর্তন করতে ব্যবহার করুন :

(setf (cdr (rassoc 'javascript-mode auto-mode-alist)) 'js2-mode)

আপনি যদি তালিকার কোনও মান প্রতিস্থাপন করতে চান তবে setfআপনার যা করা দরকার তা সাধারণ সরঞ্জাম machinery এর সাথে মোকাবিলা করার আরও অহঙ্কারী পদ্ধতির জন্য auto-mode-alist, @ ড্রয়ের উত্তর (এবং তার ছায়াময় সম্পর্কে ব্যাখ্যা) দেখুন।


কি দারুন. আমি এখন বোকা বোধ করছি। ধন্যবাদ! (এবং setfসক্ষম হওয়ার জন্য প্রতিটি জায়গার ধারণাটি সত্যিই জাভা লোকদের দেখানো উচিত))
এমবর্ক

6
@ এমবার্ক আপনি পার্ল ছেলেদের কাছে এই ক্লাসিক ব্যাখ্যাটি উপভোগ করতে পারেন। lists.warhead.org.uk/pipermail/iwe/2005-July/000130.html
purple_arrows

@ এমবর্ক: সত্যই বোকা বোধ করার কোনও কারণ নেই - setfসর্বদা প্রচলিত লিস্পে ব্যবহৃত হয়, তবে আপনি খুব কম ঘন ঘন এলিজপে চালান run
ড্যান

@ ড্যান: সত্য। এখন আমি ভাবছি setfসিএল এর তুলনায় এলিস্প কেন এত কম ব্যবহার করে ...
এমবার্ক

19

বাস্তবে কনস সেলটি দ্রুত পরিবর্তন করার সম্ভবত সম্ভবত way setcdr

setcdr is a built-in function in `C source code'.

(setcdr CELL NEWCDR)

Set the cdr of CELL to be NEWCDR.  Returns NEWCDR.

এটি লক্ষণীয় যে setfএটি পুরানো ইমাসসেনে উপলভ্য নয়, তবে setcdr


*** Welcome to IELM ***  Type (describe-mode) for help.
ELISP> (setq tmp '((one . 1) (two . 2) (three . 4)))
((one . 1)
 (two . 2)
 (three . 4))

ELISP> (setcdr (assq 'three tmp) 3)
3 (#o3, #x3, ?\C-c)
ELISP> tmp
((one . 1)
 (two . 2)
 (three . 3))

ইমাসসের কোন সংস্করণ যুক্ত হয়েছে তা আপনি কি জানতে পেরেছেন setf?
শেফার্ড

1
পছন্দ করুন আপনি কি জানেন কেন প্রয়োজন? আমি বলব যে কোনও ইমাক যা নতুন বিকাশের জন্য লক্ষ্যবস্তু হওয়া উচিত সেগুলির মধ্যে সেটফ রয়েছে, তবে আপনি যে ধরণের ডেটা সেট করতে চান তার জন্য এটি পরিচালনা করতে পারে না। এগুলিকে সাধারণ ভেরিয়েবল বলা হয়
শান অলরেড

কিছু নতুন কোডে সেটফ ব্যবহার করা ঠিক ছিল কিনা তা আমি জানতে চেয়েছিলাম, তবে আপনি যেমনটি বলেছিলেন এটি যে কোনওভাবেই সাম্প্রতিক সংস্করণ পর্যন্ত আমি চেয়েছিলাম তার জন্য কোনও সাধারণ পরিবর্তনশীল ছিল না।
শেফার্ড

5

ওপি এমন একটি সমাধান চেয়েছে যা স্ট্রিং কীগুলির সাহায্যে আলিস্টস পরিচালনা করে। এটি পরিচালনা করতে, এই প্রশ্নটি দেখুন । যদি সুযোগক্রমে আপনার কেবলমাত্র প্রতীক কী দিয়ে তালিকাগুলি পরিচালনা করতে হয় তবে ইমাস 25 হিসাবে আপনি ব্যবহার করতে পারেন:

(setf (alist-get <key> <alist>) <value>)

একটি সিডিআর প্রতিস্থাপন। আপনার যদি ইমাস 26 এ অ্যাক্সেস থাকে তবে এই কৌশলটি স্ট্রিং কীগুলির সাথে কাজ করে, নীচে:

(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)

মনে রাখবেন স্ট্রিং কীগুলি হ্যান্ডেল করার জন্য ইমাস 26-এ অন্য উপায় রয়েছে; উপরে উল্লিখিত হিসাবে এই প্রশ্নটি দেখুন ।


(setf (alist-get "\\.js\\'" auto-mode-alist nil nil #'equal) 'js2-mode)কাজ করা উচিত (যদিও Emacs 26 প্রয়োজন)।
npostavs

@ রেডনরোসবারো: একটি সম্পাদনা বৈশিষ্ট্য রয়েছে। আপনার উত্তর ঠিক করতে বিবেচনা করুন।
অ্যান্টোনিও

আপনি alist-getস্ট্রিংটি ব্যবহার করছেন "\\.js\\'"তবে alist-getএটি ভিত্তিক assq, সুতরাং আপনার উত্তরে দাবি হিসাবে এটি কোনও স্ট্রিংয়ের সাথে কাজ করবে না।
আন্তোনিও

@ অ্যান্টোনিও ওহ হ্যাঁ, আপনি পুরোপুরি সঠিক। আমি বুঝতে পারি নি যে পোস্ট করা প্রশ্নটি আসলে সমাধানের প্রয়োজন যা স্ট্রিং কীগুলি পরিচালনা করে। আমি সম্পাদনা করব, ধন্যবাদ!
রেডন রোসবারো

2

আপনি যদি জানেন যে আপনি আর কখনও জাভাস্ক্রিপ্ট-মোড ব্যবহার করবেন না তবে স্বতঃ-মোড-এটিকে অচ্ছুত হতে দিন এবং আপনার init.el এ যুক্ত করুন

  (defalias 'javascript-mode 'js2-mode "Some handy explanation goes here.")

1
আসলে, এর আসলে কোনও নেই javascript-mode: javascript-modeকেবলমাত্র একটি ডিফেন্স js-mode(ডিফল্টরূপে) এর জন্য এবং এটি বিশেষভাবে এইভাবে করা হয়েছিল যাতে ব্যবহারকারীরা আপনার পছন্দমতো পরামর্শ দেওয়ার মতো করতে পারে js2-mode( js-modeতারা চাইলে ব্যবহারের ক্ষমতা হারাতে না পারে)।
স্টিফান

আমি আমার উত্তরটি সিপারেল-মোড এবং এনএক্সএমএল-মোডের জন্য আলিয়াস করার অভ্যাস থেকে পেয়েছি। তাহলে এখানে কৌশলটি কী করবে? (ডিফালিয়াস 'জেএস-মোড' জেএস 2-মোড)?
ম্যাথিয়াস

1
তুমি আমাকে ভুল বুঝেছ. আমি বলছি যে আপনার উত্তর হুবহু সঠিক এবং আপনি "জাভাস্ক্রিপ্ট-মোড" ব্যবহার করা থেকে বিরত করছেন না যেহেতু আপনি যে নামে ডাকেন এটি সত্যই js-mode( perl-modeউদাহরণস্বরূপ যা ঘটে তার বিপরীতে )।
স্টিফান

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