Windows 10 linux bash shell ctrl + space ไม่ได้ตั้งเครื่องหมายใน Emacs


12

ใน Windows 10 ฉันติดตั้งระบบย่อยสำหรับ Linux Bash แต่ฉันมีปัญหากับทางลัดใน Emacs Ctrl+ spaceไม่ได้กำหนดจุดมาร์กเกอร์

สิ่งที่ฉันพยายามและไม่ได้ช่วย:

  • ฉันพยายามยกเลิกการเลือก "เปิดใช้งานคีย์ลัด" ในเมนูคุณสมบัติสำหรับคอนโซลของ Windows

  • ฉันพยายามใช้ Terminal ConEmu ที่แตกต่างกันโดยไม่ประสบความสำเร็จ

ฉันสงสัยว่ามันเกี่ยวข้องกับ ubuntu อย่างใดซึ่งมีปัญหาคล้ายกันกับ ctrl + space และ windows linux bash กำลังใช้ที่เก็บ ubuntu

คำตอบ:


3

ไม่มีวิธีแก้ปัญหานี้ในแง่ของการทำ Ctrl-Space ผ่านขั้ว Bash ในขณะที่เขียนนี้ (1 ก.ย. 2559) - แต่มีวิธีแก้ไขที่อาจเพียงพอสำหรับผู้ใช้หลายคน: ใช้ PuTTY เพื่อเชื่อมต่อผ่าน SSH ซึ่งบังคับให้จัดการกับ Ctrl-Space (ในโหมด tty เป็นไปไม่ได้ที่จะแยกความแตกต่าง Ctrl-Space จาก Ctrl- @ เนื่องจากเป็นรหัสอักขระเดียวกัน แต่ไม่น่าจะมีปัญหาเพราะโดยปกติแล้ว Emacs จะถูกตั้งค่าเพื่อจัดการกับset-mark-commandวิธีดังกล่าว)

  1. ติดตั้งเซิร์ฟเวอร์ OpenSSH sudo apt-get install openssh-serverด้วย หากติดตั้งไว้แล้วให้ลบออก ( sudo apt-get remove openssh-server) จากนั้นติดตั้งใหม่เพื่อรับไฟล์รีเซ็ต
  2. แก้ไขไฟล์/ etc / ssh / sshd_config (with sudo) ดังนี้:

    • หากมีการตั้งค่าบรรทัดที่ไม่ใส่เครื่องหมายคอมเม้นต์ให้ใส่เครื่องหมายPermitRootLoginออก PermitRootLogin noเพิ่มบรรทัด
    • เพิ่มบรรทัดAllowUsers USERNAMEแทนที่ USERNAME ด้วยชื่อผู้ใช้ Linux ของคุณ (หากคุณไม่ทราบว่าคืออะไรให้รันคำสั่งwhoamiที่พรอมต์ Bash ของคุณ)
    • เป็นการดีที่คุณควรตั้งค่าการรับรองความถูกต้องแบบไม่ใช้รหัสผ่านโดยใช้คีย์ SSH แต่วิธีการดังกล่าวอยู่นอกขอบเขตของคำถามนี้ (มีคำแนะนำมากมายให้ใช้งานค้นหาเว็บสำหรับ "รหัสผ่าน ssh-keygen" แบบไม่มีรหัสผ่าน) ในระหว่างนี้ให้เพิ่มหรือยกเลิกPasswordAuthentication yesหมายเหตุบรรทัด
    • ชุดUsePrivilegeSeparation no; มีโอกาสมากที่คุณจะพบบรรทัดในไฟล์ที่พูดว่าUsePrivilegeSeparation yes; เพียงแค่เปลี่ยนyesไปnoและบันทึกetc / SSH / sshd_config /ไฟล์

    หากมีบางอย่างผิดพลาดคุณสามารถกู้คืนไฟล์ได้โดยทำซ้ำขั้นตอนที่ 1

  3. เริ่มต้นเซิร์ฟเวอร์ SSH sudo service ssh --full-restartกับคำสั่ง
  4. ใช้ PuTTY (ดาวน์โหลดที่นี่ ) เข้าสู่ระบบด้วยlocalhostในฟิลด์ชื่อโฮสต์ทุกอย่างอื่นที่เหลือเป็นค่าเริ่มต้น คุณจะถูกขอให้ป้อนชื่อผู้ใช้ Linux และรหัสผ่านของคุณ
  5. emacsวิ่ง Ctrl-space จะตั้งค่าเครื่องหมายตามต้องการ

(โปรดทราบว่าขั้นตอนข้างต้นจะไม่ทำให้ระบบของคุณสามารถยอมรับการเชื่อมต่อ SSH จากโฮสต์อื่น ๆด้วยตนเองคุณจะต้องเปลี่ยนกฎไฟร์วอลล์ Windows ของคุณเพื่ออนุญาตพอร์ต TCP ขาเข้า 22)

