shell-command – Historial de comandos de shell persistente

Pregunta:

Cuando ejecuto shell-command en una nueva sesión, no tengo acceso al historial de comandos de la última sesión. ¿Cómo puedo tener eso?

Respuesta:

La respuesta corta es habilitar (savehist-mode) en su .emacs. Esto guardará todos los anillos del historial del minibúfer de forma predeterminada, lo que incluye el shell-command-history que usa M-! / (shell-command) .


Ya que estoy en eso, me imagino que también explicaré cómo cargar / guardar historiales de shell-mode desde shell-mode indicaciones del shell-mode y otros modos que se derivan del comint-mode .

Nota: esto es para mi configuración con bash y OSX, pero la esencia de esto debería funcionar en la mayoría de los entornos.

  • Primero necesita copiar su historial de shell bash en el entorno de su emacs. Por defecto, esto se almacena en una variable llamada "HISTFILE". Hago esto con el paquete (exec-path-from-shell) así:

     (exec-path-from-shell-initialize) (exec-path-from-shell-copy-env "HISTFILE")
  • Luego debe llamar (turn-on-comint-history) en sus ganchos de modo apropiado, es decir

     (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")))

Para los modos ruby ​​interactivos, puede ver que estoy usando un archivo .pry_history local por proyecto.

  • Luego, debe asegurarse de guardar sus archivos de historial de comint al eliminar búferes y emacs:

     (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)))))

Tenga en cuenta que estoy usando dash.el para el formato sucinto (--each) .

Esto hará que el historial de comandos del shell del minibúfer sea persistente, así como el historial de comandos del indicador de bash entre emacs y otros términos.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım