มีวิธีที่รวดเร็ว (แป้นพิมพ์ลัด) เพื่อเปิดเทอร์มินัลอีมูเลเตอร์ (ในกรณีของฉัน urxvt) ในไดเรกทอรีเดียวกันกับไฟล์ในบัฟเฟอร์ emacs ปัจจุบันหรือไม่?
มีวิธีที่รวดเร็ว (แป้นพิมพ์ลัด) เพื่อเปิดเทอร์มินัลอีมูเลเตอร์ (ในกรณีของฉัน urxvt) ในไดเรกทอรีเดียวกันกับไฟล์ในบัฟเฟอร์ emacs ปัจจุบันหรือไม่?
คำตอบ:
การรวมกันM-!
ช่วยให้คุณสามารถเปิดคำสั่งเชลล์ urxvt
คุณสามารถใช้มันเพื่อเปิดแยกต่างหาก
M-! urxvt RET
ฉันเพิ่งลองด้วยxterm
(ฉันไม่มีurxvt
) และมันก็เปิดในไดเรกทอรีเดียวกับไฟล์ในบัฟเฟอร์
หากคุณต้องการกำหนดทางลัดให้เพิ่มสิ่งที่คล้ายกันในไฟล์ init ของคุณ:
(global-set-key (kbd "C-c s") (kbd "M-! urxvt RET"))
ในกรณีของฉันฉันผูกพันทางลัดไปยัง: Ctrl+ -CS
M-x term
ผมมักจะใช้
คุณสามารถเช็คเอาต์:
M-x terminal
M-x shell
M-x term
กำลังเปิดตัวโปรแกรมจำลองเทอร์มินัลอย่างมีประสิทธิภาพที่เขียนด้วย elisp จากความช่วยเหลือ:
คำ
M-x ... RET เริ่มต้นเทอร์มินัลอีมูเลเตอร์ในบัฟเฟอร์ใหม่ (โปรแกรมคำศัพท์)term เป็นฟังก์ชั่น Lisp ที่คอมไพล์แบบอินเตอร์แอคทีฟใน `term.el '
เริ่ม terminal-emulator ในบัฟเฟอร์ใหม่ บัฟเฟอร์อยู่ในโหมด Term ดู`term-mode 'สำหรับคำสั่งที่ใช้ในบัฟเฟอร์นั้น
พิมพ์ Cc b เพื่อสลับไปยังบัฟเฟอร์อื่น
multi-term
คำสั่ง emacs M-x shell
จะเริ่มเชลล์ในบัฟเฟอร์ใหม่ (หรือเปลี่ยนเป็นเชลล์บัฟเฟอร์ที่มีอยู่หากมี) หากเป็นบัฟเฟอร์ใหม่เชลล์จะเริ่มต้นในไดเรกทอรีของไฟล์ที่เข้าชมในบัฟเฟอร์ปัจจุบัน หากเป็นบัฟเฟอร์เชลล์ที่มีอยู่จะยังคงอยู่ในไดเรกทอรีที่คุณทิ้งไว้หลังจากใช้งานครั้งล่าสุด เพื่อให้ได้พฤติกรรมตามที่คุณต้องการอย่าลืมฆ่าบัฟเฟอร์ของเชลล์เมื่อคุณทำเสร็จแล้ว ( C-x k
)
หากM-x shell
พิมพ์มากเกินไปคุณสามารถตั้งค่าโกลบอลคีย์เพื่อเริ่มเชลล์สำหรับคุณ สิ่งที่ต้องการ(global-set-key (kbd "C-x S") 'shell)
ในไฟล์เริ่มต้นของคุณควรทำ (แต่ระวังอย่าปกปิดคำสั่งที่มีประโยชน์อื่นด้วยทางลัด!
นอกจากนี้โปรดทราบว่านี่เป็น "เทอร์มินัลโง่" ดังนั้นคำสั่งบางอย่างเช่นgit commit
ตัวเลือกที่ต้องการเช่น-m
และรหัสผ่านจะเป็นข้อความธรรมดาบนหน้าจอของคุณ
ฉันต้องการเรียกใช้แอปพลิเคชั่นเครื่องเทอร์มินัลโดยเฉพาะkonsole
. ฉันต้องการเปิดแท็บใหม่ใน konsole ถ้ามันทำงานอยู่หรือไฟขึ้นถ้ามันไม่ทำงาน
ตั้งแต่ฉันอายุน้อยแล้วฉันแยกการใช้งานระหว่าง emacs และ bash ฉันเรียก defun ต่อไปนี้จาก emacs:
(defun bk-konsoles ()
"Calls: bk_konsoles.bash -- which starts new tab in a running konsole,"
(interactive)
(let ((curDir default-directory))
(shell-command (concat "bk_konsoles.bash \"" curDir "\" 2>&1 > /dev/null & disown") nil nil)
(kill-buffer "*Shell Command Output*")))
defun เรียกสคริปต์ทุบตีbk_konsoles.bash
:
#!/bin/bash
myPath=`echo $@ | sed 's/.$//'`
runningKonsole=`ps -e | grep konsole`
if [ "$runningKonsole"!="" ]; then
if [ "$@"!="" ]; then
konsole --new-tab --workdir "$myPath" 2>&1 > /dev/null
else
konsole --new-tab 2>&1 > /dev/null
fi
wmctrl -a " – Konsole"
else
konsole
fi
shell-mode
ส่วนใหญ่ของการใช้เวลาฉัน ดังนั้นผมจึงหนักใช้เปลือกที่นี่ แต่เมื่อฉันต้องการขั้วภายนอก ฉันใช้ urxvt-client กับ tmux โดยใช้สิ่งนี้:
urxvtc -e bash -c "tmux -q has-session && exec tmux attach-session -d || exec tmux new-session -n$USER -s$USER@$HOSTNAME"
(defun term-here ()
(interactive)
(start-process "" nil "term-here"))
สิ่งนี้จะเปิด urxvt-client (ด้วย tmux) ในไดเรกทอรีปัจจุบันของคุณ ฉันผูกมันในโหมด dire-map
(use-package dired
:ensure nil
:ensure-system-package urxvt
:bind ((:map dired-mode-map
("," . term-here))))
ฉันเลือก urxvt-client เพราะมันรวดเร็วและง่าย อย่าลืมเรียกใช้ urxvt-daemon เมื่อเริ่มต้น
หากคุณhelm
ติดตั้งเฟรมเวิร์กความสมบูรณ์แล้วคุณสามารถใช้helm-run-external-command (C-x c C-c C-x)
เพื่อรันเทอร์มินัลอีมูเลเตอร์ที่คุณเลือกหรือโปรแกรมภายนอกอื่น ๆ ในไดเรกทอรีของบัฟเฟอร์ปัจจุบัน
M-x term
ดูเหมือนดี แต่ไม่ใช่สิ่งที่ฉันต้องการ ฉันต้องการเริ่มต้นไม่ใช่เชลล์ (เช่นbash
หรือzsh
ใน emacs buffer แต่เป็น terminal emulator (xterm
หรือurxvt
... )