คุณรันคำสั่งก่อนหน้าในเชลล์ emacs ได้อย่างไร?


47

ฉันอยู่ในโหมดเทอร์มินัลบน Ubuntu และฉันกำลังเรียกใช้ emacs โดยเปิดบัฟเฟอร์ 2 อันหนึ่งคือไฟล์ทับทิมและอีกอันคือเชลล์ (เปิดโดยพิมพ์ Mx shell) และเมื่อฉันเปลี่ยนเป็นบัฟเฟอร์เชลล์ฉันต้องการ เพื่อเรียกใช้คำสั่งเดียวกันกับที่ฉันเคยวิ่งมาก่อน ปกติฉันจะกดลูกศรขึ้นในหน้าต่างเทอร์มินัล แต่ใน emacs มันจะทำให้เคอร์เซอร์ขึ้นหนึ่งบรรทัด

ไม่มีใครรู้ว่าการกดแป้นพิมพ์เพื่อเรียกใช้คำสั่งเชลล์ก่อนหน้านี้จากภายในเปลือก emacs?

คำตอบ:



24

นอกจากนี้M-pคุณยังสามารถใช้C-upซึ่งฉันคิดว่าดีกว่า ปุ่มเสริมM-nหรือC-downจะให้คุณได้รับคำสั่งต่อไปในประวัติศาสตร์


1
อ้า ดูเป็นธรรมชาติมากขึ้น
Lidmith

1
แม้ว่ามันจะไม่ได้ถูกตั้งคำถามเริ่มต้น แต่ฉันต้องยอมรับว่า [C-up] และ [C-down] ไม่ทำงานใน Emacs ผ่านทางเทอร์มินัล (PuTTY)
avp

1
มันดูเหมือนจะไม่ทำงานบน Mac ของฉัน; C-up ถูกแมปเข้ากับฟังก์ชันเฉพาะของ Mac
amo

สำหรับผมมากเกินไปถูกแมปไปC-up exposeและM-pรู้สึกเป็นธรรมชาติมากขึ้นสำหรับฉัน
Indradhanush Gupta

5

คุณอาจเพิ่มสิ่งนี้ลงในไฟล์ init ของ emacs ของคุณ:

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

2

ฉันชอบโซลูชันthiagowfxเนื่องจากฉันมักจะพยายามหลีกเลี่ยงการพึ่งพาบริบท อย่างไรก็ตามเพื่อให้มันทำงานฉันต้องเพิ่มโหมดการโหลด comint ก่อน:

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

0

คำตอบของ DeLorean88 ได้ผลสำหรับฉัน แต่เฉพาะกับวงเล็บปิดที่สองในบรรทัด "progn":

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

ตรวจสอบไฟล์ของคุณอีกครั้ง define-key ที่สองควรทำให้เกิดข้อผิดพลาดทางไวยากรณ์เนื่องจากวงเล็บปิดสุดท้ายไม่ตรงกับตัวแรก
vfclists
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.