* Vim Beginner++ by id:Hash - vimの出会い - 初心者を脱するにはどうすれば良いのか ** ヘルプの読み方 - F1 or :help -- C-] C-t - :help (topic) -- :help syn(C-d) - キーの動作を知りたいとき -- :help C-r ** 文字を数える - ビジュアルモードで範囲を選択 -- :'<,'>s/./&/g -- :'<,'>s/foo/&_bar/g ** 複数ファイルを編集する - 複数のバッファで編集する - 画面を分割する -- :split target -- C-w C-w で別のファイル ** 単語補完 - インサートモード -- C-n, C-p - 辞書補完 -- C-x C-k -- autocomplpop.vim ** カーソル位置の検索 - #, * - ファイルから検索する -- :grep ./* ** 同じ操作を繰り返す - 単純に前の操作を繰り返す -- . - インデントを下げる -- << ** vimからコマンド実行 - 外部プログラム -- :!ls -- :!ruby % # %はカレントファイル名 - 範囲部分をコマンドに渡して処理する -- :'<,'>!sort ** キーマップ - map -- :map :!ruby % -- :imap () () - 普段は .vimrc へ書く ** レジスタ - クリップボードみたいなもの ** 質疑 - 文字をでかくする -- Quick Silver - ブログをどうやって更新するか -- vimから直接ではなく、テキストを書いて、ブラウザに貼り付ける - 初心者は挫折しますが -- やらざるを得ない状況だったので! -- 最初は気持ち悪かった -- 繰り返しができるところが便利 * ライブラリスクリプトを利用したvimエディタプラグインの構築 by id:taku-o ** ライブラリスクリプトとは - vimエディタの読み込み ** 使い方 - runtimepathディレクトリのautoload以下にvimスクリプトを置く - autoloadに置いたスクリプトで、一定の命名規則に従ってファンクションや変数を定義 - ヘルプを読むべし -- :help write-library-autoload ** ライブラリの用に使われているスクリプト - cecutil - genutils - multvals.vim - Align - alice.vim ** 今回使うのは - tlib, id:1863 - ウィンドウを分割し、動作する系統のプラグインを作れるライブラリ ** 作り方 let world = tlib#World#New() ** 書き方 - worldはディクショナリ形 -- scratch: スクラッチ名 -- scratch_vertical: 経て分割をするか -- key_handlers: キーバインド -- base: - 隣のウィンドウに対して操作する -- SwitchWindow -- execute l:sb ** 使い方が分からない - tlibのドキュメントを読む -- 半分くらいしか書かれてない :-( - 既にあるプラグインのソースを読む -- 既にプラグインがある ** 質疑 - cpoコマンドを待避する理由は? -- 私も分からない -- :help usr_41 * 私はなぜ10年間vimを使い続けるのか by @mootoh ** 行番号を表示できるから - Emacsだとwb-line-number.el ** vimのソースを読む - コア - 共通ユーティリティ - 文字コード - プラットフォーム固有 - GUI - UIの抽象化 - 外部インターフェース - wc *.[ch] -> 373,000 ** おもしろのは - structs.h - normal.c - edit.c - ex_*.c - Sun Visula Workshopにも対応している ** 感想 - 追いやすい -- Just Single Directory -- 主要なコードに適切なコメント -- ex) undo.c - たまに変なものが -- misc1.c, misc2.c ** aコマンドを読んでみる - GDBでattach -- CFLAGS='-O0 -g' -- gdb Vim `ps xa | grep '/Applications/Vim' | cut -f 1 -d ' '` - 怪しいところに b - さわりだけ - b normal.c:8692 ** nv_edit - normal.c:8692 - カーソルを進めて invoke_edit() ** invoke_edit - normal.c:8792 - なんかしたあと edit() ** そもそも - キーとコマンドの対応はどこで? - backtraceしてみる - normal.c:220にコマンドテーブル ** まとめ - vimのソースコードは追いやすい - aの実装方法を読んでみた - undoを読んでる途中で…… ** 質疑 - undoはすごい -- ブランチができる * Vim :Emac @suztomo ** なぜEmacsへ乗り換えたのか - 最初は秀丸エディタ -- Perlを書いていた - PHPエディタ -- PHPを書き始めた - aptana -- PHPエディタは使えない :-D -- すごいらしい - vim -- 1年前に乗り換えた - Flex Builder - Emacs -- 4月にハチロク合宿 -- Emacs縛りをして覚えた ** カーソル移動に関して - カーソル移動 -- hjkl - Esc押すの? -- C-[ ** So I've been in love with Vim - mayu (窓使いの憂鬱) -- CapsLock is replaced by Ctrl -- All cursor control are done by Ctrl-h,j,k,l - おすすめソフト! -- おさかなラボより -- 「変態キーバインド」 ** By the way, I start to use Emacs (&Mac) spring 2008 - 結構便利なキーバインド - Ctrl-n,b,f,p は慣れると良い! - Macにはmayuみたいなソフトが無い -- けどデフォルトでEmacsバインドが使える! - 色々使えるよ! -- shell (zsh): bindkey -e -- Blower: Safari, Firefox 3.0, especially Twittre, Gmail -- Eclipse family: Aptana, Flex Builder -- Xcode, Keynote (and other Cocoa App) ** Demo - id:dropdb's profile ** 所々では使えない? - PukiWiki - Firefox 3.0 - ~/Library/KeyBindings/DefautlKeyBinding.dict -- But this is for Cocoa Apps - KeyRemap4MacBook -- Cannot customize absolutely ** 結論 - vimバインドが好きな人 -- Windows使いならmayu - MacでEmacs使い -- デフォルトで使える ** Omake - iPhone OS Programming - Objective-C - TopCoder - Skype 86 chat * ujm: Uji IMproved by id:ujihisa ** 自己紹介 - 大阪で不定期に勉強会 - vimの話を書きながら修論書いてる - viを中2で始めた - Ruby, Haskell - Rubyで快適に連投する11の方法 - Goobye colon - Goobye ctrl ** キーバインド - キーバインド以外の存在は誤差の範囲内 - 1日10時間コードを書くでしょ! ** 俺ポータビリティ - デフォルト環境のまま - 最小限の変更で最大限の効果 - 必要に応じてその場で変更する ** KeyRemap4MacBook - :と;を入れ替え - Linuxならxmodmap - Winならmayuで - ;をShift-:にする ** 保存 - :w -- 右手小指脂肪 - 自動保存 -- 個人的に嫌 - w -- nmap w :write ** 左手小指の長さ - 薬指第一関節より -- 短い: vim向き -- 長い: Emacsでも良いんじゃない? - Ctrlを押すために -- ホームポジションを忘れる - jとかsjでいいよね - とかjでいいよね - カーソルキー許容 ** Quickrun - by ujihisa (Sixeight, kana1) - quickrun.vim - rで速実行 ** Git-vim.vim - vimの中からgitを操作する -- ga git-add -- gd git-diff -- gc git-commit -- gl git-log ** 上達するには? - vimの凄い人に - 関西vim四天王 (弱い順) -- id:secondlife -- @yanbe -- id:motemen -- id:ns9tks --- autocomplpop --- fuzzyfinder -- @kana1 (神) - http://lingr.vim-users.jp/ -- 毎日通うとよい ** 質疑 ないらしい * Vimスクリプトマスターへの道(?) (BrainF*ck実装編) by id:kei-os2007 ** 自己紹介 - id:kei-os2007 - 組み込みの開発 - C, Verilog - vim歴6年くらい ** vimと私 - “ロク”ってなんですか? -- viをローマ数字と思った - なにか足りてない -- vimスクリプトを書いたことがない ** 言語の始め - Brainf*ckだ! -- 実用性は低いが、チューリング完全 -- 理論上はC言語などと同じ - Hello, worldを読んでみる -- 難解すぎる>< - 言語仕様 -- ポインタとか出てくると安心する - Brainf*ckをvimスクリプトで実装してみた -- http://d.hatena.ne.jp/kei-os2007/20080719 ** bf.vimを読んでみる - vimスクリプト構文をみる - 関数 -- function hoge(arg1, arg2, ..) -- a:でスコープを制限できる -- !で上書きできる -- s:hogeでスコープ制限できる -- range -- returnで変数を返す - 変数のスコープ -- g: グローバル -- w: ウィンドウローカル -- t: タブローカル -- v: グローバル (vim変数) - 実装 -- インストラクションポイント (s:ip) を操作する - vimスクリプトマスターへの道 ** 質疑 - おすすめのvimperatorの拡張は? -- クイックヒント -> #f -- 画面の分割との連携 (Split Browser) * vimrc晒し ** id:Hash - inoremap () () - inoremap [] [] - inoremap {} {} - inoremap <> <> - inoremap "" "" - inoremap '' '' -- 括弧を入力したときに、カーソルを真ん中へ -- like Eclipse - inoremap - inoremap - inoremap - inoremap -- インサートモードでも移動できるように - set iminsert=1 -- 日本語入力中でもEscでノーマルモードへ戻れる -- GUI版じゃないと無理らしい