Здесь я вижу два разных вопроса:
Почему плохая идея lock
на публичном объекте?
идея заключается в том, что блокировка объекта ограничивает доступ, пока поддерживается lock
- это означает, что ни один из его членов не может быть доступен, а другие источники могут не знать о lock
и пытаться использовать экземпляр, даже пытаясь получить а lock
сами, следовательно, вызывает проблемы.
По этой причине используйте выделенный экземпляр объекта для блокировки.
Как заблокировать эти методы, чтобы они не работали в тандеме?
Вы можете рассмотреть Mutex
учебный класс; создание «глобального» мьютекса позволит вашим классам работать на основе знания состояния блокировки во всем приложении. Или вы можете использовать общий экземпляр ReaderWriterLockSlim
, но я бы не стал рекомендовать его совместное использование между классами.
Я использую Dropbox . Я создал папку vim
в моем Dropbox, которая содержит мои .vimrc
(на самом деле: vimrc.vim
) и цвета
, подключаемый модуль
и т. Д.
Dropbox отправляет все эти файлы на все мои компьютеры (домашний, рабочий, ноутбук, Bootcamp), поэтому каждый раз, когда я хочу изменить свой vimrc
, Я могу это сделать, и мне не нужно беспокоиться о копировании его в правильный каталог или извлечении файла из SVN или чего-то еще. Все происходит автоматически!
Мой настоящий .vimrc
содержит только то, что необходимо для загрузки того, что у меня есть в Dropbox. В OSX и Linux это выглядит так:
set runtimepath^=~/Dropbox/vim
source ~/Dropbox/vim/vimrc.vim
В Windows, вот так:
set runtimepath^=$HOME/My\ Documents/My\ Dropbox/vim
source $HOME\My Documents\My Dropbox\vim\vimrc.vim
И все!
(На самом деле, я также поместил vimrc
выше в свой Dropbox, так что я не Мне не нужно помнить их всякий раз, когда я настраиваю новый компьютер или переустанавливаю старый.)
Бесплатная версия Dropbox предоставит вам 30-дневную историю изменений, а платная - полную историю изменений. Обратите внимание: если вы работаете в Linux, проще всего использовать GNOME, для которого у Dropbox есть хороший клиент.
Если у вас есть небольшие изменения в конфигурации, которые вы хотели бы использовать на разных машинах, это удобно решение:
создайте небольшую функцию в каждом из ваших файлов .vimrc, чтобы возвращать тип системы, в которой вы находитесь:
fun! MySys()
return 'linux'
endfun
затем в глобальном файле vimrc.vim:
if MySys() == "linux"
set backupdir=./.backup,/tmp
set directory=./.backup,/tmp
elseif MySys() == "windows"
set backupdir=$HOME/AppData/Local/backup,$HOME/AppData/Local/tmp
set directory=$HOME/AppData/Local/backup,$HOME/AppData/Local/tmp
endif
Есть много облачных службы хранения и синхронизации, Dropbox - лишь один из примеров. Существуют службы с открытым исходным кодом, такие как http://sparkleshare.org/ и http://one.ubuntu.com , но вам рекомендуется поискать в Интернете решение, которое подойдет лучше всего вам нужно.
Я помещаю эти файлы в систему управления версиями, в частности Subversion, но неважно в какую. Это дает мне историю всех таких файлов конфигурации, и это просто вопрос проверки файла конфигурации, когда я хочу тот же самый на новой / другой машине или учетной записи пользователя.
Я храню копию моих точечных файлов в документации Google.
Используйте мерзавец. У меня есть .vim и. vimrc в репозитории git, и я разветвляю их для разных систем. Итак, у меня есть ветка для lappy, одна ветка для Debian, одна для RH и т. Д.
Я запускаю репозитории на все свои серверы и объединяю изменения по своему усмотрению. Тогда, когда я потеряю одного, подойдет любой из остальных. .vim / .vimrc - отличные примеры файлов, которые должны быть в DVCS.
Как уже говорили другие: используйте систему контроля версий.
Вот такой проект, который легко форкнуть и расширить: http://github.com/ryanb/dotfiles
Он работает не только с vim.rc, но и со всеми видами конфигурации и поставляется с установочным скриптом.