ฉันมีไฟล์ config ที่ฉันเปิดไว้เป็นกลุ่ม แต่บางครั้งก็เปลี่ยนบนดิสก์โดยไม่ต้องมีการเปลี่ยนแปลงเหล่านี้ในเทอร์มินัล ฉันสามารถรีเฟรชเนื้อหาบนหน้าจอโดยไม่ปิดและเปิดไฟล์ใหม่ได้หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
ฉันมีไฟล์ config ที่ฉันเปิดไว้เป็นกลุ่ม แต่บางครั้งก็เปลี่ยนบนดิสก์โดยไม่ต้องมีการเปลี่ยนแปลงเหล่านี้ในเทอร์มินัล ฉันสามารถรีเฟรชเนื้อหาบนหน้าจอโดยไม่ปิดและเปิดไฟล์ใหม่ได้หรือไม่ ถ้าเป็นเช่นนั้นได้อย่างไร
คำตอบ:
คุณสามารถใช้:edit
คำสั่งโดยไม่ระบุชื่อไฟล์เพื่อโหลดไฟล์ปัจจุบัน หากคุณทำการแก้ไขไฟล์คุณสามารถใช้
:edit!
เพื่อบังคับให้โหลดไฟล์ปัจจุบันซ้ำ (คุณจะสูญเสียการแก้ไข)
คำสั่งที่สามารถย่อโดย:edit
:e
แรงแก้ไขสามารถทำได้โดย:e!
:e!
จาก
:edit
และ:edit!
คุณสามารถใช้:e
และ:e!
ตามลำดับ
u
Ndo :e!
:bufdo e
นอกจากการรีเฟรชไฟล์ด้วยตนเอง:edit
แล้วคุณสามารถใส่ลงใน~/.vimrc
:set autoread
เพื่อให้ Vim รีเฟรชไฟล์ใด ๆ ที่ไม่ได้รับการแก้ไขโดย Vim โดยอัตโนมัติ :checktime
ยังเห็น
git pull
ระวังว่าคุณอาจสูญเสียการเปลี่ยนแปลงที่ยังไม่ได้บันทึกบนหน้าจอได้โดยไม่ได้ตั้งใจ
:checktime
ข้ามไปที่Wrap-up
หัวข้อvimrc
เพื่อเพิ่มเพื่อทำให้ชีวิตของคุณดีขึ้น
วิ่ง :checktime
ตรวจสอบว่ามีการเปลี่ยนแปลงบัฟเฟอร์ภายนอก Vim หรือไม่ สิ่งนี้จะตรวจสอบและเตือนคุณว่าคุณจะลงเอยด้วยไฟล์สองเวอร์ชัน
หากต้องการโหลดการเปลี่ยนแปลงโดยอัตโนมัติให้เพิ่มในvimrc
:
เมื่อไฟล์ถูกตรวจพบว่ามีการเปลี่ยนแปลงภายนอก Vim และไม่ได้เปลี่ยนแปลงภายใน Vim ให้อ่านไฟล์นั้นอีกครั้งโดยอัตโนมัติ เมื่อไฟล์ถูกลบจะไม่ทำเช่นนี้
คำตอบนี้เพิ่มคำเตือน:
Autoread ไม่โหลดไฟล์ซ้ำนอกจากว่าคุณจะทำอะไรเช่นเรียกใช้คำสั่งภายนอก (เช่น
!ls
หรือ!sh
อื่น ๆ )
อ่านต่อไปเพื่อหาทางแก้ไข
เพิ่มในของคุณvimrc
:
au CursorHold,CursorHoldI * checktime
โดยค่าเริ่มต้นCursorHoldถูกเรียกหลังจากเคอร์เซอร์ยังคงยังคงเป็นเวลา 4 วินาทีและสามารถกำหนดค่าผ่านทางUpdateTime
เพิ่มสิ่งต่อไปนี้เพื่อvimrc
ทริกเกอร์autoread
เมื่อเปลี่ยนบัฟเฟอร์ขณะอยู่ในกลุ่ม:
au FocusGained,BufEnter * :checktime
หากต้องการให้FocusGained
(ดูด้านบน) ทำงานเป็นกลุ่มแบบธรรมดาภายในเทอร์มินัลอีมูเลเตอร์ (Xterm, tmux ฯลฯ ) ติดตั้งปลั๊กอิน:
vim-tmux-focus-events
ในรุ่น tmux> 1.9 คุณจะต้องเพิ่ม.tmux.conf
:
set -g focus-events on
แจ้งเตือนเมื่อมีautoread
ทริกเกอร์ยังเป็นไปได้
นี่คือvimrc
บรรทัดของฉันที่จะใช้ทั้งหมดข้างต้น:
" Triger `autoread` when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
autocmd FocusGained,BufEnter,CursorHold,CursorHoldI * if mode() != 'c' | checktime | endif
" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
\ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None
ขอขอบคุณที่ErichBSchulz au CursorHold
สำหรับการชี้ให้ฉันในทิศทางที่ถูกต้องกับ