โปรแกรมประมวลผลคำและโปรแกรมแก้ไขข้อความอัตโนมัติบันทึกไฟล์ที่เราแก้ไขเป็นระยะ ๆ ซึ่งสะดวกมากสำหรับการเอาตัวรอดจากการล่มที่น่ารังเกียจ ฯลฯ
มีวิธีทำให้ Vim บันทึกไฟล์ของเราโดยอัตโนมัติหรือไม่?
โปรแกรมประมวลผลคำและโปรแกรมแก้ไขข้อความอัตโนมัติบันทึกไฟล์ที่เราแก้ไขเป็นระยะ ๆ ซึ่งสะดวกมากสำหรับการเอาตัวรอดจากการล่มที่น่ารังเกียจ ฯลฯ
มีวิธีทำให้ Vim บันทึกไฟล์ของเราโดยอัตโนมัติหรือไม่?
คำตอบ:
ไม่มีตัวเลือกในตัวแม้ว่า:help 'autosave'
(ใน todo.txt) หมายถึงคำอธิบายว่าตัวเลือกดังกล่าวสามารถทำได้อย่างไร
วิธีหนึ่งที่เป็นไปได้ที่จะใช้สิ่งนี้คือการใช้CursorHold
เหตุการณ์การเติมข้อความอัตโนมัติ เหตุการณ์นี้จะเกิดขึ้นเมื่อผู้ใช้ไม่ได้กดปุ่มเป็น'updatetime'
มิลลิวินาที
autocmd CursorHold * update
:update
คำสั่งเพียงช่วยประหยัดบัฟเฟอร์ถ้ามันมีการแก้ไข หากคุณต้องการให้สิ่งนี้เกิดขึ้นในขณะที่โหมดแทรกทำงานอยู่CursorHoldI
สามารถเพิ่มลงในรายการเหตุการณ์ได้
autocmd CursorHold,CursorHoldI * update
อีกทางเลือกหนึ่งคือ'autowrite'
ตัวเลือกซึ่งจะบันทึกบัฟเฟอร์ก่อนดำเนินการคำสั่งภายนอก (มีประโยชน์สำหรับการบันทึกก่อนเรียกใช้:make
) หรือเปลี่ยนไปใช้บัฟเฟอร์อื่น
Vim มีคุณสมบัติการบันทึกอัตโนมัติ แต่จะบันทึกลงในไฟล์ "กู้คืน"
เมื่อคุณแก้ไขเอกสารเช่นกลุ่มจะสร้างไฟล์MyFile.txt
revovery .MyFile.txt.swp
หากระบบของคุณเกิดข้อผิดพลาดหรือเซสชันของคุณกำลังจะตายคุณสามารถเชื่อมต่อใหม่และกู้คืนจากจุดที่คุณค้างไว้โดยพิมพ์:
vim -r MyFile.txt
การดำเนินการนี้จะเปิดไฟล์เพื่อแก้ไขและกู้คืนการเปลี่ยนแปลงล่าสุดที่คุณทำไว้
:w
จากนั้นคุณสามารถบันทึกการกู้คืนรุ่นด้วยวิธีปกติ
น่าเสียดายที่เมื่อคุณออกจากกลุ่มแล้วมันจะออก.MyFile.txt.swp
ไปรอบ ๆ และคุณต้องลบมันด้วยตนเอง:
rm .MyFile.txt.swp
ดูที่หน้า Man "Recovery" ด้วยเช่นกันบทที่ 11
:wq
หรือ:q!
หรือZZ
หรืออื่น ๆ ) ไฟล์ swap ควรถูกลบโดยอัตโนมัติ
ฉันสร้างปลั๊กอินการบันทึกอัตโนมัติซึ่งใช้คุณลักษณะ Vim 8 ของตัวจับเวลาเพื่อบันทึกบัฟเฟอร์ของคุณเป็นระยะ
ฉันทำให้ Vim บันทึกทุกอย่างทุกครั้งที่โฟกัสหายไป
autocmd FocusLost <your-patterns-here> silent! wall
รูปแบบของฉันค่อนข้างยาวและฉันใช้มันใน autocmds หลายอัน แต่เพื่อความสมบูรณ์นี่คือสิ่งที่ดูเหมือน:
if exists(':keeppatterns')
let s:keeppatterns = 'keeppatterns '
else
let s:keeppatterns = ''
endif
augroup AutoSaveGroup
" :help file-pattern has some info,
" but some of it is is buried in the PATTERNS section of usr_40.txt
let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"
autocmd!
execute "autocmd FocusLost" s:autoPattern "silent! wall"
execute "autocmd BufWritePre" s:autoPattern s:keeppatterns . 'call FixFormatting(expand("<afile>"))'
execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
execute "autocmd FileChangedRO" s:autoPattern "write!"
autocmd FocusLost *.txt silent! wall
augroup END
ดังที่คนอื่น ๆ ระบุไว้ vim มีไฟล์ swap (.swp) ที่จะถูกสร้างขึ้นโดยที่ไฟล์ดั้งเดิมของคุณเคยเป็น แต่ในไฟล์. vimrc ของคุณคุณสามารถตั้งค่าไดเรกทอรี. swp ได้
คุณจะต้องสร้างไดเรกทอรีด้วยmkdir
แล้วตั้งค่า. vimrc ของคุณให้เป็นตำแหน่งนั้น
set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
เป็นกลุ่ม-พื้นที่ทำงานปลั๊กอินมีการปรับแต่งอย่างเป็นธรรมอัตโนมัติบันทึกคุณลักษณะที่อาจจะเหมาะกับความต้องการของคุณ ตามค่าเริ่มต้นจะช่วยให้บันทึกอัตโนมัติเมื่ออยู่ในเซสชันพื้นที่ทำงาน (คุณสมบัติหลัก) แต่คุณสามารถตั้งค่าให้บันทึกอัตโนมัติทุกครั้งหากนั่นคือทั้งหมดที่คุณกำลังมองหา ( let g:workspace_autosave_always = 1
)
พยายามบันทึกบัฟเฟอร์ทุกครั้งที่มีการเปลี่ยนแปลงข้อความ:
autocmd TextChanged,TextChangedI <buffer> silent write
มันใช้งานได้สำหรับฉัน