একাধিক এসহেল থেকে ইতিহাস মার্জ করুন


9

এসেইলে স্যুইচ করার আগে আমার zsh সেটআপ ছিল যাতে এটি হবে:

  • প্রতিটি কমান্ডের পরে ইতিহাস ফাইলটিতে লিখুন
  • ইতিহাসের ফাইলটি ওভাররাইট করার পরিবর্তে যুক্ত করুন যাতে একাধিক শেল চলাকালীন সমস্তগুলি একটি বড় ইতিহাসে মিশে যায়

দুটি zsh বিকল্প এখানে নথিভুক্ত করা হয়েছে (দেখুন অ্যাপ্লিকেশন END_HISTORY এবং INC_APPEND_HISTORY)।

একটি বৃহত ইতিহাসের আকারের সাথে একত্রিত হয়ে গেলে এটি বেশ কার্যকর কারণ আপনি একটি কমান্ড দেওয়ার পরে সপ্তাহে একটি নতুন শেল খুলতে পারেন এবং এটি আপনার ইতিহাসে খুঁজে পেতে পারেন (এই বিকল্পগুলি ব্যতীত একটি বড় ইতিহাস অকেজো, কারণ এটি কেবলমাত্র সর্বাধিক বন্ধ হওয়া ইতিহাস ধারণ করবে শেল)। এর অর্থ হ'ল আপনি নতুন শেলগুলি খুলতে পারবেন এবং অন্যান্য শেলগুলিতে আপনার সাম্প্রতিক কমান্ডগুলি অবিলম্বে তাদের জানতে পারেন। এই আচরণের সাথে অ্যাশেল সেটআপ করার কোনও উপায় আছে কি? প্রথম বুলেটটি যথেষ্ট সহজ বলে মনে হচ্ছে তবে সংযোজনটি আরও জটিল দেখাচ্ছে ...

উত্তর:


3

দাবি অস্বীকার: আমি এসহেল ব্যবহার করি না, তাই এটি একটি লবণের দানা দিয়ে নিন।

eshelleshell-write-historyইতিহাস লিখতে কল হিসাবে উপস্থিত হয় , যা একটি alচ্ছিক যুক্তি গ্রহণ করে appendযা ডিফল্ট হয় nil। এই যুক্তিটি eshellবর্তমানে অব্যবহৃত বলে মনে হচ্ছে তবে এটি কাজ করে না বলে মনে হয় (এটি যুক্তিটি দিয়ে যায় write-regionযা সঠিকভাবে সংযোজন করে)।

এখানে বেশ কয়েকটি বিকল্প রয়েছে।

  1. (setq eshell-save-history-on-exit nil)এবং eshell-write-historyনিজেকে কল করুন
  2. eshell-write-historyআপনার প্রয়োজন মেটাতে পুনরায় সংজ্ঞা দিন ।

ব্যক্তিগতভাবে, আমি 1 সঙ্গে যেতে হবে।

উদাহরণ হিসাবে:

(setq eshell-save-history-on-exit nil)
(defun eshell-append-history ()
  "Call `eshell-write-history' with the `append' parameter set to `t'."
  (when eshell-history-ring
    (let ((newest-cmd-ring (make-ring 1)))
      (ring-insert newest-cmd-ring (car (ring-elements eshell-history-ring)))
      (let ((eshell-history-ring newest-cmd-ring))
        (eshell-write-history eshell-history-file-name t)))))
(add-hook eshell-pre-command-hook #'eshell-append-history)

সংশোধন, eshell-append-historyকার্যকারী ফাংশনের জন্য @ জোসেফ-গারভিনকে ধন্যবাদ

এটি নতুন ইতিহাসের বিষয়বস্তুগুলিকে একটি শেলের মধ্যে গতিশীলভাবে লোড করতে পারে না (যেমন Xশেল এ-তে রান কমান্ড , এবং শেল বিতে পুনরায় লোড না করে ইতিহাসে প্রদর্শিত হচ্ছে; zsh এর SHARE_HISTORY এর মতো)। আমি জানি না কতটা দক্ষ eshell-read-history, তাই আমি এটিকে একটি হুকের মধ্যে চালাতে দ্বিধা বোধ করব।

এটিও সম্ভব যে আপনি এই eshell-append-historyফাংশনটির সাথে সদৃশ এন্ট্রি দিয়ে শেষ করবেন । আপনার সাম্প্রতিকতম এন্ট্রি ছাড়া ক্লিয়ারিংয়ের সাথে কিছু শেননিগান করার প্রয়োজন হতে পারে eshell-history-ring, তারপরে ইতিহাস লেখার পরে এটি পুরানো মানটিতে পুনরায় সেট করে।

যেমন

(let ((old-ring (copy-list eshell-history-ring)))
  (setq eshell-history-ring (list (car eshell-history-ring)))
  ; write
  (setq eshell-history-ring old-ring))

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

আমাকে এটি কিছু সম্পাদনা করতে হয়েছিল, রিংগুলি রিং- * ফাংশনগুলির মাধ্যমে সংশোধন করা দরকার বা আপনি ত্রুটিতে চলেছেন। এছাড়াও আমি একটি অনুলিপি তৈরির পরিবর্তে অস্থায়ীভাবে এসেল-ইতিহাস-রিংয়ের সংজ্ঞাটি ওভাররাইড করতে গতিশীল বাঁধাই ব্যবহার করি। আপনি যদি নিজের জবাবটিতে কোডটি এখানে রাখেন তবে আপনি বলটি ঘূর্ণায়মান হয়ে যাওয়ায়
জোসেফ গারভিন

@ জোসেফগারভিন শেষ!
জে ডেভিড স্মিথ

এই সমাধান কাজ করে মহান, কিন্তু আমি সেট করতে হয়েছে eshell-exit-hookযখন eshell শুরু কারণ এই স্বয়ংক্রিয়ভাবে লোড পরার শূন্যে: (add-hook 'eshell-exit-hook 'eshell-write-history nil t)। আমি (add-hook 'eshell-mode-hook '(lambda () (setq eshell-exit-hook nil)))
হুকটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.