Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

設定群の大幅見直し

$
0
0

「カスタマイズの効くポメラが欲しい」という理由でdroidVimを導入して以降、複数デバイスでvimを使うようになり、その際に設定ファイル群のロードをかなり工夫していました。が、そもそも既に用意してあるプラグインのディレクトリを使わずにコントロールするやり方が気に食わず、もっとスマートにやる方法を探していたところ、「それ packaddで出来るよ」という感じでヘルプファイルに書いてあったので、「じゃあ試そうじゃないか」となったわけです。ついでに他の気になっていた部分も後学だ、ということで調整しています。

packadd #とは

引用元

:pa[ckadd][!] {name}

packpath中の任意のプラグインディレクトリを検索し、見つかったプラグインのファイルを読み込む。ディレクトリは以下にマッチしなければならない:

pack/*/opt/{name} ~

見つかったディレクトリは、もし含まれていなければ runtimepathに追加される。もしディレクトリ pack/*/opt/{name}/after が存在すれば、runtimepathの最後に追加される。
"pack/*/start" からのパッケージの読み込みがスキップされた場合、次のディレクトリが最初に検索される。

pack/*/start/{name} ~

今実現したい「デバイスを確認してプラグインを読み込まないための設定」で必要なことはこのあたりまででした。

というわけで、条件付きで読み込みたい自作のプラグイン1をすべて pack/myplug/opt/foo/plugin/foo.vimみたいな感じに移動しました。あとはプラグインディレクトリに条件をチェックして packaddでロードするスクリプトを置けば要件達成です…何だ簡単じゃねぇか。

autoload/packer_example.vim
scriptencoding utf-8function! packer#main() abort
    if exists('g:fooPath')packadd foo
    endifif exists('g:barExe')packadd bar
    endifendfunction

一例としてこんな感じになりました。ここで読むスクリプトのリマップのタイミングの為、autoloadを使っています。

colorschemeの行方

こだわりたいですよね、カラースキーム。最近はプラグイン管理スクリプトとgithubでさっくりとダウンロードして簡単に試せるいい時代ですが、そこからカスタマイズするとなると…あれ、何処に書くのがスマートそう?

いままで

パッケージ管理にvim-plugを使っているので、vim-plugでロードしたあとに読める場所、現環境では別ファイル化してあるのでそこに書いていました。そこからカスタムするとして、なんか長々と設定書くのがちょっと嫌だったんです。カラースキーム変えたときにもスクリプトの書き換え場所増えるし、ならカラースキーム変更したら後は勝手にカスタムした部分探してロードして欲しかったんです…素直にforkしたほうがいいんじゃねえかな?

お箸の国の人ですから

目的と手段がめちゃめちゃになり始めていますが、 autocmdautoloadを使ってカスタム部分だけを動的に読めそうだったのでその路線でいきます。手順としては、カラースキームロード後に autocmd ColorScheme *autocmdにあるカスタム部分をロード、この時に関数名を波括弧変数g:colors_nameを使って読んでもらいます。カスタムしてない場合もあるので、 try ~ catchを使ってなんとかしています。

customCD.vim
scriptencoding utf-8" カスタムしたカラースキームは $VIMFILES/autoload/ へ" トリガー引く用function!s:customCSLoader(name) abort
    trycall ccs_{a:name}#main()letmes= printf('Loaded ''%s'' custom script.',a:name)let isFound =1catch/E117/letmes= printf('No custom script for ''%s''.',a:name)let isFound =0finallyifv:vim_did_enter
            redrawechomsg'costomCSLoader: '.mesendifendtryreturn isFound
endfunction

augroup customColor
    autocmd!
    autocmd ColorScheme * calls:customCSLoader(g:colors_name)
augroup END

if!v:vim_did_enter
    calls:customCSLoader(g:colors_name)endif

v:vim_did_enterなんて変数があったんですね。今までvimrcに最初のスクリプト読み込み時だけ処理してほしい部分があったので、これで書き換えました。

結果

いや、自分で言うのも何なんですがちょっと…偏執的だと思うんです。


  1. 外部のプログラムに依存するものや、特定のディレクトリにファイルがあるけど、droidVimの場合クラウド同期して…という方法が現実的ではない、など理由は様々。 


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>