เหตุใดการพิมพ์ '<<<' แทนที่จะสร้าง '<< EOF \ n <' เมื่ออยู่ในโหมดเชลล์สคริปต์


13

เมื่อใดก็ตามที่ฉันแก้ไขเชลล์สคริปต์ใน emacs และพิมพ์บั้งสามตัวเพื่อเปลี่ยนเส้นทางสตริงดิบไปยัง stdin emacs จะแทรกอักขระ 'EOF' และบรรทัดใหม่ระหว่างพวกเขาดังนั้น

cat <<< 'some string'

กลายเป็น

cat <<EOF
< 'some string'

ฉันสามารถย้อนกลับและลบอักขระพิเศษเพื่อรับบัฟเฟอร์ในสถานะที่ฉันต้องการ แต่นี่เป็นพฤติกรรมที่น่าสะพรึงกลัวมากและดูเหมือนว่าจะเกิดขึ้นในโหมด shell-script เท่านั้นซึ่งโดยปกติแล้วเป็นครั้งเดียวที่ฉันพิมพ์รูปแบบนี้ มีวิธีปิดใช้งานพฤติกรรมนี้หรือไม่

คำตอบ:


13

sh-electric-here-document-modeนี้เกิดจาก เมื่อเปิดใช้งาน<<จะแทรกโครงกระดูกของเอกสารที่นี่

นี่คือการเปิดใช้งานโดยค่าเริ่มต้น คุณสามารถปิดการใช้งานด้วยเบ็ดเช่น:

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

4
ตัวเลือกที่แน่นอนก็คือการแทรกด้วย<<< C-3 <
ลูกัส

1
ขอบคุณที่แสดงวิธีปิดใช้งาน โหมดเอกสาร sh-electric-here- นี่เป็นคุณสมบัติที่ค่อนข้างไร้ประโยชน์ IMO
Dan Molding เมื่อ

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

17

กลูกัสนั้นถูกต้อง แต่เพื่อเสริมคำตอบของเขาฉันมีรหัสชิ้นนี้ฉันใช้ตัวเองเพื่อทำให้การแทรก doc ที่นี่ฉลาดขึ้น

คำแนะนำนี้ประกอบกับการsh-electric-here-document-modeเปิดใช้งานทำเพื่อให้ถ้าคุณพิมพ์บั้งสองตัวเอกสารอัตโนมัติที่นี่จะถูกสร้างขึ้น แต่ถ้าตัวอักษรถัดไปที่คุณพิมพ์เป็นตัวอักษรอีกตัวหนึ่งมันจะเปลี่ยนกลับและคุณจะเหลือเพียง <<<

(defadvice sh--maybe-here-document (around be-smart-about-it activate)
  "Do normal here doc auto insert, but if you type another chevron, revert and leave just <<<."
  (if (and (= (current-column) 1)
           (looking-back "^<")
           (looking-at "\nEOF")
           (save-excursion
             (forward-line -1)
             (end-of-line 1)
             (looking-back "<<EOF")))
      (progn (delete-region (search-backward "EOF") (search-forward "EOF" nil t 2))
             (insert "<"))
    ad-do-it))

ของหลักสูตรนี้หมายถึงว่าถ้าคุณต้องการจริงที่จะเริ่มต้นที่นี่ doc C-q<กับบั้งคุณจะต้องแทรกดิบมัน ดังนั้นขึ้นอยู่กับสิ่งที่คุณทำมากขึ้นถ้าคุณทำที่นี่มากกว่าสายเอกสารนี่อาจจะดีถ้าคุณไม่ทำมันหายากที่คุณจะต้องเริ่มเอกสารที่นี่ด้วยบั้งและ จะไม่สะดวก

ป้อนคำอธิบายรูปภาพที่นี่


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