Gist を Vim から操作する Gist.vim が相当便利

By | 2009年6月9日

id:mattn さんが作った Gist.vim が gists を使う際にとても便利です。
curl が必要なのと id と token を vimrc に書けば使える。
ちなみに git config に設定していれば書かなくても大丈夫

簡単に操作の説明。(version 2.5)

let g:github_user = 'dealforest'
let g:github_token = 'XXXXXXXXXXXXXXXXXX'
:Gist ポストされます。
:’<,'>Gist 矩形選択部分をポストします
:Gist -p privateモードでポスト
:Gist xxxx idを指定して開く
:Gist -l [ユーザID] (ユーザーを指定して)一覧を開く
:Gist -la 全てのユーザの最新gist一覧
:Gist -c XXXXX クリップボードにコピー
:Gist -e 編集。ただし gist buffer 上でしかできない。

ショートカット

nnoremap <silent> ,gn :Gist<cr>
nnoremap <silent> ,gl :Gist -l<cr>
nnoremap <silent> ,ga :Gist -a<cr>
nnoremap <silent> ,ge :Gist -e<cr>
nnoremap <silent> ,gp :Gist -p<cr>
nnoremap <silent> ,gr :Gist
nnoremap <silent> ,gu :Gist -l

こんな感じでショートカットを作ってます

パッチ

実際に使っていて凄い便利。
ただ :Gist xxxx がどーしても動かなかったので gist.vim を修正した。

@@ -391,7 +398,7 @@
     elseif arg =~ '^\(-e\|--edit\)$' && bufname =~ bufnamemx
       let editpost = 1
       let gistid = substitute(bufname, bufnamemx, '\1', '')
-    elseif len(gistls) > 0 && len(gistnm) == 0
+    elseif len(gistnm) == 0
       if editpost == 1
         let gistnm = arg
       elseif len(gistls) > 0

gistls についてはそれ以下のところで判断してるのでここでいれたら動かないと思う。

あと自分用に少しカスタマイズした。
:Gist で POST した後に :Gist -l で一覧を表示した際
少しラグがありさきほど POST したのが表示されない。
修正したり変更したりするのが不便。というわけで POST 後に自動的に
buffer に開くようにした。これで :w で再度ポストもそのままできるから便利。
split して開くのがどーかとも思うけど、まぁいいやと放置

@@ -340,13 +340,6 @@
   let res = substitute(res, '^.*: ', '', '')
   if len(res) > 0 && res != 'http://gist.github.com/gists'
     echo 'done: '.res
+
+    let mx = '^http://gist.github.com/\(\d\+\)$'
+    if res =~# mx
+      let gistid = substitute(res, mx, '\1', '')
+      echo gistid
+      call s:GistGet(g:github_user, g:github_token, gistid, 0)
+    endif
   else
     echoerr 'Post failed'
   endif

GistListAction と動作が似てる(ほぼそこのコピペ)からいじればいいとは思うけど
そもそも vimscript そこまで分からなってないため妥協。
とりあえず動いてるしいいかと。。。

デバッグとかってどーするもんなんだろ。
みんな echo でしてんのかな。
効率いい方法はどうしたものか。

コード中の class や function を perldoc で簡単に表示できる Vim プラグイン

By | 2009年5月29日

id:secondlife さんの Vim プラグイン perldoc.vim がやばい。
久々にすごいヒット。使い方も簡単。インストールも簡単。
以下、本家引用

適当な func/class の上で K で読めるようになる。
perldoc 表示側でも K で飛べるのでぐるぐる巡れる。
s でソースコードとトグルする。

ここでいう func って perldoc -f で探すもののこと。(my, open, map とか)

はまりどこ

そんなだいそれたものでもないけど。。。

  • ~/.vim/ftplugin/perl/init.vim に setlocal iskeyword+=: をかく。かかないとモジュール名(::)で区切られて perldoc が開く。(ex. URI::Simple => URIで開く):set iskeyword で確認できるよ。
  • syntax plugin on ってのが
    .vimrc に書いてないと、そもそも plugin 自体が動かない。

初めての VimScript そして github

凄い便利だけど、個人的に横分割があまり好きでない。
というわけで、ソースもみやすそうだったので縦分割で見れるようにいじってみた。

VimScript 触るのは初めてだったけど、help と勘でどーにかなった。
といっても何をやってるかはほんとに勘でこうだろうと
決めつけていじってるので何かあった時はご了承をw

~/.vim/ftplugin/perl/init.vim にこれを追記すると縦分割で表示されるようになる。
let b:window_vsplit = 1
--- perldoc.vim	2009-05-29 03:14:14.000000000 +0900
+++ perldoc_vsplit.vim	2009-05-29 03:14:02.000000000 +0900
@@ -13,17 +13,26 @@
 let s:buf_nr = -1
 let s:mode = ''
 let s:last_word = ''
