Comment lancez-vous la commande précédente dans le shell emacs?

47

Je suis en mode terminal sur Ubuntu et j'utilise emacs avec 2 mémoires tampons ouvertes, l'une est un fichier ruby, et l'autre est un shell (ouvert en tapant Mx shell), et lorsque je passe au tampon shell, je souhaite pour exécuter la même commande que j'ai exécutée auparavant. Normalement, je clique simplement sur la flèche vers le haut dans une fenêtre de terminal, mais dans emacs, le curseur se place tout simplement vers le haut d’une ligne.

Est-ce que quelqu'un sait que vous devez appuyer sur une touche pour exécuter la commande précédente à partir d'un shell emacs?

Lidmith
la source

Réponses:

63

M-p Fait le travail

vava
la source
Merci! J'ai cherché un peu, mais je ne l'ai pas trouvé.
Lidmith
24

En plus de M-p, vous pouvez également utiliser C-up, ce que je trouve préférable. Les touches complémentaires M-nou C-downvous obtiendrez la prochaine commande de l’histoire.

Prakash K
la source
1
Ah, ty. Cela semble plus naturel.
Lidmith
1
Même si cela n’a pas été posé dans la question initiale, je dois admettre que [C-up] et [C-down] ne fonctionnent pas dans Emacs via un terminal (PuTTY).
AVP
1
Cela ne semble pas non plus fonctionner sur mon Mac; C-up est associé à une fonction spécifique à Mac.
amo
Pour moi aussi C-upest mappé sur expose. Et M-pme semble plus naturel.
Indradhanush Gupta
5

Vous pouvez également ajouter ceci à votre fichier init emacs:

(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input)
thiagowfx
la source
2

La solution thiagowfx m’est préférable, car j’essaie généralement d’éviter la dépendance au contexte. Cependant, pour que cela fonctionne, je devais d'abord ajouter le mode de chargement:

(progn(require 'comint)
(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input))
DeLorean88
la source
0

La réponse de DeLorean88 a fonctionné pour moi, mais uniquement avec un deuxième crochet de fermeture sur la ligne "progn":

(progn(require 'comint))
(define-key comint-mode-map (kbd "<up>") 'comint-previous-input)
(define-key comint-mode-map (kbd "<down>") 'comint-next-input))
Kevin Bartlett
la source
Vérifiez votre dossier à nouveau. La seconde define-key devrait provoquer une erreur de syntaxe car le dernier crochet de fermeture ne correspond pas à un premier.
vfclists