วิธีการเปิดไฟล์ในกระบวนการ emac ที่มีอยู่จากบรรทัดคำสั่ง?


14

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

ความคิดใดที่ฉันสามารถทำได้


ลองดูที่คำตอบของฉันstackoverflow.com/a/38655619/2450748แม้ว่า 5 ปีต่อมา :)
nexayq

คำตอบ:


21

M-x server-startภายในเซสชัน Emacs จากนั้นใช้emacsclient -n file1 file2 ...เพื่อเพิ่มไฟล์ลงใน Emacs ที่มีอยู่ มีตัวเลือกเพิ่มเติมที่คุณอาจต้องการใช้เช่น-cเปิดไฟล์ในหน้าต่างใหม่ (เฟรม)


ขอบคุณที่รัก นั่นคือสิ่งที่ฉันต้องรู้ ฉันยังไม่ได้ตรวจสอบ 'คำตอบที่ถูกต้อง' เพราะฉันได้ยินมาว่าคุณควรเปิดไว้เสมอเพื่อให้โอกาสผู้อื่นได้มีส่วนร่วม แต่ฉันก็ได้ตอบคำถามของคุณไปแล้ว
bev

โดยปกติคุณจะต้องใส่(server-start)ไฟล์. emacs ของคุณแทนที่จะเริ่มต้นเซิร์ฟเวอร์ด้วยตนเอง ฉันใช้(and window-system (server-start))เพื่อหลีกเลี่ยงการเริ่มต้นเซิร์ฟเวอร์ถ้าฉันใช้ emacs ใน terminal
cjm

ใน Emacs สมัยใหม่มันมีประโยชน์ในเทอร์มินัล ดู-tตัวเลือก
geekosaur

@cjm - จริง ๆ แล้วฉันจะเริ่มเซิร์ฟเวอร์ในไฟล์. emacs ของฉัน ฉันแค่ไม่ได้ใช้มัน :-)
bev

5

ใส่(server-start)ใน.emacsไฟล์ของคุณ

เพิ่มไปยัง ~/.bashrc

alias myedit='emacsclient --alternate-editor="" --no-wait $*' #quotes intentionaly left blank

จากนั้นใช้myeditเป็นเครื่องมือแก้ไขของคุณ คุณจะต้องใช้-cตัวเลือกเพื่อเปิดหน้าต่าง

ดังนั้นคุณอาจทำสิ่งนี้:

myedit -c a-file
run-script #that uses myedit

หรือ

run-script #that uses myedit
myedit -c

Richard ขอบคุณสำหรับอินพุต ฉันยังสับสนกับบางสิ่งบางอย่างกับสคริปต์ของคุณ ก่อนอื่นเนื่องจาก emacsclient ไม่มีตัวเลือก -c ฉันคิดว่ามันเป็นเรื่องน่ากลัว แต่ก็ไม่รู้ ประการที่สองทำไมไม่ใส่ emacs เป็นเครื่องมือแก้ไขสำรอง ขอบคุณ
bev

# $ emacsclient - ช่วย .... ตัวเลือกต่อไปนี้ได้รับการยอมรับ: ... -c, --create-frame สร้างเฟรมใหม่แทนการพยายามใช้เฟรม Emacs ปัจจุบัน ... -a EDITOR, - ทางเลือกอื่น -editor = EDITOR Editor เพื่อย้อนกลับไปที่หากเซิร์ฟเวอร์ไม่ทำงานหาก EDITOR เป็นสตริงว่างให้เริ่ม Emacs ในโหมด daemon และลองเชื่อมต่ออีกครั้ง
ctrl-alt-delor

คุณไม่ต้องการ (และอันที่จริงแล้วอาจไม่ต้องการ) เพื่อใช้พารามิเตอร์ตำแหน่งในคำจำกัดความของนามแฝง พิจารณาว่าalias foo='echo bar $*'จะขยายตัวset quux; foo bazอย่างไร หากคุณต้องการใช้พารามิเตอร์ตำแหน่งให้ลองใช้เป็นฟังก์ชั่นเชลล์:myedit() { emacsclient … "$@"; }
Chris Johnsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.