Bagaimana Anda menjalankan perintah sebelumnya di shell emacs?


47

Saya dalam mode terminal di Ubuntu, dan saya menjalankan emacs dengan 2 buffer terbuka, satu adalah file ruby, dan yang lainnya adalah shell (dibuka dengan mengetikkan Mx shell), dan ketika saya beralih ke buffer shell, saya ingin untuk menjalankan perintah yang sama yang saya jalankan sebelumnya. Saya biasanya hanya menekan panah atas di jendela terminal, tetapi di emacs, itu hanya menempatkan kursor ke atas satu baris.

Adakah yang tahu tentang keystroke untuk menjalankan perintah shell sebelumnya dari dalam shell emacs?

Jawaban:


63

M-p melakukan pekerjaan


Terima kasih! Saya mencari sedikit, tetapi tidak dapat menemukannya.
Lidmith

24

Selain itu M-p, Anda juga dapat menggunakan C-up, yang menurut saya lebih disukai. Kunci pelengkap M-natau C-downakan memberi Anda perintah berikutnya dalam sejarah.


1
Ah, ty. Itu tampak lebih alami.
Lidmith

1
Meskipun tidak dimasukkan dalam pertanyaan awal, saya harus mengakui bahwa [C-up] dan [C-down] tidak berfungsi di Emacs via terminal (PutTTY).
avp

1
Tampaknya juga tidak berfungsi di Mac saya; C-up dipetakan ke fungsi spesifik Mac.
Amo

Bagi saya juga C-updipetakan ke expose. Dan M-pterasa lebih alami bagi saya.
Indradhanush Gupta

5

Anda juga dapat menambahkan ini ke file inac emacs Anda:

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

2

solusi thiagowfx lebih disukai bagi saya, karena saya biasanya mencoba untuk menghindari ketergantungan konteks. Namun, agar berfungsi, saya harus menambahkan mode pemuatan comint terlebih dahulu:

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

0

Jawaban DeLorean88 bekerja untuk saya, tetapi hanya dengan braket penutup kedua pada baris "progn":

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

Periksa kembali file Anda. Tombol definisi kedua harus menyebabkan kesalahan sintaksis karena braket penutup terakhir tidak cocok dengan yang pertama.
vfclists
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.