ในอีกคำตอบที่คุณพูดว่า "แต่ผงสำหรับอุดรูไม่ใช่เทอร์มินัลท้องถิ่น" ฉันไม่แน่ใจว่าคุณไม่ทราบหรือไม่ว่าคุณสามารถใช้localhostวิธีนี้ได้หรือถ้าคุณกำลังไล่ PuTTY เพราะมีค่าใช้จ่ายสูงกว่าเมื่อเทียบกับสถานีท้องถิ่น ถ้าอย่างหลังฉันไม่ต้องกังวลเซสชัน SSH เชิงโต้ตอบคือภาระที่เบามาก (มันแน่นอนมากโหลดน้อยกว่าที่ใช้ระบบวินโดว์เพื่อให้คุณสามารถเรียกใช้ GUI Emacs หรือ xterm!)

ข้อเสียที่แท้จริงเพียงอย่างเดียวของการรันด้วยวิธีนี้เทียบกับเทอร์มินัลแบบตรงคือเหตุการณ์การวางจะถูกส่งแบบตัวอักษรต่อตัวอักษรราวกับว่าคุณพิมพ์เนื้อหาของคลิปบอร์ดอย่างรวดเร็วซึ่งอาจทำให้คู่ไฟฟ้าเยื้องขยายตัวอย่างข้อมูล ไฟ. (วางไม่ควรทำให้คำสั่ง key-chord เริ่มทำงานเนื่องจากมีตรรกะในการตรวจหาการวางที่กำลังดำเนินการและปิดการใช้งานการคีย์คอร์ดจนกว่าการวางจะเสร็จสิ้น)

และมีข้อได้เปรียบที่ใหญ่อย่างน้อยหนึ่งในเทอร์มินัล Bash มาตรฐานเช่นกัน: เหตุการณ์เมาส์ได้รับการสนับสนุนโดย PuTTY ในรูปแบบที่ Emacs สามารถตอบสนองได้ดังนั้นอย่างแดกดันคุณสามารถย้ายจุดด้วยเมาส์ใน PuTTY แม้ว่าคุณจะสามารถ t ด้วยเทอร์มินัลท้องถิ่น


5

ฉันใช้ ConEmu ไม่มีวิธีที่สวยงาม แต่ก็สามารถแก้ไขได้โดยใช้มาโคร

  1. เปิด "การตั้งค่า" (คลิกที่ไอคอนด้านบน)
  2. คลิกที่ "Keys & Macros"
  3. ทางด้านขวาเลื่อนลงจนกว่าคุณจะเห็นตัวเลือก "มาโคร 01" .. "มาโคร 32" และเลือกตัวเลือกที่มีให้ (ไม่สำคัญ)
    ลองมาโคร 01สำหรับตัวอย่างนี้
  4. เลือก "Space" ในเมนูแบบเลื่อนลงที่ 1
  5. เลือก "Ctrl" ในเมนูแบบเลื่อนลงที่ 2 ปล่อยให้เมนูดร็อปดาวน์ที่เหลืออีก 2 รายการไม่ถูกแตะต้อง
  6. วางด้านล่างในฟิลด์มาโคร GUI :

    keys("\e");keys("x");keys("s");keys("e");keys("t");keys("-");keys("m");keys("a");keys("r");keys("k");keys("-");keys("c");keys("o");keys("m");keys("m");keys("a");keys("n");keys("d");keys("\n")
  7. โดยทั่วไปจะส่งM-x select-mark-commandสตริงไปยัง emacs ตอนนี้คลิก "บันทึกการตั้งค่า"


มันควรมีลักษณะเช่นนี้ในที่สุด:

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


ทำงานเหมือนจับใจ Fantastic!
chriskelly

2

เมื่อทำงานshowkey -aใน windows / ubuntu-bash console จะแสดงว่า ctrl + space เพียงแค่ส่งพื้นที่ธรรมดา

และมันก็เป็นปัญหาเดียวกันกับเซสชัน ssh กับเครื่องลินุกซ์ ctrl + space อื่น ๆ ที่ส่งเป็นพื้นที่ธรรมดา

ลักษณะการทำงานแบบเดียวกันนี้มีกับเทอร์มินัลที่ใช้ windows อื่น ๆ (conemu, consolez, MobaXTerm) - ยกเว้น putty สามารถจัดการได้ดี แต่ putty ไม่ได้เป็นเทอร์มินัลท้องถิ่น

ฉันคิดว่าเทอร์มินัล Windows ไม่มีการแมปสำหรับบางลำดับ ปัญหาเดียวกันคือการรวมกันอื่น ๆ เช่น ctrl + 1 ctrl + 2 .. เป็นต้นที่นี่ต้องการเทอร์มินัลที่สามารถจัดการการแมปแป้นพิมพ์สำหรับมันเองเช่น putty

