영구 셸 명령 기록


12

shell-command새 세션에서 실행할 때 마지막 세션의 명령 기록에 액세스 할 수 없습니다. 어떻게해야합니까?


1
당신은 할 (savehist-mode)가능?
waymondo

에 대해 이야기하고 있다면 M-!, 읽거나 쓰는 히스토리 변수 shell-command-history는입니다 (savehist-mode). 요청이 comint-input-ringin 셸 버퍼 의 지속적인 히스토리를 유지하는 것에 관한 것이라면, 그것도 도울 수 있지만 질문을 해석하는 방법에서이를 달성 할 수 있습니다.
waymondo

@waymondo 아니, 나는하지 않았다. 내 문제를 해결합니다. 수락 할 수 있도록 답변 해주세요.
RasmusWL

답변:


10

짧은 대답은 (savehist-mode).emacs에서 활성화 하는 것입니다. / shell-command-history가 사용하는 것을 포함하여 모든 미니 버퍼 히스토리 링이 기본적으로 저장 됩니다 .M-!(shell-command)


나는 그것을 보면서, shell-mode프롬프트와에서 파생 된 다른 모드 에서 명령 기록을로드 / 저장하는 방법을 설명 할 것입니다 comint-mode.

참고 : 이것은 bash 및 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프로젝트별로 로컬 파일을 사용하고 있음을 알 수 있습니다 .

  • 그런 다음 버퍼와 emacs를 종료 할 때 comint 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와 다른 용어 사이의 bash 프롬프트 명령 내역뿐만 아니라 미니 버퍼 쉘 명령 내역이 지속됩니다.


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.