vim รีลีสล่าสุดแนะนำให้ใช้:terminal
คำสั่งซึ่งเรียกใช้งานเทอร์มินัลในบานหน้าต่างเอดิเตอร์ใหม่
มีวิธีการระบุเปลือกเหล่านี้เปิดตัวจาก vim กับเปลือกปกติเปิดตัวโดย xterm / urxvt / gnome-terminal?
vim รีลีสล่าสุดแนะนำให้ใช้:terminal
คำสั่งซึ่งเรียกใช้งานเทอร์มินัลในบานหน้าต่างเอดิเตอร์ใหม่
มีวิธีการระบุเปลือกเหล่านี้เปิดตัวจาก vim กับเปลือกปกติเปิดตัวโดย xterm / urxvt / gnome-terminal?
คำตอบ:
เนื่องจากเป็นกลุ่มแก้ไข 8.1.049 , เป็นกลุ่มไม่ส่งออกตัวแปรสภาพแวดล้อมที่มีค่าของVIM_TERMINAL
v:version
ก่อนหน้านั้นคุณสามารถแก้ไขได้โดยรับข้อมูลแผนผังกระบวนการหรืออาจเป็นไปได้ แต่ไม่สามารถพิสูจน์ได้โดยการทดสอบตัวแปรสภาพแวดล้อม$VIM
และ$VIMRUNTIME
ps
vim
คุณจำเป็นต้องตรวจสอบถ้าการปกครองของเปลือกเป็น สิ่งนี้ใช้ได้ใน Debian 9 ของฉัน:
pid=1234 # specify PID of the shell in question
ps -o comm= "$(ps -o ppid= "$pid")"
โดยที่ps -o ppid= "$pid"
ส่งคืน ID กระบวนการหลัก หมายเหตุหากไม่มีกระบวนการที่มี PID ของ$pid
คำสั่งทั้งหมดจะกลายเป็นps -o comm= ""
สิ่งที่ไม่ถูกต้องและจะเกิดข้อผิดพลาด
สมมติว่าคุณรู้ PID ที่ถูกต้อง เช่นคุณสามารถวนซ้ำผลลัพธ์ของpidof bash
:
for pid in $(pidof bash); do ps -o comm= "$(ps -o ppid= "$pid")" 2>/dev/null; done
ภายในเชลล์เอง PID ที่เหมาะสมคือ$$
ดังนั้นด้านบนจึงง่ายขึ้น
ps -o comm= "$(ps -o ppid= "$$")" # non-optimal though, see below
$PPID
แต่ยังมี ถูกตั้งค่าโดยเชลล์เป็นค่าของ ID กระบวนการพาเรนต์ระหว่างการเตรียมข้อมูลเบื้องต้นของเชลล์ ดังนั้นสิ่งนี้ควรจะเกือบเทียบเท่า:
ps -o comm= "$PPID"
เกือบจะเป็นเพราะโดยทั่วไปถ้ากระบวนการหลักตายและเชลล์ยังมีชีวิตอยู่ (เป็นไปได้) เชลล์ที่กำพร้าจะได้รับพาเรนต์ใหม่ ฉันคิดว่านี่จะสะท้อนให้เห็นps -o ppid= "$$"
แต่ไม่ใช่ echo "$PPID"
ในกรณีของคุณความแตกต่างไม่ควรสำคัญเพราะ:
vim
เลยดังนั้นข้อสรุปสุดท้ายก็คือ "ไม่ใช่ขั้ว vim"vim
จะฆ่ากระสุนที่เริ่มต้น:terminal
เมื่อมันออก (ฉันไม่สามารถยืนยันได้ในขณะนี้) ดังนั้นประเด็นข้างต้นจึงไม่เกี่ยวข้องvim
ถูกฆ่าอย่างรุนแรงเท่านั้น(ดังนั้นจึงไม่สามารถส่งสัญญาณไปยังลูก ๆ ของมันได้) เปลือกจะออกไป ดังนั้นประเด็นข้างต้นจึงไม่เกี่ยวข้องดังนั้นฉันคิดว่ามันปลอดภัยที่จะถือว่าวิธีการที่มีและไม่มี$PPID
ความเท่าเทียมกันในทางปฏิบัติ
หมายเหตุขึ้นอยู่กับการตั้งค่าของคุณและวิธีที่คุณเริ่มต้นvim
, ps -o comm= ...
อาจจะไม่กลับตัวอักษรvim
สตริง เช่นมันอาจจะเป็นvim.basic
, vim.gtk3
หรือสิ่งอื่นใด