タグ

ブックマーク / whileimautomaton.net (3)

  • Vim: オプションのグローバルな値とローカルな値 - while (“im automaton”);

    つまり、ローカルな値を設定するときは:setlocalを使うべきです。そうしないと新たなバッファやウィンドウを開いたときに予期しない値が設定されることになります 例えば特定のバッファのタブ幅を変えようとしてset tabstop=20とした場合、新たなバッファを開いたときのタブ幅のデフォルトは20になります。これでは元に戻すためにset tabstop&としなければなりません。実際、私がVimを使い始めた頃はこの挙動でかなり混乱させられました。自分でインタラクティブに設定した分には許せるのですが、プラグイン等で似たようなことをされるとかなりアレです。 なお、ローカルな値を持つオプションの一部には「普段はグローバルなオプションとして振舞う。ローカルな値が設定されればそちらを使う」という派生系が存在します(:help global-local参照。ヘルプには「global or local t

    mainyaa
    mainyaa 2011/05/22
  • Vim: Filetype pluginを極める - while (“im automaton”);

    なにかと誤解が非常に多いVimのfiletype pluginについての解説。VimM#2でfiletype pluginについてスルーしたのは、以下の分量から察してください。 概要 Vimはバッファ毎にその内容の種類、例えばPerl/Python/Rubyスクリプトといった情報が保持されており、それは'filetype'というオプションで表される。Filetype pluginとは'filetype'に応じた機能を提供するためのスクリプトである。その性質上、提供される機能はバッファローカルである。 Vimは標準で多数のfiletype pluginが同梱されている。どのようなものがあるかはVim内で:edit $VIMRUNTIME/ftplugin/を実行してみれば分かる。:help ft-filetype-pluginで'filetype'に対するfiletype pluginのドキ

    mainyaa
    mainyaa 2011/05/22
  • Vim: flydiff 0.0 - 2008-06 - while ("im automaton");

    Vimの関数呼び出しでは場合によって<SID>とs:を使い分けする必要があるが、実はどのケースであっても<SID>を使えば動くには動く。ただ<SID>というプレフィックスはs:に比べて見辛いため、できればs:を使いたい。ではどの場合にどちらを使うべきか。答えは以下の通り: s: :autocmd、:command、:function/:endfunctionの中で使う(推奨 - <SID>でも動くには動く)。 <SID> :map系か:menu系コマンドの中でのみ使う(必須 - s:では動かない)。 Vimのカスタマイズに手を出し始めた頃は何故このような使い分けが必要なのか分からなかったが、今、この記事を書いていて思い付いた。:map及び:menuの定義時に与えられた{rhs}だけでは、その中に出現するs:の意味・用途を正確に判定することができないからだ。例えば以下のような定義があったとし

  • 1