วิธีปิดการใช้งาน emacs ที่นี่การเติมเอกสารให้สมบูรณ์


11

เมื่อแก้ไขไฟล์ bash script ด้วย emacs และพยายามเข้า<<<มาที่<emacs ตัวที่สองแทรกเทมเพลตสำหรับเอกสาร here ที่นี่เช่นในตัวอย่างต่อไปนี้:

<<EOF

EOF

<<<นี้ไม่ได้ผลลัพธ์ที่ต้องการเพราะผมจะป้อนตัวอักษร

สำหรับช่วงเวลาที่ฉันหันไปทาง< < <แล้วลบช่องว่าง แต่ฉันชอบที่จะได้รับอนุญาตให้ป้อนโดยตรง


2
ไม่ใช่ว่าฉันแคร์มากเกินไป แต่มันก็ดีที่จะแสดงความคิดเห็นสำหรับ downvote
enzotib

คำตอบ:


12

ที่จริงแล้วไม่จำเป็นต้องใช้my-disable-here-documentฟังก์ชั่นที่กำหนดเองของทอมในการรีคีย์คีย์ คุณลักษณะนี้สามารถเปิดใช้งานและปิดการใช้งานด้วยsh-electric-here-document-mode:

(add-hook 'sh-mode-hook
          (lambda ()
            (sh-electric-here-document-mode -1)))

(นอกจากนี้ยังสามารถสลับสำหรับบัฟเฟอร์ที่ใช้งานผ่านM-x sh-electric-here-document-mode)


ด้วย: sh-mode-hookไม่ทำงานสำหรับฉัน แต่sh-set-shell-hookทำ
Felipe Lema

6

ผูก<เข้ากับself-insert-commandในโหมดทุบตีแล้วมันจะแทรกเฉพาะตัวละคร

โดยค่าเริ่มต้นมันถูกผูกไว้sh-maybe-here-documentเมื่ออยู่ในโหมดทุบตีและฟังก์ชั่นนั้นจะแทรกอัตโนมัติ

นี่คือวิธีการรีบาวด์คีย์:

(add-hook 'sh-set-shell-hook 'my-disable-here-document)

(defun my-disable-here-document ()
  (local-set-key "<" 'self-insert-command))

คุณช่วยให้ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่จะแทรกในไฟล์ init ได้ไหม? ขออภัยฉันเป็นผู้ใช้ emacs ของผู้เริ่มต้น
enzotib

ฉันเพิ่มตัวอย่างง่ายๆในคำตอบของฉัน มันปิดการใช้งานการแทรกอัตโนมัติในเชลล์ทุกชนิดไม่ใช่แค่ทุบ แต่เป็นโพรบที่คุณต้องการ
Tom

วิธีนี้ไม่ทำงานอีกต่อไป (ทดสอบบน emacs 24.3) เนื่องจาก<ถูกผูกไว้กับself-insert-commandค่าเริ่มต้น
T. Verron

2

หากเหตุผลเดียวที่คุณต้องการปิดการใช้งานhere-docก็คือมันป้องกันไม่ให้คุณใส่สตริงที่นี่ <<< ดังนั้นการผูกC-<เข้ากับฟังก์ชันที่มี(insert "<<<")จะทำงานได้และยังอนุญาตให้ใช้เทมเพลต auto -doc ที่นี่

(defun my-here-string() 
  "Insert <<< (eg. for a bash here-string)" 
  (interactive)
  (insert "<<<"))
(global-set-key (kbd  "C-<") 'my-here-string)

1
ขอบคุณวิธีแก้ปัญหาที่น่าสนใจ แต่ฉันยังคงต้องการคำตอบของ @ Tom เพราะฉันเห็นว่าการดำเนินการผิดพลาดสำหรับไฟล์สคริปต์ทุบตี
enzotib


1

ชนิด < C-q < <


มันสั้นกว่าวิธีแก้ปัญหาของฉันและอาจมีประโยชน์สำหรับสถานการณ์อื่น ๆ ด้วย แต่ไม่ใช่สิ่งที่ฉันกำลังมองหา ขอบคุณอยู่ดี
enzotib

1

หลังจากดูที่: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el ฉันคิดวิธีแก้ปัญหานี้ขึ้นมา:

;; disable the automatic EOF generation in Shell Mode
(defvar sh-use-prefix nil
  "If non-nil when loading, `$' and `<' will be  C-c $  and  C-c < .")
(defvar sh-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (if sh-use-prefix "\C-c<" "<")
      (local-set-key "<" 'self-insert-command))
   map)
  "Keymap used in Shell-Script mode.")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.