+let b:window_vsplit = 0

 function! s:PerldocView()
   " base on FuzzyFinder WindowManager
   let cwd = getcwd()

   if !bufexists(s:buf_nr)
-    leftabove new
+    if b:window_vsplit
+      rightbelow vnew
+    else
+      leftabove new
+    end
     file \[Perldoc]
     let s:buf_nr = bufnr('%')
   elseif bufwinnr(s:buf_nr) == -1
-    leftabove split
+    if b:window_vsplit
+      rightbelow vnew
+    else
+      leftabove new
+    end
     execute s:buf_nr . 'buffer'
     delete _
   elseif bufwinnr(s:buf_nr) != bufwinnr('%')

ソースは github にあります。
dealforest’s perldoc-vim at master – GitHub
git さわろうさわろうと思ってよーやくさわってみた。
fork していいものか分からなかったけど勢いでしてみた。
まずかったらすみません。。。

なんにせよ初めて尽くしで色々おもしろかったー。
せっかく fork したんだし、これを機に勉強を兼ねてしばらくいじろうかな

Mac の Vim から Flash のパブリッシュを実行する

By | 2009年4月16日

内容自体はタイトルのまま。
id:Htanabee さんの Vim から Flash のパブリッシュを実行する を参考にして試した。
ただ元の記事が Windows を対象にしていたので mac で試してみた。

publish.jsfl はそのまま拝借します。
これだとテストムービの再生。

fl.getDocumentDOM().testMovie();

こっちだとパブリッシュを行います

fl.getDocumentDOM().publish();

あとはこれを .vimrc にかけばおk。
気になるようであればファイルタイプ指定すればおk

nnoremap <buffer> <c-W><cr> :!open -a "Adobe Flash CS4" "/パス/publish.jsfl"<cr>

でパブリッシュの実行をさせたいのだけどなぜか反応しない。
他のキーならちゃんと動くのにorz
原因がわからない。

引用元(http://unkar.jp/read/pc11.2ch.net/software/1106153307#l238)

:h chalice-usage
> NOTE: 端末の関係上が使用できない場合があります。そのような環境で
> はと-をそれぞれ代わりに利用できます。

これかな??

ま、これで相当快適になった。

VimM#3 勉強会にいってきた

By | 2008年11月23日

今日は秋葉原に VimM#3 の勉強会に行ってきた。
元上司??の同じ職場で働いてる人とあったり、Flash の方での知り合いの同僚の人に
あったりだとかとても楽しいかった。

肝心の勉強会はというと、脱初心者がテーマなのにも関わらず初心者らし〜人はいなかった気がする。
はやく visual mode を卒業せねばと思う次第です。

内容的には取り組み方、マクロ、レジスタ、plugin、text objectなど多岐にわたってて
めっさんこ良かった。なんか分かった気がした。
text object や Control + } とかが衝撃だった。

全員が言ってたのは、それ help に書いてるよ。
つまりは help に全てがかいてあるから調べ方さえみにつけば
意外にスラスラ上達するのやも。

ということで忘れない間にメモメモ。

発表内容

Vimで効率的なテキスト編集 id:ukstudio

エディターはプログラマにとって、武士でいう刀みたいなもんだ。かっこよす。

非効率な作業をみつけ、それを解決する方法を考える(キーマッピング, vim script, macro)、
そして最後にそれを習慣にするとのこと。

最後の習慣にするってのが凄い大事。一気に色々覚えようとしても無理。
日々の鍛錬とはまさにこのこと。
新しいことを覚えて習慣化して次のを覚える。

あとは tips で
検索(*), ファイルの移動(gf), 置換, キーワード補完(control + n, p) の使い方があった。

vimrc を他の人のを読み、誰かに聞き、vim-users.jp で聞けば相当、力がつくとのこと。

マクロ id:taku_o

通称:マクロ厨ことななしの vim 使いさんの発表

最初はマクロの初歩的な使い方からはじまった。
と思いきや、気づけばレジスタの話になっていて
速攻意味不明。。。。。
と思いきや、説明がすごい分かりやすくてとても助かった。

マクロを作るときはレジスタが a-zA-Z0-9 と作れるが
基本が小文字を使うらしい。大文字だと小文字のレジスタが登録されていると追記されるらしい。
0は頻繁にかきかわり、1-9 はレジスタの番号がよくずれるためらしい。

:display <- レジスタの情報を表示して確認できる
Control + r [レジスタ] <- これでレジスタの値を貼付ける
  • マクロいいとこ
    • カーソル移動能力を使って編集箇所を簡単に細かくしていできる
    • 頭、使わない。簡単
    • 作って、即使える
    • 何回でも実行できる
  • 駄目なとこ
    • マクロを登録するコストがかかる
    • 登録済みのマクロのミスを修正しづらい
    • 条件分岐はしない方がいい
    • 処理速度が遅い
  • むいてるとこ
    • 少し大きめの編集処理
    • 6-10万件
    • 使い捨ての処理
    • スクリプトを組もうとすうと面倒なもの