ฉันเชื่อว่าปัญหานี้ควรได้รับการแก้ไขในอนาคตของ windows bash terminal


ยิ่งแย่ไปกว่านั้นดูเหมือนว่าจะไม่ผ่าน ctrl- @ อย่างใดอย่างหนึ่งซึ่งเป็นการรวมอื่นสำหรับชุดเครื่องหมาย หากใครบางคนอยู่ในการผูกจริงพวกเขาสามารถใช้ Mx set-mark-command สิ่งที่ถูกต้องที่ควรทำในตอนนี้คือการตั้งค่าการเชื่อมโยงคีย์กับสิ่งอื่น
Jim Hunziker

@JimHunziker เนื่องจากว่านั่นset-mark-commandอาจเป็นคำสั่งที่ใช้บ่อยที่สุดใน Emacs (นอกเหนือจากself-insert-command) การฝึกนิ้วมือของคุณสำหรับสิ่งนั้นเป็นคำถามที่สูงชันจริง ๆ โดยเฉพาะอย่างยิ่งถ้าคุณใช้ Emacs มานานกว่า 25 ปีเช่นฉัน
แต้ม

@Trey เพิ่มคำตอบอื่นถ้าคุณไม่รังเกียจที่ทำงานบน Windows Xming
Pawel DUBIEL

@PawelDubiel ดูคำตอบของฉันเพิ่งเพิ่ม (ฉันให้คำแนะนำโดยละเอียดมากกว่าที่คุณต้องการเพื่อช่วยผู้อ่านในภายหลัง) คุณเลิกใช้ PuTTY ด้วยเหตุผลบางอย่าง แต่ไม่ได้บอกเหตุผลนั้น แน่นอนว่าเป็นตัวเลือกที่ทำให้ระบบโหลดน้อยลงกว่า xming + ขั้ว X
แต้ม

2

โครงการนี้จะช่วยให้คุณใช้ MinTTY เป็นขั้วทางเลือก: https://github.com/mintty/wsltty มันมาจาก PuTTY แต่ไม่ต้องการ SSH และเช่นเดียวกับ PuTTY มันสามารถจัดการ Ctrl-space ได้ดี


1

การแก้ไขปัญหานี้ในขณะนี้ในวินโดวส์ 10 สร้าง 14,965 ตรวจสอบ:

[Environment]::OSVersion

และติดตั้งการอัปเดตหากคุณยังไม่ได้!


โปรดเพิ่มรายละเอียดให้กับคำตอบของคุณ - ลิงก์อาจหยุดทำงานในบางจุดที่คำตอบของคุณไร้ประโยชน์
djsmiley2k TMW

0

มีแฮ็คที่เราสามารถติดตั้ง X Server สำหรับ Windows

1 ติดตั้งxmingแรกสำหรับ windows

2 เริ่ม xming

3 จากนั้นติดตั้ง windows ทุบตี

sudo apt-get install rxvt-unicode-256color

4 จากนั้นเปิดcmd.exeและเรียกใช้

bash.exe -c "urxvtd -q -o -f; bash" 

ตอนนี้เราอยู่ในทุบตีคอนโซลและเรียกใช้

(DISPLAY=:0 urxvtc &)

5 ณ จุดนี้เราควรเห็นเทอร์มินัลใหม่ใน Xming และเราสามารถเรียกใช้ emacs ในโหมดเทอร์มินัล

emacs -nw

และการผูกทั้งหมดตอนนี้ทำงานได้ดี

การสนทนาที่เกี่ยวข้องอยู่ที่นี่ https://github.com/Microsoft/BashOnWindows/issues/531


เหตุใดจึงเป็นวิธีแก้ปัญหาที่ยอดเยี่ยมในการใช้ PuTTY หากคุณกำลังจะรัน Emacs ในโหมด GUI ฉันเข้าใจ แต่การใช้งานของคุณ-nwทำให้มันทำงานในเทอร์มินัลเหมือนกับ PuTTY ยกเว้นตอนนี้คุณต้องใช้ระบบหน้าต่างที่สองทั้งหมด - จาก การทดสอบอย่างรวดเร็วของฉันนั่นจะทำให้คุณเสียค่าใช้จ่ายหน่วยความจำเกือบ 500 MB เกินกว่าที่จะใช้งาน sshd และ PuTTY และจะมีค่าใช้จ่าย CPU ที่สูงกว่าในทำนองเดียวกัน
แต้ม

@trey 500m คุณแน่ใจหรือไม่ ในระบบของฉันคือ 5mb
Pawel Dubiel

อ่าฉันอ่านผิดหน่วยคุณพูดถูก แต่ sshd เทียบเคียง + หมายเลขฉาบเป็นประมาณ 25% ของจำนวนอื่น ๆ สิ่งที่เป็น ;-)
แต้ม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.