vim รีลีสล่าสุดแนะนำให้ใช้:terminalคำสั่งซึ่งเรียกใช้งานเทอร์มินัลในบานหน้าต่างเอดิเตอร์ใหม่
มีวิธีการระบุเปลือกเหล่านี้เปิดตัวจาก vim กับเปลือกปกติเปิดตัวโดย xterm / urxvt / gnome-terminal?
vim รีลีสล่าสุดแนะนำให้ใช้:terminalคำสั่งซึ่งเรียกใช้งานเทอร์มินัลในบานหน้าต่างเอดิเตอร์ใหม่
มีวิธีการระบุเปลือกเหล่านี้เปิดตัวจาก vim กับเปลือกปกติเปิดตัวโดย xterm / urxvt / gnome-terminal?
คำตอบ:
เนื่องจากเป็นกลุ่มแก้ไข 8.1.049 , เป็นกลุ่มไม่ส่งออกตัวแปรสภาพแวดล้อมที่มีค่าของVIM_TERMINAL v:versionก่อนหน้านั้นคุณสามารถแก้ไขได้โดยรับข้อมูลแผนผังกระบวนการหรืออาจเป็นไปได้ แต่ไม่สามารถพิสูจน์ได้โดยการทดสอบตัวแปรสภาพแวดล้อม$VIMและ$VIMRUNTIME
psvimคุณจำเป็นต้องตรวจสอบถ้าการปกครองของเปลือกเป็น สิ่งนี้ใช้ได้ใน 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หรือสิ่งอื่นใด