Vim - 双重包容卫士

时间:2015-02-04 15:49:45

标签: vim

我希望能够重复输入我的~/.vimrc.local文件(我使用sp13-vim发行版),但是我在该文件的部分收到错误消息我有Bundle/UnBundle个陈述。如何防止该部分被双重执行。

也就是说,如何在Vimscript中编写以下内容?:

if guard_global_not_defined
   define_guard_global
   do stuff
endif

2 个答案:

答案 0 :(得分:3)

规范结构是

if !exists('g:didBundle')
    let g:didBundle = 1
    Bundle ...
    ...
endif

由于捆绑包是全局范围的,g:前缀使其成为全局守护者。您可以对其他范围执行相同的操作(例如,b:用于缓冲区本地内容。)

答案 1 :(得分:1)

我正在使用的local_vimrc文件包含以下类型的包含警示:https://github.com/LucHermitte/Rasende/blob/master/_vimrc_local.vim

我使用的最新templates有点不同(它们旨在支持需​​要在本地设置之前设置global definitions的项目(如项目名称,在哪里可以找到)源,构建配置及其相关的构建目录)和本地调整。)

展开后,结果如下(你当然不需要一切):

let s:k_version = 42
" Always loaded {{{1
" Buffer-local Definitions {{{1
" Avoid local reinclusion {{{2
if &cp || (exists("b:loaded_tests_lh_vimrc_local")
      \ && (b:loaded_tests_lh_vimrc_local >= s:k_version)
      \ && !exists('g:force_reload_tests_lh_vimrc_local'))
  finish
endif
let b:loaded_tests_lh_vimrc_local = s:k_version
let s:cpo_save=&cpo
set cpo&vim

" ======================[ Project config {{{2
if ! (exists("g:loaded_tests_lh_vimrc_local")
      \ && (g:loaded_tests_lh_vimrc_local >= s:k_version)
      \ && !exists('g:force_reload_tests_lh_vimrc_local'))
  source <sfile>:p:h/_vimrc_local_global_defs.vim
endif


" ======================[ Local settings {{{2
.... <- here go your local settings

"--------------------------------------------------------------------
" Global Definitions {{{1
" Avoid global reinclusion {{{2
if &cp ||  (exists("g:loaded_tests_lh_vimrc_local")
      \ && (g:loaded_tests_lh_vimrc_local >= s:k_version)
      \ && !exists('g:force_reload_tests_lh_vimrc_local'))
  finish
endif
let g:loaded_tests_lh_vimrc_local = s:k_version

" ======================[ Functions {{{2
.... <- here go some more global stuff like functions

" }}}1
"--------------------------------------------------------------------
let &cpo=s:cpo_save
"====================================================================
" vim600: set fdm=marker:

PS:我发现你的$ HOME目录中有一个local_vimrc很奇怪。它们应该是项目树的根源。而且它们不会被插件管理器加载,而是由local-vimrc插件加载。