unite.vimでバン(⊃`・ω・)バンする
といってもこのアニメーションのことではなく、
実際にVimを使ってる人間がuniteバッファでバンバンします。
え、uniteはフォーカス外れちゃうからバンで終わっちゃう?
今はバンバンできるんです。そう、-keep-focusオプションを使えばね。
使い方はいたって簡単。
-no-quitと一緒に-keep-focusオプションをつけてuniteを実行するだけです。
:Unite adb -no-quit -keep-focus
このunite-adbでバンバンすると、USB接続したAndroidの
- ブラウザを開いたり
- メニュー画面を開いたり
- 設定画面を開いたり
- 電話をかけたり
- 電話を取ったり
- 上、上、下、下、左、右、左、右、Back、Airplane
(実際には航空機モードの設定画面を開くだけ)
などの操作をuniteバッファから離れることなく、連続して実行することができます。
需要があるかどうかはわかりませんが、自分にとってはとっても便利です。
※こんなこと書くとケータイ触るのにもVimが必要な廃人かと思われてしまいそうですが
決してそんなことはありません
TokyoVim#7に行ってきた
TokyoVim#7に行ってきました。
例によって今回もひたすらもくもく。
基本的に外に持ち出すときはAndroidのVimなんですが、最近vimrcがPCのVimと
同期できていなかったので両方の環境で使えるように修正しました。
主な修正ポイントはプラグインの読み込み。
読み込み自体はNeoBundle使えば良いんですが、
ということで次のようにしてみました。
if s:Android let $GITHUB_COM = 'git://207.97.227.239/' else let $GITHUB_COM = 'git://github.com/' endif command! -nargs=* MyNeoBundle call MyNeoBundle(<q-args>) function! MyNeoBundle(args) let args = split(a:args) if len(args) < 1 return endif if eval(args[0]) execute 'NeoBundle ' . join(args[1:]) endif endfunction MyNeoBundle !s:Android $GITHUB_COM.'Rip-Rip/clang_complete.git' MyNeoBundle !s:Android $GITHUB_COM.'osyo-manga/neocomplcache-clang_complete.git'
う~ん、またvimrcのカオス値が上がってしまった。。。
Yokohama.vim #3に行ってきた
今日はYokohama.vim #3に行ってきました。
thincaさんの「quickrun.vim の詳解」や
guyonさんの「vi(m)を教える仕事をした話」といった
大変興味深い発表を聞くことができました。
ただquickrunの仕組みは聞くだけじゃなくって
実際にモジュールなりを作ってみないと理解できそうにないかも・・・
それよりも気になったのがプレゼンに使ってたVim。
showtimeという今回のために作ったプラグインらしく、
なんと懇親会中にgithubで公開していただきました。
そして公開された瞬間、全員がノートPCを開きはじめました。
ぜひ参考にして職場でやってみようと思いました。
といっても"vim = 変態"というレッテルが貼られてる職場で
どこまでできるかわかりませんが・・・
そして自分にとってメインイベントである
「プラグインのプラグインを作ってみよう」
ではunite-adbというプラグインを作ってみました。
Uniteのインターフェースを利用してUSB接続されたAndroid機の
・ブラウザを開く
・十字キーを押す
・電話をかける
・メールを送る
などなど。
を考えてみたものの、
・持って行った開発機でamコマンドがエラーを吐く(Androidのくせに!)
・そもそもUniteプラグインの書き方がよくわかっていない
といった問題にぶちあたり、結局完成させることができませんでした・・・
(帰宅後にWindowsから動かしてみたらそれなりに動いてたっぽい)
なので色々勉強しながらちょっとずつ作っていこうと思います。
他にも「スイーツタイム」や「vim検定に挑戦」とか「モテるVim」とか
あったのですが今日はもう眠いのでこのまま投稿して寝ます・・・
Androidで.pyをQuickRun
AndroidにはSL4Aというスクリプト言語を動かすためのアプリがあります。
これを使えばAndroid上で簡単にプログラミングすることが可能になります。
え、Androidでプログラミングとかありえない?
たしかにキーボードはありませんが、Bluetoothキーボードや
ASUSのEee Pad(ASUS Pad)を使えば問題ありません。
IDEが無い?
IDEがなければVimを使えばいいじゃない。
neocomplcacheとvim-quickrunがあればVimから補完と実行ができるので
IDEなんて必要ありません。
と思ったんですが、import androidしてandroidの機能を使ったコードは
:QuickRunするとエラーが出てしまいました。
どうもSL4Aをサーバとして起動していないとダメっぽい。
なのでInterpretersのメニューからStart Serverして、
ServerのIPアドレスとポート番号をAndroid()の引数に入れて、
QuickRunすると、トースト焼けました。
NeoBundleLazyとNeoBundleSourceで遅延読み込み
プラグインがたくさん入っているとVimの起動が遅くなってしまいます。
今まではvim-ipiのIPコマンドを使ってプラグインの
遅延読み込みをやっていましたが、
昨日のTokyoVim#6でShougoさんがneobundle.vimに
IPコマンドと同等の機能を実装してくれました。
こんなvimrcが
NeoExternalBundle 'git://github.com/alfredodeza/pytest.vim.git'
NeoExternalBundle 'git://github.com/klen/python-mode.git'
こんな感じになります。
NeoBundleLazy 'git://github.com/alfredodeza/pytest.vim.git'
NeoBundleLazy 'git://github.com/klen/python-mode.git'
そしてプラグインを読み込むときのコマンドが
IP pytest.vim
IP python-mode
から
NeoBundleSource pytest.vim
NeoBundleSource python-mode
になります。
また、
:NeoBundleSource
を実行すると読み込んでいないプラグインを全て読み込んでくれます。
(この機能は本日15分ほどで実装して頂きました)
これでもうvim-ipiは不要です。
ただイチイチNeoBundleSourceコマンドを打つのは面倒なので
自動的にNeoBundleSourceする処理を書いてみました。
コマンド編
function! LoadQuickRun()
silent! NeoBundleSource vim-quickrun
silent! NeoBundleSource quicklearn
call Flymake_for_CPP_Setting()
endfunction
command! -nargs=* -range=0 QuickRun
\ call LoadQuickRun()
\ | call quickrun#command(<q-args>, <count>, <line1>, <line2>)
キーマップ編
nnoremap <silent> [vimfiler]b
\ :<C-u>silent! NeoBundleSource vimfiler<CR>
\ :<C-u>VimFilerBufferDir<CR>
nnoremap <silent> [vimfiler]c
\ :<C-u>silent! NeoBundleSource vimfiler<CR>
\ :<C-u>VimFilerCurrentDir<CR>
nnoremap <silent> [vimfiler]d
\ :<C-u>silent! NeoBundleSource vimfiler<CR>
\ :<C-u>VimFilerDouble<CR>
ファイルタイプ編
function! LazyLoading(ft)
for plugin_name in g:ll_plugins[a:ft]
execute "silent! NeoBundleSource " . plugin_name
endfor
execute "autocmd! NeoBundleSourceFor_" . a:ft
if exists('g:ll_post_process[a:ft]')
for post_process in g:ll_post_process[a:ft]
execute post_process
endfor
endif
endfunction
let g:ll_plugins={}
let g:ll_plugins['python'] = [
\ 'pytest.vim',
\ 'python-mode',
\ 'taglist.vim',
\ 'TagHighlight',
\ ]
let g:ll_post_process={}
let g:ll_post_process['python'] = [
\ 'silent! ReadTypes',
\ 'set filetype=python',
\ ]
" lazy loading of each filetype
if exists("g:ll_plugins")
for k in keys(g:ll_plugins)
execute "augroup " . "NeoBundleSourceFor_" . k
execute "autocmd!"
execute "autocmd FileType " . k . " call LazyLoading('" . k . "')"
execute "augroup END"
endfor
endif
なんでファイルタイプ編がこんなことになっているのかというと、
NeoBundleSourceだけではpython-modeが有効にならなかったからです。
一時しのぎ的にこのような方法で回避しています。
⇒NeoBundleSourceがfiletypeプラグインに対応しました
ちなみに前回のエントリに書いたバージョンは別のファイルタイプで
おかしな挙動になるので若干修正しました。
ワシのVimプラグインは百八式まであるぞ
ゴールデンウィークなので使っているプラグインをまとめてみました。
とかいって夏休みの宿題を最終日に片付けるような形になってしまっていますが…
都合よく108個あったわけだけど.vimrcでNeoBundleしている順なので
数が大きくなるほど人が遠くに吹っ飛ぶわけではありません。
【プラグイン管理】
1. neobundle.vim
これが無いと始まりません。
これだけプラグインを使ってると自動アップデートは必須なのと
起動時にプラグインを読み込まないNeoExternalBundleがかなり便利。
2. vim-pathogen
前はメインで使っていましたが今はvim-ipi用です。
3. vim-ipi
NeoExternalBundleで読み込まなかったプラグインを
後から読み込むために使ってます。
Vimの起動時間短縮のためには欠かせません。
【ドキュメント】
4. vimdoc-ja
最新の日本語ドキュメント。
まぁKaoriya版だと無くてもそんなに困らないんですが…
5. vim-ref
これで色々なドキュメントを開けます。
でも実際にはアルクとRFCの使用頻度が高かったり!?
【補完】
6. neocomplcache
これ単体でほとんどの補完をしてくれます。
他のプラグインで補完機能を拡張できるのも◎。
スキルが低いので補完してくれないとコーディングできません。
7. neocomplcache-snippets-complete
上述の通りスニペットが無いと文法がわからな(ry。
8. neocomplcache-clang
C++用。
8. clang_complete
8. neocomplcache-clang_complete
最近neocomplcache-clangは開発が止まっているようです。
C++補完にはこの2つを使うのが良いとアドバイス頂きました。
9. neco-ghc
Haskell用。
10. jscomplete-vim
javascript用。
【ctags】
11. taglist.vim
ctagsの情報を表示してくれます。
trinityと組み合わせるとVimをIDEにできます。
あれ、単体でも十分IDEになってる!?
12. TagHighlight
ctagsの情報を使ってユーザ定義の型とか関数を
ハイライトしてくれます。
【バージョン管理】
13. vim-fugitive
VimからGitを使うためのプラグイン。
これがあればTortoiseGitもGit Extensionsも必要無し。
14. gitv
git log代わりに使ってます。
一時期Windowsで使えなかったのが最近直りました。
Hg Workbenchなんてちっとも羨ましくありません。
15. vim-extradite
Gitで管理されているファイルの差分を素早く見ることができます。
【全てを破壊して繋げる系】
16. unite.vim
本体。
あらゆるものをunite化して絞り込んだり開いたりと色々できます。
17. unite-build
名前の通り、makeとかビルド用。
18. unite-colorscheme
カラースキームを変更できます。
気分転換にはUniteBeautifulAttack。
19. quicklearn
中間言語のお勉強用。
C言語で使うとアセンブリを出力してくれます。
が、全然quickに学習できておりません…
20. unite-qf
quickfixの内容をunite化。
21. unite-outline
ファイルのアウトラインをunite化。
22. vim-alignta
コード整形に使ってます。
23. unite-help
Vimのヘルプをunite化。
24. unite-tag
ctagsの情報をunite化。
25. unite-mark
マークをunite化。
26. unite-everything
everithingで検索したファイルをunite化。
27. unite-scriptnames
読み込んだプラグインをuniteから探せます。
28. unite-webcolorname
色のRGBを見たいときに使ってます。
29. unite-grep_launcher
登録したgrepワードでgrepできます。
仕事ではよくgrepするので便利です。
30. unite-gtags
gtagsの情報をunite化。
【text-obj】
31. vim-textobj-user
本体。
32. vim-textobj-indent
インデントをtextobj化。
33. vim-textobj-syntax
シンタックスで定義された部分をtextobj化。
34. vim-textobj-line
行をtextobj化。
35. vim-textobj-fold
折り畳みをtextobj化。
36. vim-textobj-entire
バッファ全体をtextobj化。
37. vim-textobj-between
任意の区切り文字の間をtextobj化。
38. vim-textobj-comment
コメントをtextobj化。
39. textobj-wiw
ワード間をtextobj化。
カーソル移動にも使えます。
40. vim-textobj-sigil
perlの変数とかをtextobj化。
【operator】
41. vim-operator-user
本体。
42. vim-operator-replace
レジスタの内容で選択範囲を置換できます。
43. operator-camelize.vim
選択範囲をCamelCaseにしたりsnake_caseにしたりできます。
44. operator-reverse.vim
選択した行や範囲を逆にできます。
45. vim-operator-sort
選択範囲をソートできます。
【quickfix】
46. vim-qfreplace
quickfixの内容を置換して結果を元ファイルに反映できます。
仕事ではこのプラグインにかなり救われました。
47. quickfixstatus
quickfixに出力されている行番号にカーソルを合わせると
コマンドラインにその内容を表示してくれます。
コンパイル結果やLint結果を見るのに便利。
48. vim-hier
quickfixstatusとセットでこっちはハイライト用。
49. qfixhowm
本来はメモ用なんだけどquickfixの絞込みに使うことの方が多かったり。
キーワードを含まない行に絞り込んだり、
複数回の絞込みができるのがかなり便利。
【見た目】
50. vim-fontzoom
フォントを拡大したり縮小したり。
大画面のモニタに出力するときに便利。
51. vim-indent-guides
インデントレベルがわかるように線を引いてくれます。
nolistでもハードタブとソフトタブの区別がつくようになります。
52. MultipleSearch
正規表現で手軽にハイライトできます。
テキストを目grepするときに使ってます。
【カーソル移動】
53. vim-easymotion
カーソル移動のモーションを視覚化してくれます。
perlでよく使います。
54. matchparenpp
対応する括弧の情報をコマンドラインに表示してくれます。
55. matchit.zip
%で対応する括弧にジャンプする機能を拡張してくれます。
【編集】
56. vim-surround
選択範囲を記号やタグで囲んだり外したりできます。
57. vim-textmanip
選択範囲のテキスト移動がすごく楽になります。
=で整形するより使用頻度が高いかも。
58. tcomment_vim
ファイルタイプに従ってコメント化、コメント解除をしてくれます。
59. DrawIt
見栄えを整える時用。
線を引くのが楽になります。
60. RST-Tables
見栄えを整える時用。
テーブル作成が楽になります。
61. sequence
連番を振るのが楽になります。
108式までこれを使って一気に振りました。
【検索】
62. vim-visualstar
選択範囲のワードで検索ができます。
63. occur.vim
検索中のワードでgrepしてくれます。
【その他便利系】
64. ideone-vim
バッファの内容をideone.comに送ってくれます。
結果をVimで受け取れるので言語の処理系が入っていなくても
動作確認ができます。
65. project.tar.gz
IDEのようなプロジェクトファイルが作れます。
66. vimproc
Vimで非同期処理ができます。
Shougoさんのプラグインを使う時はこれが無いとけっこう困る。
67. vinarise
バイナリエディタ。
xxdの強化版ですね。
68. vinarise-plugin-peanalysis
vinariseのプラグインでPEの解析ができます。
69. vimfiler
Vimがファイラになります。
70. vimshell
Vimがシェルになります。
71. vim-logcat
Vimでlogcatが実行できます。
72. vim-quickrun
Vimからファイルタイプに応じた処理を実行できます。
コンパイルしたり文法チェックしたりとかなり便利です。
73. vim-prettyprint
vim-editvar用。
74. vim-editvar
変数を編集するためのバッファを開いてくれます。
主にデバッグ用に使ってます。
75. open-browser.vim
Vimからブラウザを起動できます。
76. splice.vim
VCSでマージする時にPerforce Mergeのような3Wayマージができます。
77. gundo.vim
アンドゥ履歴をグラフィカルに見ることができます。
78. copypath.vim
開いているファイルの名前やパスを取得できます。
79. DirDiff.vim
フォルダ単位でdiffができます。
80. ShowMultiBase
数値を2進数、8進数、10進数、16進数で表示してくれます。
81. ttoc
バッファのアウトラインを開いてくれます。
82. wokmarks.vim
マークを付ける時に自動でマーカを振ってくれます。
たくさんマークするときに便利。
【コマンド拡張】
83. vim-ambicmd
CamelCaseになっているコマンド打つときに大文字部分を打つだけで
該当するコマンドに展開してくれます。
84. vim-altercmd
デフォルトで定義されているコマンドをユーザ定義コマンドと
置き換えることができます。
85. tcommand_vim
コマンド一覧を表示できます。
uniteでもコマンド検索ができますが、
上から順にゆっくりみたいときはこれ。
86. headlights
読み込んだプラグイン毎にどんなコマンドやキーマップが
定義されているかをメニュー形式で見れます。
【C/C++】
87. a.vim
C/C++のヘッダとソースを切り替えます。
88. c.vim
C/C++のテンプレートやイディオムの入力をサポートしてくれます。
89. CCTree
cscopeを使って関数のコールグラフを表示してくれます。
90. Source-Explorer-srcexpl.vim
ソース解析ツール、Source InsightのVim版です。
91. trinity.vim
taglist, srcexpl, nerdtreeを同時に起動して
VimがIDE画面のような画面になります。
92. cscope-menu
cscope用のメニューを表示してくれます。
93. gtags.vim
gtagsを使ってファイルを開けます。
94. DoxygenToolkit.vim
Doxygenコメントの入力をサポートしてくれます。
【Python】
95. pytest.vim
pytestを呼び出してくれます。
96. python-mode
pythonでコーディングする時はこれがあれば十分。
ドキュメントの呼び出し、補完、文法チェック、リファクタリング、
スクリプトの実行と何でもできます。
【Perl】
97. perl-support.vim
Perlのテンプレートやイディオムの入力をサポートしてくれます。
【JavaScript】
98. vim-javascript
JavaScriptはまだお勉強中で・・・
【Haskell】
99. vim-filetype-haskell
Haskellはまだお勉強中で・・・
100. haskellmode-vim
Haskellはまだお勉強中で・・・
101. vim-syntax-haskell-cabal
Haskellはまだお勉強中で・・・
102. ghcmod-vim
Haskellはまだお勉強中で・・・
【Clojure】
103. vimclojure
Clojureはまだお勉強中で・・・
【CSV】
104. csv.vim
Vimでcsvの列操作とかができるようになります。
【colorscheme】
105. Color-Sampler-Pack
カラースキームがたくさん詰まっています。
【他のプラグインで必要なライブラリ】
106. webapi-vim
httpとかWeb関連の機能を提供してくれます。
107. cecutil
DrawItで使っています。
108. tlib
tcommentとtcommandで使っています。
ここまでが.vimrcでNeoBundleしているプラグインです。
弱っちい人は大量のプラグインでヘビーアームズしないと
だあぁぁぁめなんだよおぉぉぉッ!!(ん!? 間違ったかな?)
という感じでこんな.vimrcで使っています。
daisuzu/dotvim
一応は初心者向けってことで
- Windowsキーバインドが使える
- それ以外は基本的にVimデフォルトのキーバインド
- 処理系やソフトが足りない的なエラーは極力出さない
ような作りにしておいて、慣れてきたら各自カスタマイズする。
という感じで職場で布教中なわけなんですがなかなか広まらない・・・
【おまけ】
ここから先は.vimrcでNeoBundleしていませんが、
家のローカル用vimrcでNeoBundleしているプラグインです。
109. TweetVim
VimからTwitterができます。
110. twibill.vim
TweetVimで使っています。
111. bitly.vim
TweetVimで使っています。
112. facebook.vim
VimからFacebookができます。
TokyoVim#5に行ってきた
勉強会はこれが初の参加となりますが、TokyoVim#5に行ってきました。
Vimに関する何かをやる会ということで、みなさん侍のようにもくもくとやっていました。
自分がやったのは
- tablineの設定
- Unite画面のハイライト設定
- vim-ipiの設定
の3つです。
1.と2.はデフォルト設定から変えただけです。(特にネタになるようなことはありません)
3.のvim-ipiですが、これはBundle内のpluginを手動で読み込むためのpluginです。
pluginの管理自体はneobundle.vimがあれば困ることはないのですが、
最近plugin数が100を超えてしまい、vimの起動がとても遅くて困っています。
pluginを捨てる。というのが最も正しい解なのかもしれませんが、
モノを捨てるのが苦手な自分には それを 捨てるなんて とんでもない!
そこでFileTypeに特化したpluginはautocmd FileTypeからvim-ipiで読み込むことにし、
pluginを捨てずにvimの起動時間を短縮化してみました。
まずはvim-ipiのインストール。
このpluginはvim-pathogenが必要になるので両方ともNeoBundleInstallします。
次にvimrcでipiにBundleフォルダの場所を設定します。
call ipi#inspect("Bundle")
これでIPコマンドが使えるようになりました。
しかし、最初はpluginが起動時に全て読み込まれてしまうので意味がありません。
なのでipiから読み込みたいpluginはvimrcでNeoExternalBundleにしておきます。
NeoExternalBundle 'git://github.com/klen/python-mode.git'
※今日はpythonの人が何人かいたのでpythonの例にします
あとはautocmdに追加していくだけなのですが、以下の設定だと
FileTypeが設定されるたびに毎回IPコマンドを実行してしまいます。
autocmd FileType python IP python-mode
今日のメインはこれの対処だったのですが、こんな感じでautocmdを
自動生成・削除する処理を作ってみました。
" autocmdで呼ばれる関数
function! LazyLoading(ft)
filetype plugin indent off
for plugin_name in g:ll_plugins[a:ft]
execute "silent! IP " . plugin_name
endfor
filetype plugin indent on
execute "autocmd! MyIPI_" . a:ft
execute "set filetype=" . a:ft
endfunction
" 読み込むpluginはFileTypeをキーにした辞書に配列として格納
let g:ll_plugins={}
let g:ll_plugins['python'] = [
\ 'pytest.vim',
\ 'python-mode',
\ 'taglist.vim',
\ 'TagHighlight',
\ ]
for k in keys(g:ll_plugins)
execute "augroup " . "MyIPI_" . k
execute "autocmd!"
execute "autocmd FileType " . k . " call LazyLoading('" . k . "')"
execute "augroup END"
endfor
FileTypeの追加はg:ll_pluginsに新しい要素を追加すればOKです。
やっぱりvimなのに起動が遅いってのはダメですよね。