Git Bash ใน emacs บน Windows


9

ฉันสามารถเรียกใช้ Bash shell ที่มาพร้อมกับ Git สำหรับ Windows ฉันใส่สิ่งนี้ลงใน.emacs:

(defun git-bash () (interactive)
  (let ((explicit-shell-file-name "D:/Program Files/git/bin/bash"))
    (call-interactively 'shell)))

จากนั้นM-x git-bashและ voila ทุบตีทำงาน แต่มีความแปลก:

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
^[]0;MINGW64:/c/Users/M??rton^G
MĂĄrton@Marci MINGW64 /c/Users/MĂĄrton
$ 

และมันจะพิมพ์บรรทัดนั้นเริ่มต้นด้วย^[]หลังจากทุกคำสั่งที่ฉันรัน นอกจากนี้การเข้ารหัสจะเลอะ ฉันจะแก้ไขสิ่งนี้ได้.emacsอย่างไร

คำตอบ:


10

^[]เสียงที่มาจากตัวควบคุมสถานีต่าง ๆ ในเปลือกพร้อมของคุณ ลองecho $PS1ดูลำดับเต็มและลองเช่นexport PS1='$ 'เพื่อดูว่าสตริงพรอมต์ที่เรียบง่ายลบปัญหาเฉพาะนั้น

สำหรับการเข้ารหัสคุณอาจลองใช้ utf-8 การเข้ารหัสที่คุณต้องการ:

(prefer-coding-system 'utf-8)

การตั้งค่าพรอมต์

Emacs ตั้งค่าตัวแปร INSIDE_EMACS เพื่อให้คุณสามารถสร้าง. bash_profile ที่ตั้งค่า PS1 เฉพาะเมื่อทำงานใน Emacs

การทดสอบบนเครื่องของฉันบรรทัดแรกของพรอมต์มีอักขระควบคุมที่มีปัญหา ฉันสร้าง ~ / .bash_profile ด้วยสิ่งนี้

if [ -n "$INSIDE_EMACS" ]; then
    export PS1='\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '
fi

สิ่งนี้จะตั้งค่าพรอมต์ตามค่า git-bash ที่ตั้งไว้เป็นค่าเริ่มต้น แต่ฉันลบบรรทัดแรก (ขึ้นไปที่ \ n การแบ่งบรรทัด) ฉันยังลบ $ MSYSTEM ซึ่งทำให้ MINGW64 อยู่ในพร้อมท์ - ฉันไม่ต้องการเห็นสิ่งนั้น สิ่งที่เหลืออยู่คือ user @ host, ไดเรกทอรีปัจจุบันและ git repo อักขระควบคุมตั้งค่าสีที่ Emacs แสดงอย่างเหมาะสมสำหรับฉัน (สำหรับรายละเอียดเกี่ยวกับการตั้งค่าพรอมต์ของคุณโปรดดูคู่มือทุบตี)

ใน Emacs ฉันตั้งค่าเปลือกเพื่อ git-bash:

(setq explicit-shell-file-name "C:/git-for-windows/bin/bash.exe")
(setq explicit-bash.exe-args '("--login" "-i"))

ด้วยการตั้งค่านี้ฉันยังเห็นข้อความแสดงข้อผิดพลาด ioctl เริ่มต้น แต่อย่างอื่นทำงานได้อย่างที่คาดไว้และการเข้ารหัสเป็น utf-8


ได้ผลดีขอบคุณ! บรรทัด PS1 (สำหรับฉันเป็นความลับ) ทำอะไรได้บ้าง คุณสามารถช่วยในการตั้งค่าการเข้ารหัสเชลล์บัฟเฟอร์เป็น utf-8 โดยอัตโนมัติได้หรือไม่? ( MĂĄrtonควรอ่านMárton)
marczellm

PS1 ในตัวอย่างของฉันนั้นได้มาจากค่าเริ่มต้นที่หนึ่ง git-bash ตั้งไว้ ฉันเพิ่งลบทุกอย่างจนถึงตัวแบ่งบรรทัด (\ n) มันใช้ลำดับการควบคุมเพื่อเปลี่ยนสีของบิตของข้อมูลที่แสดง - ผู้ใช้ปัจจุบันโฮสต์ git repo ฯลฯ ฉันต้องติดตาม bash PS1 doc เพื่อดูรายละเอียด สำหรับ utf-8 คุณdefault-process-coding-systemตั้งค่าอะไรใน Emacs ของคุณ?
ลูกัส

ฉันพบสิ่งนี้ในคู่มือ Emacs: "เพื่อระบุระบบการเข้ารหัสสำหรับเชลล์คุณสามารถใช้คำสั่ง Cx RET c ทันทีก่อน Mx เชลล์คุณยังสามารถเปลี่ยนระบบการเข้ารหัสสำหรับ subshell ที่กำลังทำงานอยู่โดยพิมพ์ Cx RET p ในเชลล์ กันชน." (ดูgnu.org/software/emacs/manual/html_node/emacs/ … )
ลูกัส

(undecided-dos . undecided-unix)ค่าของมันคือ ฉันกำลังมองหาวิธีการตั้งค่าการเข้ารหัสบัฟเฟอร์โดยอัตโนมัติแทนที่จะต้องจำการกดแป้นอีกชุดหนึ่งทุกครั้งเมื่อเปิดมัน บางทีฉันควรถามคำถามใหม่
marczellm

ของฉันคือ utf-8 dos และ UNIX ฉันไม่ได้ตั้งค่าไว้อย่างชัดเจน แต่ฉันมีการตั้งค่าเหล่านี้: (prefer-coding-system 'utf-8) (setq-default buffer-file-coding-system' utf-8-unix)
ลูกัส

1

ข้อผิดพลาดนี้ชี้ไปที่สวิตช์ที่ไม่ตรงกัน มันอาจถูกตั้งค่าเป็น-icและคุณต้องการเพียง-c:

(setq shell-command-switch "-c")

ตัวเลือกอื่นคือการให้ tty กับ git-bash ด้วยคำสั่งที่คล้ายกับ (อะไรก็ตามที่เทียบเท่ากับ windows):

/sbin/getty -l bash -n 38400 tty0

คำแนะนำแรกของคุณจะไม่เปลี่ยนแปลงอะไร นอกจากนี้ยังM-x list-processesแสดงให้เห็นว่ามันไม่ได้มีผลกระทบใด ๆ : D:/Program Files/git/bin/bash --noediting -iคำสั่งกระบวนการคือ ข้อเสนอแนะที่สองของคุณฉันไม่เข้าใจ
marczellm

1
นั่นเป็นเพราะคุณไม่ได้ลบสวิตช์ -i
ผู้ใช้ Emacs

โอเคฉันจะลบมันได้อย่างไร
marczellm

1
คุณกำลังใช้ดังนั้นผมเชื่อว่าคุณจะต้องการตั้งค่าเช่นexplicit-shell-file-name (setq explicit-bash-args '("--login" "-i"))
ลูกัส

1

ฉันรู้ว่านี่ไม่เหมือนกับ OP แต่ฉันคิดว่ามันเป็นตัวเลือกที่น่าสนใจ คุณสามารถเริ่ม emacs จากบรรทัดคำสั่ง git-bash มันจะทำให้ emacs ถือว่า git-bash เป็นเชลล์

ป้อนสิ่งต่อไปนี้จาก bash prompt ของคุณ

bla@host MINGW64 ~/ $ emacs .&

จากนั้นใน emacs Mx "shell"

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