Theo mặc định, vim
để lại các tệp hoán đổi trong thư mục dự án của tôi và trên các sự cố, nó để lại các tệp sao lưu.
Tôi có thể ngăn chặn điều này? Hay tôi cần cập nhật tất cả các .VCSignore
tập tin dự án của mình ?
Theo mặc định, vim
để lại các tệp hoán đổi trong thư mục dự án của tôi và trên các sự cố, nó để lại các tệp sao lưu.
Tôi có thể ngăn chặn điều này? Hay tôi cần cập nhật tất cả các .VCSignore
tập tin dự án của mình ?
Câu trả lời:
Theo mặc định, Vim không để lại các tập tin sao lưu. Chúng chỉ là các tệp tạm thời tồn tại trong khi Vim đang lưu bộ đệm vào đĩa. Như được mô tả trong :help backup-table
hành vi này có thể được kiểm soát bởi 'backup'
và 'writebackup'
các tùy chọn:
'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
Đối với các tập tin trao đổi, có thể hữu ích để thu thập chúng trong một thư mục chuyên dụng. Điều này có thể được thực hiện với các 'directory'
tùy chọn. Ví dụ
:set directory^=$HOME/.vim/tmp//
sẽ thêm $HOME/.vim/tmp
vào phần đầu của danh sách các thư mục mà Vim sẽ cố gắng sử dụng khi tạo tệp hoán đổi. Việc theo dõi //
làm cho Vim mã hóa toàn bộ tên đường dẫn vào tệp để không xảy ra xung đột với các tệp có tên tương tự từ các thư mục khác nhau.
Hãy cẩn thận : Điều này vô hiệu hóa khả năng Vim chú ý nếu nhiều người dùng đang cố chỉnh sửa cùng một tệp vì các tệp hoán đổi được lưu trữ ở các vị trí khác nhau.
Đoạn mã bên dưới (được điều chỉnh từ vprc của tpope ) cũng sẽ vô hiệu hóa tệp hoán đổi cho bộ đệm khi nó không được sửa đổi, theo cách đó nếu Vim / máy tính của bạn gặp sự cố khi bạn mở một loạt tệp, các tệp hoán đổi bị bỏ lại sẽ chỉ là cho các tập tin sửa đổi.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Caveat : Kể từ khi tập tin hoán đổi chỉ tồn tại khi bộ đệm được sửa đổi, điều này có ảnh hưởng tương tự như thiết lập 'directory'
. Nếu bộ đệm không được sửa đổi, thì một Vim khác có thể bắt đầu chỉnh sửa nó mà không cần thông báo trước. Nếu Vim thứ hai lưu trước khi thay đổi thứ nhất thực hiện nhiều thay đổi, thì chúng sẽ không được chú ý cho đến khi người dùng cố lưu hoặc một cái gì đó kích hoạt Vim để kiểm tra xem tệp có bị sửa đổi hay không.
Tôi sử dụng .vimrc
trên nhiều máy, kể cả máy chủ dùng chung. Tôi không nhất thiết muốn mọi người có thể xem các tệp mà tôi đang làm việc và tôi thích giữ thư mục nhà của mình tương đối sạch sẽ. Vì vậy, đây là giải pháp của tôi sẽ hoạt động tốt trên Linux và 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,
Lưu ý rằng điều này sẽ tạo một .tmp
thư mục theo ~/.vim
nếu nó không tồn tại. Đây sẽ là ngôi nhà mới của các tập tin trao đổi của bạn. Đối với các tệp hoàn tác, tôi cũng có phần sau đây .vimrc
(khá giống nhau):
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
Đây là những gì tôi làm trong vimrc của mình:
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
Nó sẽ tạo /var/tmp/vim_<username>
và sử dụng nó để lưu trữ tất cả các tệp liên quan đến vim. Giữ thư mục dự án của bạn sạch sẽ.
Sử dụng whoami
đảm bảo bạn có thể sử dụng vimrc trên toàn cầu (ví dụ: cho người dùng & root) trong khi vẫn sử dụng các thư mục riêng biệt; nếu bạn không cần điều này, bạn có thể thay thế nó bằng một thư mục được mã hóa cứng để khởi động nhanh hơn. Bạn cũng có thể sử dụng ~/.vim/
thư mục, nhưng tôi thích sử dụng /var/tmp
vì nó thường là một hệ thống tập tin riêng biệt.
Tôi sử dụng /var/tmp
vì /tmp
thường bị xóa khi khởi động lại. Bạn có thể không muốn thư mục này có thể ghi được trên thế giới, vì mọi người sau đó có thể đặt các tệp ở đó để thực hiện những việc có hại khi bạn mở tệp.
adduser
hoặc bất cứ điều gì bạn đang sử dụng để tạo người dùng. Trong mọi trường hợp, hầu hết mọi người sử dụng Vim trên các máy đáng tin cậy (nhưng nhận xét của bạn là tốt, như vậy).
$HOME
đâu đó.
/var/
là một hệ thống tập tin khác. Lý thuyết là, nó sẽ ngăn chặn rất nhiều việc ghi vào /
, /usr
hoặc /home
, dẫn đến việc phân mảnh ít hơn và có nguy cơ bị hỏng tệp trong trường hợp bị sập ... Đây cũng là lý do tại sao hộp thư và nội dung được bật /var
theo mặc định chứ không phải trong homedir ...
/var/tmp
Luôn luôn có thể ghi được trên thế giới. Đây là một thư mục tạm thời của hệ thống. (Chà, bạn có thể thay đổi nó thành không, nhưng đó là một trong những điều mà các hệ thống giống Unix rất vui lòng cho phép bạn giữ các phần sau khi bạn phá vỡ nó). Nếu bạn có một người dùng khác trên hệ thống, anh ấy / cô ấy có thể tạo/var/tmp/vim_«your_username»
với sự cho phép của sự lựa chọn của anh ấy / cô ấy. Và sau đó điền nó với các liên kết tượng trưng đến các tệp quan trọng của bạn, có thể sẽ bị phá hủy bởi các tempfiles vim.