ক্রমাগত শেল-কমান্ডের ইতিহাস


12

যখন আমি shell-commandএকটি নতুন অধিবেশন চালাচ্ছি তখন আমার শেষ সেশনের কমান্ডের ইতিহাসে অ্যাক্সেস নেই। আমি এটা কীভাবে করব?


1
আপনি কি (savehist-mode)সক্ষম করেছেন?
ওয়েমমন্ডো

আপনি যদি কথা বলছেন তবে M-!যে ইতিহাসের পরিবর্তনশীল এটি পড়তে / লেখেন তা হ'ল shell-command-historyযা আচ্ছাদিত (savehist-mode)। অনুরোধটি comint-input-ringযদি শেল বাফারগুলিতে স্থির ইতিহাস রাখার বিষয়ে হয় তবে আমি এটির সাথেও সহায়তা করতে পারি, তবে আমি কীভাবে প্রশ্নের ব্যাখ্যা করছি, এটি এটি সম্পাদন করবে।
ওয়েমমন্ডো

@ ওয়েমন্ডো না, আমি করিনি। আমার সমস্যা সমাধান করে দয়া করে একটি উত্তর দিন যাতে আমি এটি গ্রহণ করতে পারি।
রাসমুসডাব্লুএল

উত্তর:


10

সংক্ষিপ্ত উত্তরটি (savehist-mode)আপনার .emacs সক্ষম করে। এটি ডিফল্টভাবে সমস্ত মিনিবুফার ইতিহাসের রিংগুলি সংরক্ষণ করবে, যার মধ্যে / shell-command-historyদ্বারা ব্যবহৃত কোনটি অন্তর্ভুক্ত রয়েছে ।M-!(shell-command)


আমি এটা আছি যদিও, আমি জিনিসটা আমি ব্যাখ্যা করব লোড করতে কিভাবে / থেকে কমান্ড ইতিহাস সংরক্ষণ shell-modeঅনুরোধ জানানো এবং অন্যান্য মোড থেকে আহরণ করা comint-mode

দ্রষ্টব্য: এটি ব্যাশ এবং ওএসএক্সের সাথে আমার সেটআপের জন্য, তবে এর সাহসগুলি বেশিরভাগ পরিবেশে কাজ করা উচিত।

  • প্রথমে আপনাকে আপনার বাশ শেল ইতিহাসটি আপনার ইমাসের পরিবেশে অনুলিপি করতে হবে। ডিফল্টরূপে এটি "HISTFILE" নামে একটি ভেরিয়েবলে সংরক্ষণ করা হয়। আমি এইভাবে (exec-path-from-shell)প্যাকেজটি দিয়ে এটি করি :

    (exec-path-from-shell-initialize)
    (exec-path-from-shell-copy-env "HISTFILE")
    
  • তারপরে আপনাকে (turn-on-comint-history)আপনার উপযুক্ত মোড হুকগুলিতে কল করতে হবে , অর্থাত্‍

    (defun turn-on-comint-history (history-file)
              (setq comint-input-ring-file-name history-file)
              (comint-read-input-ring 'silent))
    
    (add-hook 'shell-mode-hook
              (lambda ()
                (turn-on-comint-history (getenv "HISTFILE"))))
    
    (add-hook 'inf-ruby-mode-hook
              (lambda ()
                (turn-on-comint-history ".pry_history")))
    

ইন্টারেক্টিভ রুবি মোডগুলির জন্য, আপনি দেখতে পাচ্ছেন যে আমি .pry_historyপ্রতি-প্রকল্পের ভিত্তিতে একটি স্থানীয় ফাইল ব্যবহার করছি ।

  • তারপরে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনি বাফার এবং ইমাসকে হত্যা করার সময় আপনার কমেন্টের ইতিহাস ফাইলগুলি সংরক্ষণ করেছেন:

    (add-hook 'kill-buffer-hook #'comint-write-input-ring)
    (add-hook 'kill-emacs-hook
              (lambda ()
                (--each (buffer-list)
                  (with-current-buffer it (comint-write-input-ring)))))
    

দ্রষ্টব্য আমি dash.elসংযুক্তি (--each)বিন্যাসের জন্য ব্যবহার করছি ।

এটি আপনার মিনিবুফার শেল কমান্ডের ইতিহাসকে অবিচ্ছিন্ন করার পাশাপাশি ইমাস এবং অন্যান্য শর্তাবলীর মধ্যে আপনার বাশ প্রম্পট কমান্ডের ইতিহাসকে স্থির করে তুলবে।


2

আমি নিশ্চিত যে savehistএটি পরিচালনা করতে পারে, এখানে আমার সেটআপ রয়েছে:

;; Save sessions history
(setq savehist-save-minibuffer-history 1)
(setq savehist-additional-variables
      '(kill-ring search-ring regexp-search-ring compile-history log-edit-comment-ring)
      savehist-file "~/.emacs.d/savehist")
(savehist-mode t)

0

আমি মনে করি আপনি shell-commandইতিহাস সংরক্ষণ করতে এবং সম্পর্কিত কিছু কী সম্পর্কিত বাইন্ডিংগুলি পুনরায় তৈরি করার পরামর্শ দিতে পারেন , যেমন, M-n/pসেই ইতিহাসটি আহ্বানের জন্য, বা আপনার পছন্দ মতো shell-commandব্যবহার করে নিজের লেখাও read-from-minibuffer

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