shell-command
새 세션에서 실행할 때 마지막 세션의 명령 기록에 액세스 할 수 없습니다. 어떻게해야합니까?
M-!
, 읽거나 쓰는 히스토리 변수 shell-command-history
는입니다 (savehist-mode)
. 요청이 comint-input-ring
in 셸 버퍼 의 지속적인 히스토리를 유지하는 것에 관한 것이라면, 그것도 도울 수 있지만 질문을 해석하는 방법에서이를 달성 할 수 있습니다.
shell-command
새 세션에서 실행할 때 마지막 세션의 명령 기록에 액세스 할 수 없습니다. 어떻게해야합니까?
M-!
, 읽거나 쓰는 히스토리 변수 shell-command-history
는입니다 (savehist-mode)
. 요청이 comint-input-ring
in 셸 버퍼 의 지속적인 히스토리를 유지하는 것에 관한 것이라면, 그것도 도울 수 있지만 질문을 해석하는 방법에서이를 달성 할 수 있습니다.
답변:
짧은 대답은 (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 프롬프트 명령 내역뿐만 아니라 미니 버퍼 쉘 명령 내역이 지속됩니다.
(savehist-mode)
가능?