ในคำถามนี้Gilles ตอบ
แต่ความเป็นไปได้อีกคือการทำงาน
tail -f
ในEmacsเปลือกกันชนและใช้ความสามารถของไวยากรณ์ Emacs ระบายสี
เพราะฉันใช้เสียงเรียกผมต้องการที่จะทำเช่นนี้กับกลุ่มไม่emacs
ไม่เป็นกลุ่มที่มีคุณลักษณะนี้?
ในคำถามนี้Gilles ตอบ
แต่ความเป็นไปได้อีกคือการทำงาน
tail -f
ในEmacsเปลือกกันชนและใช้ความสามารถของไวยากรณ์ Emacs ระบายสี
เพราะฉันใช้เสียงเรียกผมต้องการที่จะทำเช่นนี้กับกลุ่มไม่emacs
ไม่เป็นกลุ่มที่มีคุณลักษณะนี้?
คำตอบ:
คุณสามารถเขียนปลั๊กอินแบบมัลติเธรดเพื่อเปลี่ยนบัฟเฟอร์แบบเรียลไทม์ใน Python หรือสคริปต์อื่น ๆ ที่ Vim รองรับและมีเธรด
แต่นี่ใช้ได้เฉพาะเทอร์มินัลเท่าที่ฉันรู้ อย่างน้อยใน X11 เวอร์ชัน GUI จะหยุดทำงานหากมีการแก้ไข GUI โดยเธรดอื่น
ฉันชอบมันสั้นและไม่มีแฮ็คหรือสคริปต์ภายนอกมากมาย คุณสามารถเรียกใช้ oneliner นี้จาก ex (whithin vim) เมื่อต้องการ (หรือใส่คำสั่งแต่ละคำสั่งใน vimrc เมื่อเปิดไฟล์บันทึก)
:set autoread | au CursorHold * checktime | call feedkeys("lh")
และนอกจากนี้คุณสามารถ:set syntax=logtalk
สีบันทึก
(หากคุณต้องการข้าม (เกือบ) ไปยังจุดสิ้นสุดของไฟล์เพียงแค่ใช้ "G" แทน "lh" ด้วยปุ่มลัด)
คำอธิบาย:
autoread
: อ่านไฟล์เมื่อมีการเปลี่ยนแปลงจากภายนอก (แต่มันไม่ทำงานด้วยตัวมันเองไม่มีตัวจับเวลาภายในหรืออะไรทำนองนั้นมันจะอ่านไฟล์เมื่อ vim ทำการกระทำเช่นเดียวกับคำสั่งในอดีต :!
CursorHold * checktime
: เมื่อผู้ใช้ไม่ได้ย้ายเคอร์เซอร์ตามเวลาที่ระบุในupdatetime
(ซึ่งคือ 4,000 มิลลิวินาทีโดยค่าเริ่มต้น) checktime
จะดำเนินการซึ่งจะตรวจสอบการเปลี่ยนแปลงจากภายนอกไฟล์call feedkeys("lh")
: เคอร์เซอร์จะถูกย้ายหนึ่งครั้งด้านขวาและด้านหลังซ้าย และจากนั้นไม่มีอะไรเกิดขึ้น (... ซึ่งหมายถึงนั่นCursorHold
คือสิ่งที่ถูกเรียกซึ่งหมายความว่าเรามีการวนรอบ )หากต้องการหยุดการเลื่อนเมื่อใช้งานcall feedkeys("G")
ให้เรียกใช้งาน:set noautoread
- ตอนนี้กลุ่มจะบอกว่าไฟล์ถูกเปลี่ยนและถามว่ามีใครต้องการอ่านการเปลี่ยนแปลงหรือไม่)
ฉันชอบความคิดที่จะดู logfiles ในกลุ่ม (แทน tail -f) เช่นเมื่อคุณทำงานในเซสชัน ssh โดยไม่มีหน้าจอ / tmux นอกจากนี้คุณสามารถคัดลอกโดยตรงจาก logfile หากจำเป็นหรือบันทึกผลลัพธ์โดยตรงหรือ ... สิ่งที่คุณสามารถทำได้ด้วย vim :)
* จากคำตอบนี้(อ้างอิงจากคำตอบของPhanHaiQuangและความคิดเห็นโดยflukus )