他にもテンプレートの修正や、簡単なテストデータの作成にはむいている。

vimgrep, copen, cn これほんと便利。
これが今までしらなかったのが損というくらいのしろもの。
あと、expression レジスタもあった。これは便利!!

んで、改心の出来のマクロが組めたら vimrc に let @[レジスタ] = “マクロ” として書けばいい。
マクロの注意点は、インクリメントやデクリメントを使用すると桁数がずれたりすると
j, k, l, m などの移動系がやられるので基本はつかわないようにする。
検索で移動するのが吉。

俺の.vimrcを見ろ!PHP使いの為の設定とプラグイン id:halt

最初エディタなんてなんでもいいと思ってた。
○○○○life さんの vim さばきを見てから vim をさわりだしたとのこと。
本気でとりくみだして1年くらいだとか。

オススメのプラグイン
プラグイン紹介

AutoComplPop
– 自動的に補完してくる
FuzzyFinder
– バッファに開く
– 空気を読んだファイルの選択ができる
FlyQuickFixMake
– 保存をトリガーにコンパイルエラーの行を分かりやすいように表示

PHP のリファレンスを vim help の形式に変換して vim 上でみてた。
あれはほんと便利。全ての言語があったほうがいいと思った。
簡単にコピペもできるし、調べるまでのコストも低いし、効率化間違いなし。
仮にかぶったとしても :tNext, :tPrev で次のに飛べる。

あとは PHP の文法チェックを vimrc の中でしてた。

operator, the true power of Vim id:kana

vim ユーザのランクづけをしてた。
最初、visual mode を使うようになり、習熟とともに visual mode をつかわなくなり
text object を使いこなせるようになり、その後、満足できなくなり
text object を新しく作り、新しい operator を作る!!とのことらしい。

ざっっくりというとこんな感じ。凄い濃い内容だった。
しかし、text object が凄い便利だった。
ちょっと感動。

ほんとうに色々なことができて
これくらいできるのが知れば、やるもんですよ。
上を知る機会があるってのは、やっぱいいもんだ。

VimM#3 幹事の id:ukstudio、発表者の方々ほんとうにお疲れ様でした!!!
ありがとうございます。

関連資料

VimM#3で答えそびれた質問に対する回答
VimM#3を開催してきました
VimM#3懇親会参加希望者様へ
VimM#3に行ってきました

viでctagsをつかってsparkする件

By | 2008年9月4日

ctagsが便利そうだったので使ってみることにする。
簡単に説明するとメソッドやクラスから簡単に定義元のソースへ jump できる感じです。

まず default のままだと ctags の language には actionscript がないので追加します。
~/.ctags をつくればいいので下記をコピペします。

--langdef=actionscript
--langmap=actionscript:.as
--regex-actionscript=/^[ \t]*[(private| public|static) ( \t)]*function[ \t]+([A-Za-z0-9_]+)[ \t]*\(/\1/f, function, functions/
--regex-actionscript=/^[ \t]*[(public) ( \t)]*function[ \t]+(set|get) [ \t]+([A-Za-z0-9_]+)[ \t]*\(/\1 \2/p,property, propertis/
--regex-actionscript=/^[ \t]*[(private| public|static) ( \t)]*var[ \t]+([A-Za-z0-9_]+)[ \t]*/\1/v,variable, variables/
--regex-actionscript=/.*\.prototype \.([A-Za-z0-9 ]+)=([ \t]?)function( [ \t]?)*\(/\1/ f,function, functions/
--regex-actionscript=/^[ \t]*class[ \t]+([A-Za-z0-9_]+)[ \t]*/\1/c,class, classes/

あとは簡単。

!/bin/sh
 
echo 'Generating tags for spark ...'
SPARK_DIR=~/repos/svn/spark/as3
ctags -f ~/.vim/tags/actionscript/spark.tags --recurse --totals \
    --exclude=blib \
    --exclude=.svn \
    --exclude='*~' \
    --languages=actionscript \
    $SPARK_DIR/*/trunk/src $SPARK_DIR/as3/*/src

こんな shell を作ります。
ちなみに sample や変なソースも見るとめんどうなので
{project}/src, {project}/trunk/src 以下のみを読み込むようにしました。
svn upしたタイミング、もしくは1日1回とかで更新すればいいと思います。

autocmd FileType actionscript :set tags=~/.vim/tags/actionscript/spark.tags

あとは .vimrc に追記すると使えます。

感想は、まぢで便利!!!!!!!
ほんと Spark!!!!!!!!!!!!! できますw
デモ画像をのっとくんでイメージわくと幸いです。
デモ画像では Thread を使ってやってます。おかりいたします。。。

いあ〜満足!!!

test1

test1

*参考資料
http://vim-taglist.sourceforge.net/extend.html
http://archiva.jp/web/tool/vim_ctags.html