Vim -- 双包护卫
Vim -- Double Inclusion Guard
我希望能够重复内源我的 ~/.vimrc.local
文件(我使用的是 sp13-vim
发行版),但是当我有Bundle/UnBundle
语句。如何防止该部分被双重执行。
也就是我在Vimscript中如何写下面的内容?:
if guard_global_not_defined
define_guard_global
do stuff
endif
我正在使用的 local_vimrc 文件具有以下类型的包含保护:https://github.com/LucHermitte/Rasende/blob/master/_vimrc_local.vim
最新的 templates I'm using are a little bit different (they are meant to support projects having 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 插件加载。
规范结构是
if !exists('g:didBundle')
let g:didBundle = 1
Bundle ...
...
endif
由于包是全局范围的,g:
前缀使其成为全局守卫。您可以对其他范围执行相同的操作(例如 b:
用于缓冲区本地内容)。
我希望能够重复内源我的 ~/.vimrc.local
文件(我使用的是 sp13-vim
发行版),但是当我有Bundle/UnBundle
语句。如何防止该部分被双重执行。
也就是我在Vimscript中如何写下面的内容?:
if guard_global_not_defined
define_guard_global
do stuff
endif
我正在使用的 local_vimrc 文件具有以下类型的包含保护:https://github.com/LucHermitte/Rasende/blob/master/_vimrc_local.vim
最新的 templates I'm using are a little bit different (they are meant to support projects having 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 插件加载。
规范结构是
if !exists('g:didBundle')
let g:didBundle = 1
Bundle ...
...
endif
由于包是全局范围的,g:
前缀使其成为全局守卫。您可以对其他范围执行相同的操作(例如 b:
用于缓冲区本地内容)。