【发布时间】:2011-08-07 14:00:56
【问题描述】:
在.vimrc 中,是否可以仅在配色方案存在时才加载它?
【问题讨论】:
标签: vim color-scheme
在.vimrc 中,是否可以仅在配色方案存在时才加载它?
【问题讨论】:
标签: vim color-scheme
您可以使用filereadable 函数来检查颜色方案(例如schemename)是否存在:在~/vimfiles/colors 下检查一次(Win32,Unix 使用~/.vim/colors/)和$VIMRUNTIME/colors/ 下检查一次:
if filereadable("/path/to/schemename.vim")
colo schemename
endif
【讨论】:
@eckes 答案的替代方法是尝试加载颜色方案并在错误不存在时处理错误:
try
colorscheme mayormaynotexist
catch /^Vim\%((\a\+)\)\=:E185/
" deal with it
endtry
【讨论】:
try-catch!
/^E185:/
:help catch 中的示例,因为我认为这将是确切的错误格式。
在 try-catch 中使用:colorscheme 作为Randy has done 可能就足够了,如果您只想加载它(如果存在)并执行其他操作。如果您对 else 部分不感兴趣,一个简单的:silent! colorscheme 就足够了。
否则,globpath() 是要走的路。然后,如果您真的愿意,可以检查使用 filereadable() 返回的每个路径。
" {rtp}/autoload/has.vim
function! has#colorscheme(name) abort
let pat = 'colors/'.a:name.'.vim'
return !empty(globpath(&rtp, pat))
endfunction
" .vimrc
if has#colorscheme('desert')
...
编辑:filereadable($HOME.'/.vim/colors/'.name.'.vim') 可能看起来很简单,而且绝对有吸引力,但如果我们正在寻找的配色方案在其他地方,这还不够。通常,如果它已通过插件管理器安装在另一个目录中。在这种情况下,唯一可靠的方法是签入 vim 'runtimepath'(又名'rtp')。因此globpath()。请注意,:colorscheme name 命令在 {rtp}/colors/{name}.vim 中搜索。
【讨论】:
:silent! colorscheme foo 非常适合我的需要,谢谢。
let。否则,我会收到 pat 不是 vim 命令的错误消息。
我的方法类似,
if filereadable( expand("$HOME/.vim/colors/railscast.vim") )
colorscheme railscast
endif
这比硬编码整个路径要强大一些。
【讨论】:
通常,如果我的最爱不可用,我会使用最喜欢的 colorscheme 和备用。嵌套的try 将使这项工作:
try
colorscheme solarized
catch
try
colorscheme peachpuff
catch
endtry
endtry
如果colorscheme 都不可用,则加载默认的(无论您的系统上发生了什么)。如果其中一种或两种颜色方案不可用,则不会显示错误。把你喜欢的colorscheme放在第一位。
此外,不带参数的catch 会捕获任何错误。如果您要处理提供不同错误消息的不同语言环境,这会很方便。
【讨论】:
这是我的 .vimrc 文件中的 wat。
if filereadable( expand("$HOME/.vim/colors/sublimemonokai.vim") )
colorscheme sublimemonokai "https://github.com/ErichDonGubler/vim-sublime-monokai
" vim-sublime-monokai only support 256 colours in terminal. If you are using a terminal which support truecolor like iterm2, enable the GUI color
set termguicolors
" Otherwise, use below setting to activate the 256 color in terminal
set t_Co=256
else
echom "The sublimemonokai.vim were not found to be used as colorscheme. elflord will be set for the timebeing..."
colorscheme elflord
endif
基本上它会检查我喜欢的配色方案是否存在于机器上。如果是这样,它将选择它并应用它所需的所有设置。否则,它会选择 vim 附带的合适的配色方案。
通过查看其他答案,我的答案与@user427390 答案共享位部分,并且它具有额外的 else 条件。
以下链接在编写我自己的 .vimrc 和 vim 相关文件的脚本方面帮助了我很多:
http://learnvimscriptthehardway.stevelosh.com/
【讨论】: