วิธีการแยกความแตกต่างขั้ว vim จากขั้วปกติในทุบตี?


1

vim รีลีสล่าสุดแนะนำให้ใช้:terminalคำสั่งซึ่งเรียกใช้งานเทอร์มินัลในบานหน้าต่างเอดิเตอร์ใหม่

มีวิธีการระบุเปลือกเหล่านี้เปิดตัวจาก vim กับเปลือกปกติเปิดตัวโดย xterm / urxvt / gnome-terminal?

คำตอบ:


3

เนื่องจากเป็นกลุ่มแก้ไข 8.1.049 , เป็นกลุ่มไม่ส่งออกตัวแปรสภาพแวดล้อมที่มีค่าของVIM_TERMINAL v:versionก่อนหน้านั้นคุณสามารถแก้ไขได้โดยรับข้อมูลแผนผังกระบวนการหรืออาจเป็นไปได้ แต่ไม่สามารถพิสูจน์ได้โดยการทดสอบตัวแปรสภาพแวดล้อม$VIMและ$VIMRUNTIME


2

แนวทางทั่วไปด้วย 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"ในกรณีของคุณความแตกต่างไม่ควรสำคัญเพราะ:

  1. ถ้ากระสุนยังมีชีวิตอยู่แม้ว่าทั้งสองวิธีจะให้ผลลัพธ์ที่แตกต่างกันก็จะไม่มีผลลัพธ์vimเลยดังนั้นข้อสรุปสุดท้ายก็คือ "ไม่ใช่ขั้ว vim"
  2. ฉันคาดว่าvimจะฆ่ากระสุนที่เริ่มต้น:terminalเมื่อมันออก (ฉันไม่สามารถยืนยันได้ในขณะนี้) ดังนั้นประเด็นข้างต้นจึงไม่เกี่ยวข้อง
  3. ฉันคาดว่าเปลือกโต้ตอบใด ๆ ที่จะออกจากตัวเองเมื่อมันสูญเสียขั้วควบคุม ดังนั้นแม้ว่าความคาดหวังก่อนหน้านี้จะผิดหรือvimถูกฆ่าอย่างรุนแรงเท่านั้น(ดังนั้นจึงไม่สามารถส่งสัญญาณไปยังลูก ๆ ของมันได้) เปลือกจะออกไป ดังนั้นประเด็นข้างต้นจึงไม่เกี่ยวข้อง

ดังนั้นฉันคิดว่ามันปลอดภัยที่จะถือว่าวิธีการที่มีและไม่มี$PPIDความเท่าเทียมกันในทางปฏิบัติ


หมายเหตุขึ้นอยู่กับการตั้งค่าของคุณและวิธีที่คุณเริ่มต้นvim, ps -o comm= ...อาจจะไม่กลับตัวอักษรvimสตริง เช่นมันอาจจะเป็นvim.basic, vim.gtk3หรือสิ่งอื่นใด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.