โดยค่าเริ่มต้นvim
ออกจากไฟล์ swap ในไดเรกทอรีโครงการของฉันและเมื่อเกิดปัญหามันออกจากไฟล์สำรอง
ฉันจะป้องกันสิ่งนี้ได้ไหม หรือฉันต้องการอัปเดต.VCSignore
ไฟล์โครงการทั้งหมดของฉัน?
โดยค่าเริ่มต้นvim
ออกจากไฟล์ swap ในไดเรกทอรีโครงการของฉันและเมื่อเกิดปัญหามันออกจากไฟล์สำรอง
ฉันจะป้องกันสิ่งนี้ได้ไหม หรือฉันต้องการอัปเดต.VCSignore
ไฟล์โครงการทั้งหมดของฉัน?
คำตอบ:
ตามค่าเริ่มต้น Vim จะไม่ทิ้งไฟล์สำรองไว้ เป็นเพียงไฟล์ชั่วคราวที่มีอยู่ในขณะที่ Vim กำลังบันทึกบัฟเฟอร์ลงดิสก์ ตามที่อธิบายใน:help backup-table
พฤติกรรมนี้สามารถควบคุมได้โดยตัวเลือก'backup'
และ'writebackup'
:
'backup' 'writebackup' action ~
off off no backup made
off on backup current file, deleted afterwards (default)
on off delete old backup, backup current file
on on delete old backup, backup current file
สำหรับสว็อปไฟล์มันจะมีประโยชน์ในการรวบรวมมันในไดเรคทอรีเฉพาะ สามารถทำได้ด้วย'directory'
ตัวเลือก ตัวอย่างเช่น
:set directory^=$HOME/.vim/tmp//
จะเพิ่ม$HOME/.vim/tmp
ไว้ในส่วนหัวของรายการไดเรกทอรีที่ Vim จะพยายามใช้เมื่อสร้างไฟล์สลับ การติดตาม//
ทำให้ Vim เข้ารหัสชื่อพา ธ ทั้งหมดไปยังไฟล์ดังนั้นจึงไม่มีการชนกับไฟล์ที่มีชื่อคล้ายกันจากไดเรกทอรีที่แตกต่างกัน
Caveat : สิ่งนี้จะปิดการใช้งานความสามารถของ Vim ในการสังเกตว่าผู้ใช้หลายคนพยายามแก้ไขไฟล์เดียวกันหรือไม่เนื่องจากไฟล์ swap ถูกเก็บไว้ในตำแหน่งที่ต่างกัน
ตัวอย่างด้านล่าง (ดัดแปลงมาจากvimrc ของ tpope ) จะปิดการใช้งานไฟล์ swap สำหรับบัฟเฟอร์เมื่อมันไม่ได้ถูกแก้ไขเช่นนั้นหาก Vim / คอมพิวเตอร์ของคุณขัดข้องเมื่อคุณเปิดไฟล์จำนวนมากไฟล์ swap ที่อยู่ด้านหลังจะเป็นเพียง สำหรับไฟล์ที่แก้ไข
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
ข้อแม้ : 'directory'
ตั้งแต่แลกเปลี่ยนไฟล์เท่านั้นเกิดขึ้นเมื่อบัฟเฟอร์มีการแก้ไขนี้มีผลเช่นเดียวกับการตั้งค่า หากบัฟเฟอร์ไม่มีการแก้ไขแล้ว Vim อื่นสามารถเริ่มแก้ไขได้โดยไม่ต้องแจ้งให้ทราบล่วงหน้า หาก Vim ที่สองบันทึกก่อนที่จะมีการเปลี่ยนแปลงครั้งแรกพวกเขาจะไม่สังเกตเห็นจนกว่าผู้ใช้จะพยายามบันทึกหรือสิ่งที่เรียก Vim เพื่อตรวจสอบว่ามีการแก้ไขไฟล์หรือไม่
ฉันใช้.vimrc
หลายเครื่องรวมถึงเซิร์ฟเวอร์ที่ใช้ร่วมกัน ฉันไม่ต้องการให้คนอื่นเห็นไฟล์ที่ฉันกำลังทำงานอยู่และฉันต้องการทำให้โฮมไดเร็กตอรี่ของฉันค่อนข้างสะอาด ดังนั้นนี่คือทางออกของฉันซึ่งจะทำงานบน Linux และ Mac OS X ได้ดี
" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
:silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif
set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
โปรดทราบว่าสิ่งนี้จะสร้าง.tmp
ไดเรกทอรีภายใต้~/.vim
หากยังไม่มีอยู่ นี่จะเป็นบ้านใหม่ของไฟล์ swap ของคุณ สำหรับการยกเลิกไฟล์ฉันยังมีสิ่งต่อไปนี้ในของฉัน.vimrc
(ซึ่งคล้ายกันมาก):
if exists("+undofile")
" undofile -- This allows you to use undos after exiting and
" restarting. NOTE: only present in 7.3+
" :help undo-persistence
if isdirectory( $HOME . '/.vim/.undo' ) == 0
:silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
endif
set undodir=~/.vim/.undo
set undofile
endif
นี่คือสิ่งที่ฉันทำใน vimrc ของฉัน:
fun! MkdirIfNeeded(dir, flags, permissions)
if !isdirectory(a:dir)
call mkdir(a:dir, a:flags, a:permissions)
endif
endfun
" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
let tmpdir = 'C:/tmp/vim_' . whoami
else
let whoami = substitute(system("whoami"), '\n', '', '')
let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)
let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir
มันจะสร้าง/var/tmp/vim_<username>
และใช้สิ่งนี้เพื่อจัดเก็บไฟล์ที่เกี่ยวข้องกับเสียงเรียกเข้าทั้งหมด ทำให้ไดเรกทอรีโครงการของคุณสะอาด
การใช้whoami
ทำให้แน่ใจว่าคุณสามารถใช้ vimrc ได้ทั่วโลก (เช่นสำหรับผู้ใช้ & รูท) ในขณะที่ยังใช้ไดเรกทอรีแยกอยู่ หากคุณไม่ต้องการสิ่งนี้คุณสามารถแทนที่ด้วยไดเรกทอรีฮาร์ดโค้ดเพื่อเริ่มต้นได้เร็วขึ้น คุณสามารถใช้ไดเรกตอ~/.vim/
รีได้ แต่ฉันชอบใช้/var/tmp
เพราะโดยปกติจะเป็นระบบไฟล์แบบแยก
ฉันใช้/var/tmp
เพราะ/tmp
มักจะล้างเมื่อรีบูต คุณอาจไม่ต้องการให้ไดเรกทอรีนี้เขียนได้ทั่วโลกเนื่องจากผู้คนสามารถวางไฟล์ไว้ที่นั่นเพื่อทำสิ่งที่อาจเป็นอันตรายเมื่อคุณเปิดไฟล์
adduser
หรือสิ่งที่คุณใช้เพื่อสร้างผู้ใช้ ไม่ว่าในกรณีใดคนส่วนใหญ่ใช้ Vim บนเครื่องที่เชื่อถือได้ (แต่ความคิดเห็นของคุณดีมากเช่นนั้น)
$HOME
ใดที่หนึ่ง
/var/
คือระบบไฟล์ที่แตกต่างกัน ทฤษฎีก็คือว่ามันจะป้องกันไม่ให้มากเขียนบน/
, /usr
หรือ/home
นำไปสู่การกระจายตัวน้อยและมีความเสี่ยงของการทุจริตไฟล์ในกรณีที่มีการผิดพลาด ... และนี่ก็เป็นเหตุผลที่กล่องจดหมายและสิ่งที่อยู่บน/var
โดยค่าเริ่มต้นและไม่ได้อยู่ใน homedir ...
/var/tmp
สามารถเขียนได้ทั่วโลกเสมอ - เป็นไดเรกทอรีชั่วคราวของระบบ (คุณสามารถเปลี่ยนเป็นไม่ได้ แต่เป็นหนึ่งในสิ่งเหล่านั้นที่ระบบเหมือน Unix ยินดีที่จะให้คุณเก็บชิ้นส่วนหลังจากที่คุณทำลายมัน) หากคุณมีผู้ใช้รายอื่นในระบบเขา / เธอสามารถสร้าง/var/tmp/vim_«your_username»
โดยใช้สิทธิ์ที่ตนเลือก จากนั้นเติม symlink ลงในไฟล์สำคัญของคุณซึ่งอาจจะถูกทำลายโดย vim tempfiles