タグ

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

  • 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 にショートカットを設定する - 永遠に未完成
  • 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 で複数のファイルを新しいタブにまとめて縦分割で開く - 永遠に未完成
    sugarbabe335
    sugarbabe335 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 を起動する - 永遠に未完成
  • 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 の設定を一部晒してみる - 永遠に未完成
  • 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 で配列とかを処理するときの話 - 永遠に未完成
    sugarbabe335
    sugarbabe335 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なるものを作ってみた - 永遠に未完成
  • 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 時にコミットログの入力を省く - 永遠に未完成
  • 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 とかで落ちてきた部分のコミットを見る - 永遠に未完成
    sugarbabe335
    sugarbabe335 2010/07/14
    こうやればよかったのかー。便利!
  • 特定の文字列で始まるグローバル変数を列挙する - 永遠に未完成

    なんかやたらと設定用のオプションの変数が多いプラグインがあると、どんな変数があって今どんな値が入っているのか知りたくなることがある。てことで私のvimrcには以下のようなコマンドが定義してある。 command! -nargs=+ Vars PP filter(copy(g:), 'v:key =~# "^<args>"') PP は prettyprint.vim のもの。なければ echo でもいいけど絶対見づらいので prettyprint.vim 推奨。 で、これを使うと以下のようなことができるようになる。 :Vars ref_ { 'ref_alc_cmd': 'elinks -dump -no-numbering -no-references %s', 'ref_alc_encoding': '', 'ref_alc_start_linenumber': 37, 'ref_al

    特定の文字列で始まるグローバル変数を列挙する - 永遠に未完成
  • textobj-between 書いた - 永遠に未完成

    極稀に、任意の文字で囲まれた範囲を選択したり削除したりしたいことが当にたまーにあったので書いてみた。名前が適切かどうかは知らん。 Operator-pending mode の時に、デフォルトでは if{char} か af{char} で指定した文字で囲まれた範囲を対象にできる。b じゃありません。b は block がすでにあるし、使い方的にも f の方が分かりやすいだろうし。 GitHub - thinca/vim-textobj-plugins at between: *Obsolete* These plugin were divided into the independent repository. これがあれば、 こことか csv,value-01,value-02,value-03 ^^^^^^^^こことか for (int i = 0; i < len; i++) /

    textobj-between 書いた - 永遠に未完成
  • try-catch の弊害 - 永遠に未完成

    Vim スクリプトでは try-catch が使えて非常に便利。 try echo 'start' throw 'error!' echo 'end' catch /error!/ echomsg 'error occurred.' endtry start error occurred.この try-catch、一般的な Vim のエラーが発生した場合も catch してくれる。 unlet! var try echo 'start' echo var echoerr 'hoo' echo 'end' catch echomsg 'error occurred:' . v:exception endtry start error occurred:Vim(echo):E121: Undefined variable: varなんて便利!かと思いきや、ここに大きな落とし穴がある。 それは、

    try-catch の弊害 - 永遠に未完成
  • Vim Loves Perl - Perl Casual#2 内のコードの添削をしてみた - 永遠に未完成

    Perl Casual #02でVimについてお話しさせて頂きました - iDeaList::Writing にあった Vim の紹介スライド、その中にあった Vim スクリプトを誠に勝手ながら添削してみました。 スライドは以下。 http://www.slideshare.net/acotie/perl-casual2 "TT用 syntax au BufEnter *.tt,*.cfm execute ":setlocal filetype=html" "test code用 syntax au BufEnter *.t execute ":setlocal filetype=perl" http://www.slideshare.net/acotie/perl-casual2/30 まず、この場合 execute は必要ないです。execute が必要になるのは、 式(変数や関数)

    Vim Loves Perl - Perl Casual#2 内のコードの添削をしてみた - 永遠に未完成
    sugarbabe335
    sugarbabe335 2010/04/23
    thincaさん本気出しすぎや
  • ref.vim の内部構造を大幅に書き換えた - 永遠に未完成

    ref.vim の内部構造が全然別物になった。 とは言ったものの、使う側からするとあまり変化はない。 普通の人は内部構造なんて興味ないと思うので、先にそれ以外で変更した部分を挙げておく。 外見的な変更点 ref#jump() 前からあったんだけど、ドキュメントには書いてなかった。今回使い方を変えてドキュメントにも書くようにした。いるかわからんけど、以前から勝手に使ってた人は使い方が変わってるので注意。 これを使うとカーソル位置からキーワードを拾って ref を開けるので、例えば nnoremap <silent> <Space>K :<C-u>call ref#jump('normal', 'alc')<CR> vnoremap <silent> <Space>K :<C-u>call ref#jump('visual', 'alc')<CR> などとしておけばどこでも K で辞書が引ける

    ref.vim の内部構造を大幅に書き換えた - 永遠に未完成
    sugarbabe335
    sugarbabe335 2010/04/18
    僕もローカルのref-alcをlook補完やってみたりしてた。微妙だったけど
  • Vim プラグインの開発スタイルのお話 - 永遠に未完成

    Vim のプラグインって作ってる最中は Vim 自体の動作も不安定になりがちだし、普段の環境と同じ環境で作ってるとなにかと弊害が起きがち。ちょっとした変更ならまだしも、大規模な変更は 1 度の作業で終わらないこともあるし、作業中断して別のことをやることになったりするとさらに面倒。 または、VCS でプラグインを管理したくて、プラグインごとにリポジトリを独立したいけど環境分けるのが面倒だとか。 というわけで私が普段やってる Vim プラグインの開発スタイルを晒してみようと思う。 設定 私の vimrc には最後の方に以下の記述がある。 " Load settings for each location. augroup vimrc-local autocmd! autocmd BufNewFile,BufReadPost * call s:vimrc_local(expand('<afile

    Vim プラグインの開発スタイルのお話 - 永遠に未完成
  • Vim Hack #40: 不可視文字を表示する の補足 - 永遠に未完成

    以下の記事を読んで、やはり補足があった方がいいかな、と。 event happen or not ? - KBDAHOLIC - やぬすさんとこ 前置き http://vim-users.jp/2009/07/hack40/ では :match を使った方法のみ解説したが、記事でも述べている通り :syntax を使った方法もある。 ではなぜこの方法の紹介を省いたかというと、複雑な上に完全にハイライトを行うのが難しいからだ。 はっきり言って偉そうに解説できるほど私もよくわかっていない。なので突っ込み等あればよろしくお願いします。 :syntax は実行された回数だけ定義される まず、:syntax はバッファローカルで動作するコマンドだ*1。そして厄介なことに、実行した回数だけ定義が繰り返される。多重定義しても動作はするが、Vim の処理速度に影響が出そうだし、何より気持ちが悪い。 上の記

    Vim Hack #40: 不可視文字を表示する の補足 - 永遠に未完成
  • tmux 1.1 が出ていたので使ってみた - 永遠に未完成

    GNU Screen のように複数のターミナルを仮想的に扱える tmux の 1.1 が出ていたので、以前ちょろっと試して screen に戻ってしまっていたのでもう一度試してみた。 Vim で 256 色を使う まず困ったのは Vim。256色にならないorz でも 256colors2.pl を使うとちゃんと 256 色で表示される。つまりターミナルは問題ない。 どうやら terminal-overrides と言うオプションがあって、それのデフォルト値で terminfo の色数の情報を強制的に書き換えているらしい。が、Vim は $TERM から改めて terminfo を取得するのでこれが反映されない。 無理矢理 :set t_Co=256 としてもいいんだけどそれではなんか負けた気がする。 そもそも GNU Screen の時はなんで大丈夫だったかというと、~/.screenr

    tmux 1.1 が出ていたので使ってみた - 永遠に未完成
    sugarbabe335
    sugarbabe335 2009/11/07
    screen->tmux
  • neocomplcache.vim のインクルード補完の使い方 - 永遠に未完成

    neocomplcache v3.06 より、インクルード補完(include_complete.vim)が実装された。作者の Shougo さん一押しの機能なのだが、どういった機能なのかよくわからない人もいると思うので勝手に解説してみる。間違っていたら突っ込みよろしく。 include とは Vim には標準で 'include' などのオプションがある。このオプションで C の #include や Java の import を探して、現在編集中のバッファと関係ありそうなファイルからキーワードを検索できたりする。 インクルード補完とは neocomplcache のインクルード補完は、これらの機能を利用して関係ありそうなファイルを探索し、そこから補完候補を出してしまおうという機能。もちろん結果をキャッシュしているので、1 度キャッシュしてしまえば Vim 標準のより速く動作する。 ど

    neocomplcache.vim のインクルード補完の使い方 - 永遠に未完成
  • dumper.vim 改め prettyprint.vim 作った。 - 永遠に未完成

    2009/06/26 追記: id:ka-nacht さんのアドバイスを受けて名称を変更しました。変えるなら早いうちに、と言うことで。 普通の人はまず必要ないだろう prettyprint.vim と言うプラグインを作った。 http://github.com/thinca/vim-prettyprint/tree/master prettyprint.vim とは Vim の変数を整形して出力するためのプラグインです。 見た方が早い 例えば QuickRun.vim をインストールしているときに*1、 PP g:QuickRunConfig などとすると、 { '*': { 'exec': '%c %s %a', 'output_encode': '&fenc:&enc', 'shebang': 1, 'split': '{winwidth(0) * 2 < winheight(0) *

    dumper.vim 改め prettyprint.vim 作った。 - 永遠に未完成
  • QuickRun.vim を公開した - 永遠に未完成

    ずっと前からおもに自分用としてちょろちょろ書いてたんだけど、 実装がまだ中途半端 ドキュメントがなかった ujihisaさんの quickrun.vim と名前が被ってる(そして変えるのも面倒) と言った理由で公開はしてなかった。 しかし先日 ujihisa さんに「うぷ」って言われたのでとりあえずやっつけでドキュメントとか書いてソース内のまずそうなところ軽く手を入れて公開した。 http://github.com/thinca/vim-QuickRun/tree/master (ドキュメント) 一応言っておきたいんだけど、これは派生版じゃありません。完全に別物です。というか後から作ったのならわざわざ同じ名前にしないよね。作り始めてからしばらくして ujihisa さんが quickrun.vim を公開したので、「やべぇ名前かぶった」ってなったわけです。ちなみにログ漁ったら作り始めたのは

    QuickRun.vim を公開した - 永遠に未完成
  • less の -F オプション - 永遠に未完成

    便利なものを見つけた。ファイルの中身を見ようとして less を使ったけど中身が 1 行しかなくて残念なことになったとか、 git log したけどコミットが 1 つしかないのにページャが起動してうざいとかは良くあることだと思う。 そこで -F(--quit-if-one-screen) オプション。名前を見ればわかると思うけど、入力テキストが画面内に収まる量だったら自動で終了して cat 相当の動作になる。実にスマート。 環境変数 LESS に追記しておけばいい。ちなみに私は後から見てわかりやすいように設定ファイルに書くときはロングネームを使うようにしている。 export LESS='--quit-if-one-screen' ところが、私の環境だと git log のようなエスケープシーケンスを含む入力がそのまま表示されるようになってしまった。-R(--RAW-CONTROL-CHA

    less の -F オプション - 永遠に未完成