लगातार शेल-कमांड इतिहास


12

जब मैं shell-commandएक नए सत्र में भाग लेता हूं तो पिछले सत्र से कमांड के इतिहास तक मेरी पहुंच नहीं है। मेरे पास वह कैसे हो सकता है?


1
क्या आपने (savehist-mode)सक्षम किया है?
वेण्डमांडो

यदि आप इसके बारे में बात कर रहे हैं M-!, तो यह जिस इतिहास चर को पढ़ता / लिखता है shell-command-history, वह है , जिसके साथ कवर किया गया है (savehist-mode)। यदि अनुरोध comint-input-ringशेल बफ़र्स में एक निरंतर इतिहास रखने के बारे में है, तो मैं इसके साथ भी सहायता कर सकता हूं, लेकिन मैं इस प्रश्न की व्याख्या कैसे करूंगा, यह इसे पूरा करेगा।
वेन्डामांडो

@waymondo नहीं, मैंने नहीं किया। मेरी समस्या हल करता है। कृपया उत्तर दें ताकि मैं इसे स्वीकार कर सकूं।
रासमस डब्ल्यूएल

जवाबों:


10

संक्षिप्त उत्तर (savehist-mode)आपके .emacs में सक्षम है। यह सभी मिनीबफ़र इतिहास के छल्ले को डिफ़ॉल्ट रूप से बचाएगा, जिसमें शामिल है shell-command-historyजो M-!/ द्वारा उपयोग किया जाता है (shell-command)


जब मैं इस पर हूँ, मैं यह भी बताता हूँ कि कमांड हिस्टरी को shell-modeप्रॉम्प्ट और अन्य मोड्स से लोड / सेव कैसे किया जाए comint-mode

नोट: यह बैश और OSX के साथ मेरे सेटअप के लिए है, लेकिन इस की हिम्मत अधिकांश वातावरण में काम करना चाहिए।

  • सबसे पहले आपको अपने bash शेल इतिहास को अपने emacs के वातावरण में कॉपी करने की आवश्यकता है। डिफ़ॉल्ट रूप से इसे "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)फॉर्मेटिंग के लिए उपयोग कर रहा हूं ।

यह आपके मिनीबफ़र शेल कमांड इतिहास को निरंतर बनाए रखने के साथ-साथ emacs और अन्य शब्दों के बीच आपके बैश प्रॉम्प्ट कमांड इतिहास को बनाए रखेगा।


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आप की तरह है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.