読者です 読者をやめる 読者になる 読者になる

ファイルタイプによって,個人的な設定をアレしたい時,どうしてますか?

tech vim settings

行ってきましたよ.american football.

「あ〜あぁ,とうとうやっちゃったのねー(痛」言われそうですが...もういー.その手のリアクション受け止める.ほんで,言う.

やっぱ行ってよかった.

american football を "emo" で括り集う方々と同じフィールドに立ちたくなく,その意味で "武士は食わねど高楊枝" 的に冷たく(笑)*1スルーしようかと思ってはいたのですが*2,意図とは別の雲から降りかかってくる消化しきれない恥を呑み込んで行った甲斐がありましたよう.
当初,前 2 つの birthmark と braidPA が聴くに堪えない程に醜くて,この調子で american football もかよ,と心配していたのですが,彼らだけは明らかに異なっていて,良かった.
通り過ぎてからの話ですが,逆に前の 2 つがあまりに可哀想だと思ったくらい.たぶん birthmark,braid の音響は箱のスタッフがやって,american football は彼ら自身が抱えている音響スタッフがやった,あるいはプリセットを持っていたんだろうな,と.*3

今晩の各バンドについて簡単に触れてみようか思ってたのですが... 多分止めておいた方が良いかなwww

いずれにせよ生きているうちに,まさか never meant の彼らオリジナルの演奏を,しかも日本に居ながらにして聴ける機会があるとは微塵も思わなかった*4

これ never meant が始まった時.ぼんやりしてるけどw

と言う事で翻って,vim なのですが.再び(笑

マシンや os のリプレイス、または自分のいつもの "でない" 作業環境下で,ファイルタイププラグインの設定はやっぱり自分のが欲しい、ってな時とかって、どうしてますか?

というお話。

そんなケースにおいては,自分の場合,以下の様な運用法を採る事に落ち着きました.

自分用のファイルタイププラグイン設定のセットを格納した after/ftplugin/ を用意し
必要に応じ,自分のランタイムディレクトリへ配置する.

なお,標準プラグイン,つまり $VIMRUNTIME/ftplugin/ は原則イジらない.

これで《標準プラグインを使いつつ》,それをベースに自分が必要な分だけ追加および変更して使う,と言う事になるかと.

またここでの "自分のランタイムディレクトリ" というのは,自分の場合,プライベートで使っている macosx ならば ~/.vim/,オフィスで宛がわれている pc の win7 ならば %USERPROFILE%\vimfiles\ と言った感じになるかと.
勿論,これは使い方や環境により異なる事もありますが.

と言う事でして、今回はファイルタイププラグイン filetype-plugins の話でもあるのですかね.*5

ちなみに,after および ftplugin というディレクトリの名前,そして {ファイル形式}.vim と言うファイル名の付け方はお作法として言われた通りにそのまま倣うもの.作業者任意で違うのを考えて付けたりするようなものではないと思います.
このあたりは :h ftplugin-name でも確認できるのではないかと思います.

さて.
今回の作業の中で色々参考にさせていただいた中で,内容的に親和性のあった以下 2 つのリンクをここで挙げておきます*6.大変助けられました.;

» Vim Filetype pluginを極める - while (“im automaton”)
» のびーの食っちゃね~だらだらな日々.食っちゃ寝生活してても意外と平気だったりする. : Vim 標準の ftplugin に独自の設定を追加するなど.
以下はほぼ,これらの焼き増しに近い感じになるかと,で上述 2 つのエントリーで理解できたら,もう読まなくてもいいかも(笑.

先ずは,先に記載した手続きの中で気になった,気づいたことを,ちょっと具体的に追加メモしておこうと思います.

{自分のランタイムディレクトリ}/after/ftplugin/ はどこに?

見つけ方は,ここではこう.;

  1. :set runtimepath 叩く.
  2. 出力されたパスから,一番最初にあるパスを確認.
  3. このディレクトリ "直下" に after ディレクトリ,そして更にその中に ftplugin ディレクトリという構成.

...は,あります?(笑)

"自分のランタイムディレクトリ" は :set runtimepath の一番最初?

自分で独自のfiletype pluginを作成・使用する場合,'runtimepath'に記述されている最初のディレクトリ下のftplugin/ディレクトリに **略** .場合によってはftplugin/ではなくafter/ftplugin/下にコピーする **略**

ヘルプに目を通してみますと,おそらく ":set runtimepath の結果の 1 番最初" と言う解釈で良いかも,と思っています.

ヘルプ上でも明快にそれを述べた記載は見当たりませんでしたが...

根拠はここら辺りの記述です.;

1.自分のランタイムディレクトリを作成する.Unix なら普通は "~/.vim" です.そのディレクトリの中に "ftplugin" ディレクトリを作成します:

    mkdir ~/.vim
    mkdir ~/.vim/ftplugin

Unix 以外のシステムでは,'runtimepath' オプションを見て,"ftplugin" ディレクトリが検索される場所を確認してください: >

    set runtimepath

普通は最初のディレクトリ (最初のカンマの前) を使います.

上述引用の《'runtimepath' オプションを見て》,つまりこれは :set runtimepath で,と言う事だと思うのですが,《普通は最初のディレクトリ (最初のカンマの前)を使》う,と言う箇所でしょうか.
ちょっと都合の良いトコ取りしすぎかもしれませんが.

あと,:h runtimepath の記述もヒントになるかと.
でも,この順番が意味あるものなのか分からないので,根拠にして良いかは自信ありません.

と言う事で after があるべき場所は?

自分のランタイムディレクトリ》,の直下,で良いのではないでしょうか.

こちらの根拠は,先のランタイムディレクトリは,ふつう :set runtimepath の一番最初のディレクトリを使う,という議論の流れを踏まえた上で,この辺りでしょうか.;

標準プラグインを使いつつ,その設定を一つだけ変更したいという場合は,スクリプトの中で設定を変更することができます:

    setlocal textwidth=70

このファイルを "after" ディレクトリに保存すると,(例えば filetype=vim なら) 標準配布の "vim.vim" が読み込まれた後に,保存したファイルが読み込まれるようになります.Unix ならファイルのパスは "~/.vim/after/ftplugin/vim.vim" です.

afterafter/ftplugin? そんなディレクトリ無い場合もある

今回の作業でビクビクしたのがこの点.

環境によっては after および after/ftplugin が存在しないケースもあります.そんなケースでは,自分で作ってしまって良い,様子.

これも先に取り上げた引用先,:h your-runtime-dir の 1 の手続きを見ると,おそらくそれで良いのかな,と.

after とは?

一応これもメモっときます.

これは,なぜ after なのか,と言うポイントへと繋がる事になると思います.

まず after とは.
既に在る,つまり vim 標準配布の《設定を上書きしたり,それに追加設定をしたりできるようにする》用途をもって使用する場所.

さらにふーんと思ったのが,《ユーザーのホームディレクトリ内》で捌く事が想定されている,と言った点.
システム共通のVimディレクトリ内のディレクトリ "after"》は,《滅多に使われない》と記載されている.

と言う事で,作業対象となる場所は,$VIMRUNTIME/ftplugin/ ではなく...

ホームディレクトリのランタイムディレクトリに after を,で良い

と言う事に納得,ひと安心.

表現をファイルタイププラグインにグッと寄せて言及するならば,こちらのこんな表現がフレンドリーでスッと入ってくるのではないでしょうか.;

・標準 (全ユーザー共通の設定) の設定を全てなかったことにして一から設定したい
 ->~/vimfiles/ftplugin
・標準の設定をベースに自分用のカスタマイズを追加したい
 ->~/vimfiles/after/ftplugin
:
: **略**
:
今回のケースの場合,「今までの設定に不満はないけど一部の設定 (タブ) は変更 (追加) したい」ので,「~/vimfiles/after/ftplugin」に「javascript.vim」を置けば OK ということになります.

そう,これが今回やりたかったこと.

ちなみに,ヘルプだと,と言う事で合わせて:h after-directory の 5 項 とか,:h ftplugin-overrule の 項目 3 あたりを挙げておきたいと思います.

さらにもう一歩踏み込んで,$VIMRUNTIME/ftplugin/ ではなく...

どうして ~/.vim/after/ による運用を選択したか,したかったか

それは,ソフトウェア側が提供してくれる《標準のファイルタイププラグインの設定》,それは $VIMRUNTIME/ftplugin/ にあるものなのですが,には一切触れることはしたくなかった.と言うところにあります.

そしてもうひとつ,ここが今回の作業における最大の動機づけだったりするのですが,
vim 自体は勿論,マシンや os のリプレイスがあっても,自分の施したファイルタイププラグインの設定を毎度確実に,尚且つお手軽に(笑)に再現できるようにしたい,と.

こんな思いが背景にあったりしたわけです.

ちょっと上手く伝えきれていない不安もあるのですが,"これまではどうしてきたか..." を対比させてお話しすると少しは分かりやすくなるでしょうか.

これまでは,こんなやり方をしてました.

os のリププレイス,更には作業環境が変わる*7度に,$VIMRUNTIME/ftplugin/ を掘り,設定が必要な分だけのファイルタイプの vim ファイルを開き設定,そして動作確認を繰り返す.んな感じだったのです.

そんな事 "ごくたまに" のものだからいいじゃないか,と言う考え方もご尤もでありましょうが,そう頻度がない分,細部を忘れたり,設定抜けのため繰り返す対処等で,かえってストレスフルだったりするわけです.

その為にどっかに作業内容やチェックリストのメモを用意しておき,それを参照すれば...なんてのは自分的に論外ですし,
勿論,当然,自分用の $VIMRUNTIME/ftplugin/ のデータを別途抱えて,それをハンドリングすれば,と言うのもチラリと想像してみたのですが,これはこれで「もしソフトウェア側での変更があったら?」を考えると決してスマートじゃないと.

~/.vim/after/ftplugin/ でやるようにして良かったと思う事

  • 《[標準のファイルタイププラグインの設定][22]》には一切触れることないので,安全安心.
  • 自分の設定の為にイジルのは,あくまで個人用なので,ちょっとした自分勝手な冒険,試みも心おきなく.これまた安心.
  • 自分のランタイムディレクトリに,個人用 /after/ftplugin/ を被せれば良い,と言うお手軽さ.
  • さらには,ここが個人的に一番スッキリなポイントで,例え vim 側で $VIMRUNTIME/ftplugin/ に更新,変更があったとしても,その変化に対しても上手に付き合える.

と言う事で,ファイルタイププラグインの個人的な設定については,自分好みのファイルタイププラグイン設定を格納した after/ftplugin/ を持ち運べば良い,となるのではないでしょうか?

例えば,github とか bitbucket 等で after/ftplugin/ を管理するなんてのは良いかもしれません.
os やマシンの新調,リプレイス等があったら,それを clone して ~/.vim/ に放り込んでやれば良い,と言う運用は悪くないかも.

結構,無駄に長くなったかもしれませんね...
ちょっとさすがに疲れました.*8

と言う事で,おしまいです.

*1:それもそれで痛いんですけどね(笑

*2:emo ですよ?www 個人的には確かに時代はそうだったろうけど,それはあまりにアタマワルスギる花畑思考回路だと思っているのですが.ちなみに "emo" というワードにシンパシーをもって,火に入る夏的な虫系の方々とは,まず歩みy ry

*3:実際は分からないけど,それくらい酷く醜かった.

*4:never meant なんかメインの帯でやらずに引っ込んだんですよ.サドプレイなのか知らんが,その演出に思わず失笑.まぁ客側も分かっていて,彼ら自身はその "一周回って" 感をもてあそんでいたんだろうけど....だと思いたいwww まさか天然本気でやry

*5:ちなみに,ファイルタイププラグインとは何ぞや,についての詳細は割愛させてください.いくらあっても足りない(笑).
ちなみに,"ファイルタイプ" は,日常的に "テキスト形式" とか "csv 形式" 等と呼び合っている,ソレ."拡張子" とか言う捉え方にもほぼ等しいかと.
そして "ファイルタイププラグイン"とは,そのファイルタイプ毎にもつ色んな設定,例えばタブの幅とかシンタックスカラーとかの設定を管理する仕組みのようなもの.
これ以上はごめんなさい.一応ヘルプにも、とは言っても一度に全部目を通すのはちょいとアレですが(笑)、がっちり書いておりますので.
ファイルタイプは :h filetype,ファイルタイププラグイン:h filetype-plugins 辺りを.

*6:勿論今回触れようと思っている事は,ヘルプにもキチンと書かれていて,それを読めば,と言うのが筋なのでしょうが,その記載は色々と別々の箇所に散らばっていて結構大変だったりしたので,挙げておく事にしました.

*7:私事ですが,実際最近異動がありまして.そんな中で出遭う様々なトラップが,今回の作業の切っ掛けのひとつだったりもするのです.

*8:変な事書いてなければいいけど...