Vimm #2

プラグインって何?おいしいの?(kana)

  • 種類
    • global
      • 全体で有効な機能を提供
      • 起動時に自動ロード
    • filetype
      • emacsでいうとことのmajor mode
      • ft別機能の追加
    • compiler
      • quickfixで利用される
  • pluginの場所
    • <runtimepath>/plugin/{plugin}.vim
  • help
    • <runtimepath>/doc/{plugin}.txt
    • :helptags
  • Ex command
    • ex. narrow.vim
      • 指定範囲のみ表示
  • key mapping
    • あるキーシーケンスを別のキーシーケンスに変換する機能、あるいはその変換規則
    • ex. surround.vim
      • cs'"
      • ysi{(
        • ys→yってyankやんけ、ややこしい
        • nmap s <Plug>Ysurround
        • <Plug> プラグイン独自の機能を表す仮想のキーシーケンス
  • 関数
    • Exコマンドの羅列をまとめたもの
      • 値を返せる
      • 引数の受け渡しが楽
    • ex: smartchr
  • autocmd
    • ex.netrw
      • ネット越しのファイルを読み書き
  • 詳細は:help
    • で読めないプラグイン爆発しろ
    • ex.fuzzyfinder
    • ノウハウはヘルプにあんまり書いてないのでwebで
  • 左手を回転させて中指でEsc

-

はじめてのコンパイラプラグイン(id:maedana)

  • Skipのコミッタ
  • テキストを解析してその結果を決まったフォーマットで出力するものは全部コンパイラでいいんじゃないかな(vim的には)
  • Compiler plugin
    • 特定のテキストのコンパイルサイクルを効率よく回す
    • :makeprg、:errorformat
    • :compilerを使うことで上記二つのオプションを設定する
    • :compiler、:c[np]
  • デモ
    • Skipのspec
      • いちいちメッセージ読んでエラーの場所に飛ぶのが面倒
      • :compiler rspec
      • :make % → 現在のファイルをcompile
      • :clist → エラーリスト出る
  • 何が嬉しいか
    • シェルに切り替えとか行番号見るのとか面倒
    • Vimだけで完結できる!
  • 作り方
    • →第二部で
  • QuickFixについて
    • :he QuickFixCmdPre
    • :[vim]grepとかもあるよ
  • まとめ
    • 便利だから使うといいよ
    • なかったら作れや
    • 続きは:h
      • user_30
      • errorformat

rails.vim(ukstudio)

  • at rawhide
  • rails.vim
    • :Rails
    • :Rscript
    • :Rake
    • :Rserver
    • :Rlog(+tailminusf.vim+checktime)
  • :[RA][ESVT]
    • related/alternateなファイルを開く
    • ルール覚えられないのであんまり使わない
  • :Rmodel/controller/view {name}
    • tabで補完できる
  • abbr
  • RSpecに対応させてみた

-

Project.vim(yoshuki)

  • http://vimpi.net/ 運営
  • project.vimの流れ
    • :Project
    • \[Cc] → ウイザード出る(大文字だと再帰的)
    • Enterでひらく
    • \[Rr] → ツリー情報更新
    • \[sS] → 複数ファイルを同時に開く
    • \[Gg] → grep
    • <space> widen
  • 設定
    • CD cur dir
    • filter

all about metarw(ujihisa)

  • 前回の復習
    • ore portability
    • 小指の長さ
    • quickrun→べんり
    • key mapping
    • エディタはキーバインドが9割
      • FP(Finger point)
      • EP(Eye point)
    • GUIはフォントが9割
  • Metarw
    • Meta R/W
    • ファイルでないものをファイルであるかのように扱うプラグインを書くためのプラグイン
    • :e,:wを拡張する
    • Buf[Read|Write]Cmdをフック
    • metarw-git

-
-

君にも書けるvimプラグイン(kana)

  • Hello world
  • ファイル構成
    • doc/plugin.txt
    • plugin/plugin.vim
    • :he runtimepath
  • sket
  • 流れ
    • ドキュメントを書く
      • 何を作るか明確になる
      • :hで読める
      • フォーマット
      • *hello* → helloというタグがつく、:hで飛べる
        • |hello| → ハイパーリンク
        • ====== → 区切り
        • INTRODUCTION → 全部大文字だとタイトル
        • >\n (script) <\n → スクリプトのサンプル
        • 'command'
        • fun({argument})
        • 行頭に*hello.txt"\t(descr)
          • → :he local-additionsで一覧表示
    • プラグイン書く
      • 式に改行入れる場合→次の行の行頭に\
        • 「行継続さん」
        • コンパチオプションがあると使えなかったり
          • :he cpoptions
          • :set cpoptions&vim
            • グローバルなのでむやみに変えると困る
              • let s:cpoptions=&cpoptions
              • set cpoptions&vim
              • ...
              • let &cpoptions=s:cpoptions
      • include guard
      • ドキュメント指向
        • 最初にドキュメント書く
      • gitはミスを巻き戻してなかったことにできる
      • スコープ
        • a:argument
      • 可変引数
        • function hoge(...)
          • let args_count=a:0
          • let first_arg=a:1
          • let args_as_array=a:000
      • 動作確認
        • いちいちvim起動めんどう→:so
        • それはそれで面倒(変数や関数が定義されてるとか)
        • function!
      • 関数呼ぶとき
        • direct: call func()
        • in expression: func()
      • Ex command作る
        • command! Hello call Hello()
        • command! -nargs=* Hello call Hello(<args>)
          • →<args>が「そのまま」展開されてしまう
          • :Hello ujihisa → call Hello(ujihisa)
          • <q-args>というものがある
          • 省略すると空文字列が渡る
          • <bang>→!が展開される
          • とかいろいろ → :h user-commands
          • 引数補完メソッドの指定とか
      • Key mappings
        • <leader>: プラグインが提供するキーバインドは慣習としてこのキーで始める
          • :set mapleader
        • キーマップ法が大量にあって発狂
        • nnoremap <Plug>Hello call Hello()<Return>
        • nmap <leader>h <Plug>Hello
        • 間違って数字を前置して<leader>hするとその回数Helloしてしまう
          • nnoremap <Plug>Hello :<C-u>call Hello()<Return>
          • :he c_CTRL-U
      • autocmdの定義
        • autocmd BufEnter * call Hello()
        • autocmd <event> <buffer name> <command>
        • autocommand group
          • augroup MyAutoCmd
            • autocmd! //reloadable
            • autocmd ...
          • augroup END
        • :h autocommand
        • :he autocommand-events
      • そのた
        • :h eval
        • :h E121
        • autoload
        • filetype/syn/indent
        • 他言語
  • 質疑応答
    • 非同期どうするよ
      • MTは鬼門です
      • 別プロセスでなんかやらせてあとで使うとかなら
      • バックグラウンドのタスクが終了したらコールバックしたりとかは無理
    • 雛形どこにあるの

On Metarw(うじひさ)

  • vimrc
    • nnoremap ち a
    • cnoremap c- CTRL-
  • 余談
    • itpro challange
  • metarwでnowa
    • metarw#*#complete/read/Writeを実装する
    • タグが反映されない→ライブデバッグ
    • むずいことは外部コマンドに投げる
  • metarwでmixi
    • ライブ開発

-

vimrc解説(kana)

  • 戦闘力1285
  • " vim: foldmethod=marker
  • <ret>と;をいれかえてる
  • KeyboardLayoutコマンド
  • nnoremap <Plug>(physical-key-;) :
  • quickfix関係 q*
  • tab関係 <ctrl-t>*
    • タブに名前付けられるようにしてる
    • タブの位置移動
    • タブごとにCD設定可能(そういうスクリプトを書けば)
      • スコープt:
      • イベントTabEnter
  • 日付の挿入
  • <space>をどうにかする
    • 雑多なコマンド割り当て
    • hlsearchきりかえとか
  • nmap <ESC> <c-w>
    • ひー
    • 実際は端末の設定でopt-h ==> <esc>hになるようにしてる
  • ウィンドウを別のタブに持っていく
  • 質問:バッファを開きまくると番号が増える、どうにかならないのか
    • →ならない。「100くらいで気にしてちゃだめですよ」
    • fuzzyfinderさんはあまり好きじゃない
    • バッファ切り替えインターフェース自作