タグ

ブックマーク / thinca.hatenablog.com (36)

  • Live Coding で painter.vim(仮) 作った - 永遠に未完成

    Vim Advent Calendar 2012 の 81 日目の記事です。 先日 Yokohama.vim #4 で Live Coding をしたわけですが、今回はその成果について紹介したいと思います。 以下がその時作った painter.vim(仮) です。Vim を使ってマウスでお絵描きできるプラグインです。 https://github.com/thinca/vim-painter 以下のような感じ。 Live Coding の時間で作ったのもあって、プロトタイプ的な実装な感じです。とりあえず動くよレベル。 この手のプラグイン自体には結構興味あるので、ちゃんと作りたいと思いつつも、真面目に作ろうと思ったらかなり膨大なタスクになるのが目に見えている上に完全にネタで実用性皆無なので、どうしようか考え中…。この記事の反響次第かな。 あと名前もてきとーに決めたので、もしかしたらリポジトリ

    Live Coding で painter.vim(仮) 作った - 永遠に未完成
    soh335
    soh335 2013/02/19
  • ref.vim に webdict と言うソースを追加した - 永遠に未完成

    ref.vim に webdict と言うソースを追加した。取り急ぎ版。 これは設定した Web サイト(主に辞書サイトを想定)を扱うソース。 例えば以下のように設定する。 let g:ref_source_webdict_sites = { \ 'wikipedia:ja': 'http://ja.wikipedia.org/wiki/%s', \ } これで以下のように使用できる。 :Ref webdict wikipedia:ja Vim やっていることは、指定サイトをテキストブラウザで表示した結果をそのまま出しているだけだ。 辞書を使うともう少し細かく設定できる。 let g:ref_source_webdict_sites = { \ 'wiktionary': { \ 'url': 'http://ja.wiktionary.org/wiki/%s', \ 'keyword_e

    ref.vim に webdict と言うソースを追加した - 永遠に未完成
    soh335
    soh335 2012/05/13
  • local_vimrc の焼き直し localrc.vim 書いた - 永遠に未完成

    ファイルを読み込んだ際にそのファイルのある位置から上に辿っていって特定のファイルを探し、見付かったら source する、いわゆる local_vimrc なプラグイン。 既存のスクリプト 既存ですでに結構ある。まずはそれらを簡単にまとめ。 ちなみにどれもソースを読んだだけで実際に使ってみたわけではないので注意。勘違いとかあるかも。www.vim.org でざっと探した程度なので他にもありそう。 localvimrc 設定で読み込むファイルの数や sandbox を使うか、1 つずつ読み込むかを聞くかどうかなどを指定できる。 local_vimrc.vim 実装がかなりアレ。特に BufEnter を使っちゃってる辺りそもそも目的からして違う気すらする。 perdirvimrc 複数のファイルを探してくれる。が、読むファイル名は固定。カスタマイズできない。 ちなみに私が欲しいのはvimrc

    local_vimrc の焼き直し localrc.vim 書いた - 永遠に未完成
    soh335
    soh335 2012/02/27
  • $this-> をラクに入力する - 永遠に未完成

    PHP 書いてると、$this-> をよく書く割に Shift を 2 回も使わないといけなくてすごく書きづらい。 あまりに書きづらいので @ で $this-> を出すようにした。確か PHPer って @ は滅多なことがないと使わない*1んだよね。 " after/ftplugin/php.vim inoremap <buffer> @ $this-> これでよし。と言いたいところだけど、コメントの中で @return とか書くときに誤爆する。ので、コメント内と、ついでに文字列内では展開しないようにした。 " after/ftplugin/php.vim function! s:at() let syntax = synstack(line('.'), col('.')) let name = empty(syntax) ? '' : synIDattr(syntax[-1], "na

    $this-> をラクに入力する - 永遠に未完成
    soh335
    soh335 2012/02/08
  • visualstar.vim 書いた - 永遠に未完成

    http://vim-users.jp/2009/11/hack104/ で Visual mode で * を使う方法を紹介したけど、いささかやっつけ感があるので、もう少しマシなものを書いてプラグイン化してみました。 visualstar.vim http://github.com/thinca/vim-visualstar で、書いたのはいいんだけど、実は似たようなのが既に www.vim.org に上がってる。 StarRange - Searches a string that you selected in visual mode with * or #. : vim online ただ、悪いけどこれの実装があまりにアレだったので新しく作った。違いとしては カスタマイズ用のキーマッピングの追加 レジスタの復元が不完全だったのを修正 ? での検索時は ? をエスケープするように h

    visualstar.vim 書いた - 永遠に未完成
    soh335
    soh335 2012/02/07
  • Vimスクリプト基礎文法最速マスター - 永遠に未完成

    流行ってるみたいなので遅ればせながら便乗。需要?何それおいしいの? Perl基礎文法最速マスター - サンプルコードによるPerl入門 - Perlプログラミングの基礎から応用まで Route 477(2010-01-25) PHP基礎文法最速マスター - Shin x blog Python基礎文法最速マスター - LazyLife@Diary VBA基礎文法最速マスター - いろいろ解析日記 Java基礎文法最速マスター - いろいろ解析日記 Bash基礎文法最速マスター - いろいろ解析日記 Haskell基礎文法最速マスター - think and error Brainf*ck基礎文法最速マスター - このブログは証明できない。 VBScript 基礎文法最速マスター - CX's VBScript Diary - VBScript グループ JavaScript基礎文法最速マス

    Vimスクリプト基礎文法最速マスター - 永遠に未完成
    soh335
    soh335 2011/11/11
  • Vim プラグインのヘルプを書く人がするべき設定 - 永遠に未完成

    Vim の help は通常 modeline などによって閲覧に最適なようにオプションが設定される。しかし編集したい時には困ることがある。というわけで全ての Vim プラグイン作者*1は以下のような設定を入れるといいと思うよ! " after/ftplugin/help.vim if &l:buftype !=# 'help' setlocal list tabstop=8 shiftwidth=8 softtabstop=8 noexpandtab textwidth=78 if exists('+colorcolumn') setlocal colorcolumn=+1 endif if has('conceal') setlocal conceallevel=0 endif endif 以前もちらっと書いたのだけど、'buftype' の値を見て編集中なのか :help で閲覧中な

    Vim プラグインのヘルプを書く人がするべき設定 - 永遠に未完成
    soh335
    soh335 2011/09/05
  • Re: InputStreamからStringへの変換 - 永遠に未完成

    こんなんでいいのかな。 InputStreamからStringへの変換 - Humanity (該当部分を抜粋) static String convertInputStreamToString(InputStream is) { final int n = 1024; byte[] b = new byte[n]; StringBuffer buf; while (is.read(b, 0, n) != -1) { buf.append(new String(b)); } return buf.toString(); } 残念ながらダメダメです。 1024 バイト単位なので、マルチバイト文字の境界がここに来ると文字が壊れる マルチバイト文字が 1024 バイト目と 1025 バイト目に来ていた場合、見事に分断されて文字が壊れる。 最後の読み込み時に、末尾にゴミが残る 例えば入力が 102

    Re: InputStreamからStringへの変換 - 永遠に未完成
    soh335
    soh335 2011/06/21
  • quickrun v0.5.0dev 公開した - 永遠に未完成

    ずっと裏でごそごそやってた quickrun v0.5.0 の dev バージョンをようやく公開したよ!変更点多すぎるので別ブランチで。 互換性のない変更が多々あります。注意。さらに、とりあえずベース部分が落ち着いたので公開したけど今後もリリースまでに非互換の変更が入る予定があります。 人柱する方法 v0.5.0dev ブランチがあるのでこちらを使ってください。 git clone http://github.com/thinca/vim-quickrun.git -b v0.5.0dev 変更点 実行部分と出力部分をモジュール化しました。 runmode => runner output => outputter こんな感じ。名前とかも変わってるので詳しくは help 見てください。 ついでに非同期出力に対応したので、例えば (1..20).each do |i| sleep 0.2 p

    quickrun v0.5.0dev 公開した - 永遠に未完成
    soh335
    soh335 2011/05/30
  • unite-tags を改造した - 永遠に未完成

    時間もないし他にやることもあるし他の人のスクリプトにはあまり手を出さない方がいいと思いつつ、どうしても我慢できなくなってしまったので id:tsukkee さんの unite-tags を改造した。 before: https://github.com/tsukkee/unite-tags after: https://github.com/thinca/unite-tags 変更点 キャッシュ タグファイルを読み込んだ結果をキャッシュするようにしました。これにより 2 回目以降の unite の起動が速くなります。タイムスタンプをチェックしてタグファイルが更新されていた場合は自動的に読み直します。 引数 引数を渡すことで候補を事前に絞り込んだ状態で始められるようにしました。これによりカーソル下の単語の候補を表示することができます。 noremap <silent> <C-]> :<C-u

    unite-tags を改造した - 永遠に未完成
  • txt ファイルと filetype - 永遠に未完成

    .txt と言う拡張子はテキストファイルの拡張子なわけだけど、テキストファイルって一言で言っても色々あるわけです。 で、私ははてダの下書きを .txt で保存してたり、仕事で書いた readme.txt をこっそり reStructuredText で書いてみたりしてるので、そういう場合もある程度自動で filetype も検出して欲しい。 てわけで、私は以下のように設定している。 " ftdetect/text.vim autocmd BufReadPost,BufNewFile *.txt call s:structured_text() function! s:structured_text() let line1 = getline(1) let line2 = getline(2) execute 'setfiletype' \ line1 =~ '^\([=-`:''"~^_*

    txt ファイルと filetype - 永遠に未完成
    soh335
    soh335 2011/02/18
  • pathogen.vim みたいなことをする rtputil.vim ってのを作った - 永遠に未完成

    pathogen.vim は便利なんだけど、私に必要な機能が足りなかったので、vimrc に独自のものを書いていた。 で、折角なのでその部分をプラグイン化してみようと思い立ったのが先月の中旬。すでにあるものを移すだけだしサクッっと終わるだろ、と思ってたんだけど、あちこちいじっていたらかなり時間をってしまい、結果、完全に別物の変態的な機能を持ったスクリプトになってしまった。 最初に言っておくと、pathogen.vim で困ってない人は使う必要まったくないです。むしろこんなの使わない方がいいに違いない。 https://github.com/thinca/vim-rtputil どんなことができるのか 面倒なので Vim スクリプトで書きます。網羅的ではないので全部知りたい人は help を参照。 " pathogen みたいに bundle を runtimepath に追加する cal

    pathogen.vim みたいなことをする rtputil.vim ってのを作った - 永遠に未完成
    soh335
    soh335 2011/02/15
  • unite の action にショートカットを設定する - 永遠に未完成

    unite では で action を選択できるけど、やっぱりよく使うものにはショートカットを設定しておいて一発で実行したい。ショートカットについては (unite_do_delete_action) などがいくつかあるが、action なんて無尽蔵に増えるし全ての action に対して が設定されているわけではないのでいっそのこと最初からこれらには頼らない方がいい。 で、action に対するショートカットを設定するには例によって FileType unite で以下のようにする。 " after/ftplugin/unite.vim nnoremap <silent> <buffer> <C-k> :<C-u>call unite#mappings#do_action('right')<CR> inoremap <silent> <buffer> <C-k> <ESC>:call u

    unite の action にショートカットを設定する - 永遠に未完成
    soh335
    soh335 2010/11/03
  • unite で複数のファイルを新しいタブにまとめて縦分割で開く - 永遠に未完成

    個人的にそういうことをよくやるので、action を定義した。こういうのが簡単にできて unite は素晴らしい。 let s:unite_action = { \ 'is_selectable': 1, \ } function! s:unite_action.func(candidates) " {{{ tabnew `=a:candidates[0].action__path` for c in a:candidates[1 :] vsplit `=c.action__path` endfor endfunction " }}} call unite#custom_action('openable', 'tabvsplit', s:unite_action) unlet! s:unite_action この手のは応用が効きやすいと思うので、よくやる操作があれば登録しておくといいと思う

    unite で複数のファイルを新しいタブにまとめて縦分割で開く - 永遠に未完成
    soh335
    soh335 2010/11/01
    いいね!
  • unite.vim で選んだディレクトリで更に file_rec を起動する - 永遠に未完成

    unite の file_rec は特定のディレクトリ以下の全ファイルを列挙する source で、プロジェクトのルートなんかを指定すればプロジェクトの全ファイルを一望できてすごく便利なんだけど、肝心の指定方法が現在のディレクトリだったりコマンドラインからの指定だったりと何かと面倒だったので、unite で選択したディレクトリから file_rec を起動する action を定義してみた。 let s:unite_action_rec = {} function! s:unite_action_rec.func(candidate) call unite#start([['file_rec', a:candidate.action__path]]) endfunction call unite#custom_action('directory', 'rec', s:unite_actio

    unite.vim で選んだディレクトリで更に file_rec を起動する - 永遠に未完成
    soh335
    soh335 2010/10/31
  • unite.vim の設定を一部晒してみる - 永遠に未完成

    Shougo さんの unite.vim がかなり便利。 unite 自体に関する説明は省略するとして*1、特に unite#set_substitute_pattern() を使うといろいろできる。ので、私の unite の設定の中にある unite#set_substitute_pattern() に関する部分を晒してみる。 unite#set_substitute_pattern() について簡単に説明 フィルタリングのための入力文字列を内部で置換するための設定。 これはバッファ名毎に設定できる。バッファ名は :Unite で起動するときに指定できる。 例えば、デフォルトではバッファ名 "files" には先頭の ~ を $HOME に置換する設定がされている。なので、 :Unite -buffer-name=files file のように起動して ~ と入力すると、内部的には $H

    unite.vim の設定を一部晒してみる - 永遠に未完成
    soh335
    soh335 2010/10/29
  • for で配列とかを処理するときの話 - 永遠に未完成

    Java で配列やその類のものを for で走査する場合、index が欲しい場合か、拡張 for ループが使えない場合は for (int i = 0; i < array.length; i++) { // something... } のようにするのが一般的だと思う。 が、私は普段以下のように書いてる。 for (int i = array.length; 0 <= --i;) { // something... } これはもちろん走査する場合、つまり処理順が関係ない場合に限る。 なんでこんな書き方をしているかと言うと、理由は 2 つある。 ループ回数の初期化が楽 条件はループ毎に実行されるので、そこであまり重い処理はしたくない。ループ回数の取得が重い場合は for (int i = 0; i < list.size(); i++) { // something... } とかやっち

    for で配列とかを処理するときの話 - 永遠に未完成
    soh335
    soh335 2010/10/18
    たしかに
  • qfreplace.vimなるものを作ってみた - 永遠に未完成

    日のyak shavingの成果。vimで:grepした結果から置換がしたくなったので、その場でプラグインを書いた。名前が適当すぎるのは仕様。 https://github.com/thinca/vim-qfreplace quickfixウィンドウ内でrを押すと、各行のテキスト部分が別バッファに書き出される。そのバッファを適当にいじって、と言っても当初の目的が置換なので:%sして、:wすると各行ごとの大元のファイルが変更される。 体を書く時間よりドキュメント*1を書く時間の方が明らかにかかってる。yak shavingしすぎ。 ちなみに、既に似たようなのがありそうな気がしたので軽く探したけど見つからなかったので作った。もしあったら教えてください。泣くので。 *1:しかも大したことは書いてない

    qfreplace.vimなるものを作ってみた - 永遠に未完成
    soh335
    soh335 2010/10/18
  • commit --amend 時にコミットログの入力を省く - 永遠に未完成

    git commit --amend を使うと、直前のコミットでやり忘れた変更を付け足せるのでとても便利。 でも、多くの場合は変更部分に typo を見つけた場合とかファイルを追加し忘れていた場合などで、コミットログの編集を行うことはほとんどない。でも --amend をするとコミットログの編集用にエディタが立ち上がる。すぐに終了すればいいんだけど、エディタって場合によっては立ち上がるの遅いし必要ないなら立ち上がってほしくない。これを避ける方法。 git commit --amend -C HEADこれで OK。-C は既存のログメッセージを再利用するオプション。 私は以下のように alias を設定している。 cia = commit --amend -a -C HEAD私は -a を付けるタイプ。ここは好みで。 ついでに日時を更新する git commit --amend では、コミッ

    commit --amend 時にコミットログの入力を省く - 永遠に未完成
    soh335
    soh335 2010/08/25
  • git pull とかで落ちてきた部分のコミットを見る - 永遠に未完成

    git pull とかやって、だーっと落ちてきたけど、今新しく落ちてきたのってどの部分だよ、とか言うときに使う。 git log HEAD@{1}..HEAD --reverse --reverse は好み。下に行くほど新しいコミットになる。 私は以下のようにaliasしてる。単語的に正しいかどうかは知らん。newlyp は差分も表示する。 newly = log HEAD@{1}..HEAD --reverse newlyp = log HEAD@{1}..HEAD -p --reverse

    git pull とかで落ちてきた部分のコミットを見る - 永遠に未完成
    soh335
    soh335 2010/07/15
    こうやればよかったのかー。便利!