web-dev-qa-db-ja.com

.vimrcで、配色の存在を確認するにはどうすればよいですか?

.vimrc、配色が存在する場合にのみそれをロードすることは可能ですか?

49
ClosureCowboy

try-catch:colorschemeRandyが行った として使用するだけで、それが存在する場合にそれをロードしたい場合は十分かもしれません。それ以外のことをします。 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を検索することに注意してください。

46
Luc Hermitte

@eckesの回答の代わりに、カラースキームをロードして、エラーが存在しない場合はエラーに対処することもできます。

try
    colorscheme mayormaynotexist
catch /^Vim\%((\a\+)\)\=:E185/
    " deal with it
endtry
31
Randy Morris

filereadable 関数を使用して、配色(schemenameなど)が存在するかどうかを確認できます。~/vimfiles/colorsで1回確認します(Win32、Unixの場合は~/.vim/colors/)および$VIMRUNTIME/colors/の下に1回:

if filereadable("/path/to/schemename.vim")
  colo schemename
endif
8
eckes

私の方法は似ています、

if filereadable( expand("$HOME/.vim/colors/railscast.vim") )
    colorscheme railscast
endif

これは、パス全体をハードコーディングするよりも少し堅牢です。

7
user427390

これは、.vimrcファイルにあるワットです。

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/

1

通常、お気に入りが利用できない場合は、フォールバックを使用してお気に入りのcolorschemeを使用します。ネストされたtryは、これを機能させます。

try 
  colorscheme solarized
  catch
  try 
    colorscheme peachpuff
    catch
  endtry
endtry

どちらのcolorschemeも使用できない場合は、デフォルトのものがロードされます(システム上にあるものは何でも)。カラースキームの一方または両方が使用できない場合、エラーは表示されません。好みのcolorschemeを最初に置きます。

また、引数のないcatchは、エラーをキャッチします。これは、さまざまなエラーメッセージを表示するさまざまなロケールを扱っている場合に便利です。

1
jebidiam