カテゴリー : vim

このカテゴリーの登録数:5件 表示 : 1 - 5 / 5

2007/11/16

vimのgrep(vimgrep)が素晴らしすぎて泣いた。

ポスト @ 2:21:00 , 修正 @ 2007/11/16 2:32:20 |     

PHPを5.2.x に 上げたときのメモ

このブログに使用しているP_BLOGが 5.2.x に上げた際、date_formatという関数がバッティングしているらしく、エラーとなっていた(該当のフォーラム)。
そこで、一括してdate_formatという関数を置換しようと思いgrepしてみると、MySQLのdate_formatにもぶつかるらしく、一括全置換するわけにもいかず、ソースを見ながら比較しました。
そのときにvimgrepを使ったんですが、これが結構便利でオイシイ。

おもむろに↓のコマンドをvimで入力

:vimgrep /date_format/ **/*.php | cwin


んで、ヒットしたファイルを操作する。
これがなかなか便利だった。というか、これを知らずにvi使ってたなんて・・・ってくらい便利だった。

via - Tanablog: Vim7 内蔵の grep を使う

2007/08/17

vimのShift-Enterとscreenのbindkey

ポスト @ 2:14:05 , 修正 @ 2007/08/17 2:20:33 | , ,     

どうもscreen中にShift-Enter(S-CR)をvimで入力してしまうと\nMと入力される
そこで、vimrcに下記のように書いてみたものの、認識してくださらない。

imap <S-CR> <CR>

なんでだろなーと思ってググってみると、いくつか同じような症状で悩んでいる人がいるらしきログを発見。

確かに同じような症状で悩んでるみたいだけど、どれも解決にはならず…
症状として、screenをつかってるときだよなーと思ってもう少し調べるてみると、なんかscreenやzshのbindkeyで解決できるというような情報を見付ける

例によってマニュアルを読みつつ試行錯誤の結果、screenrcに下記でShift-Enterでもエンターと同じkeymapを使えるようになった。


# Shift-Enter
bindkey "^[OM" stuff "\015"

"^[OM"とか"\015"とかもう、知らんコードだらけ。
vimがscreenと相性が悪いのかと思ってたけど、そうではなかった。(今度からbindkeyを疑おう)
っていうか思ってたより、vim + screenて、キーバインドで悩むなぁ

2006/01/30

vimスクリプトとか書いてみた。

ポスト @ 3:02:29 , 修正 @ 2006/01/30 3:17:34 | , ,     

Comfortable PHP editing with VIM -3-で紹介されてる .vimrcはなかなかいい感じだったりするわけで、 vim上での TAB 補完をしてくれるんだけど、map! がどうも気に入らないわけです。
同じような文字列が沢山あるし、何より @since とか@author に補完してくれない。(php-doc.vim使えってわけですが...)

なので、基本は同じでちょっと作り替えたよ!

set formatoptions=qroct
let g:date = strftime("%Y/%m/%d")
let g:author = "nowel"

imap <C-o> ^[:set paste<CR>:exe PhpDoc()<CR>:set nopaste<CR>i
map! =cls <ESC>:call InsertClassDoc()<CR>
map! =req <ESC>:call InsertRequireDoc(0, 0)<CR>
map! =reo <ESC>:call InsertRequireDoc(0, 1)<CR>
map! =inc <ESC>:call InsertRequireDoc(1, 0)<CR>
map! =ioc <ESC>:call InserRequireDoc(1, 1)<CR>
map! =pubf <ESC>:call InsertMethodDoc(0)<CR>
map! =prof <ESC>:call InsertMethodDoc(1)<CR>
map! =prif <ESC>:call InsertMethodDoc(2)<CR>
map! =pubp <ESC>:call InsertPropertyDoc(0)<CR>
map! =prop <ESC>:call InsertPropertyDoc(1)<CR>
map! =prip <ESC>:call InsertPropertyDoc(2)<CR>
noremap ; :!php -l %<CR>
noremap <C-l> :w!<CR>:!php %<CR>

function! InsertClassDoc()
    execute "normal i/**\<CR>\<CR>@author " . g:author . "\<CR>@since " .  g:date . "\<CR>/\<CR>class  {\<CR>\<CR>}\<ESC>?/\*/*\<CR>/ \* \<CR>$i"
endfunction

function! InsertMethodDoc(access)
    let s:head = "/**\<CR>\<CR>@since " . g:date . "\<CR>"
    "pubf: public function
    if a:access == 0
        let s:body = "@access public\<CR>@param\<CR>@return void\<CR>/\<CR>public"
    endif
    "prof: protected function
    if a:access == 1
        let s:body = "@access protected\<CR>@param\<CR>@return void\<CR>/\<CR>protected"
    endif
    "prif: private function
    if a:access == 2
        let s:body = "@access private\<CR>@param\<CR>@return void\<CR>/\<CR>private"
    endif
    let s:foot = " function func () {\<CR>\<CR>}\<CR>\<ESC>?/\*/*\<CR> \* \<CR>$i"
    execute "normal i" . s:head . s:body . s:foot
endfunction

function! InsertPropertyDoc(access)
    let s:head = "/**\<CR>\<CR>@var \<CR>@since " . g:date . "\<CR>/\<CR>"
    "pubp: public property
    if a:access == 0
        let s:body = "public $ = ;"
    endif
    "prop: protected property
    if a:access == 1
        let s:body = "protected $ = ;"
    endif
    "prip: private property
    if a:access == 2
        let s:body = "private $ = ;"
    endif
    let s:foot = "\<ESC>?/\*/*\<CR>/ \* \<CR>$i"
    execute "normal i" . s:head . s:body . s:foot
endfunction

function! InsertRequireDoc(require, once)
    let s:head = "/**\<CR>\<CR>@since " . g:date . "\<CR>/\<CR>"
    if a:require == 0
        if a:once == 0
            let s:body = s:head . "require ''\;"
        else
            let s:body = s:head . "require_once '';"
        endif
    else 
        if a:once == 0
            let s:body = s:head . "include '';"
        else
            let s:body = s:head . "include_once '';"
        endif
    endif
    execute "normal i" . s:body . "\<ESC>"
endfunction

動かし方は(mapから呼ぶだけだけど...)
挿入時に =cls とかって入力するだけ

こんなのが、簡単に作れるよ

/**
 *
 * @author nowel
 * @since 2006/01/30
 */
class  {

    /**
     *
     * @since 2006/01/30
     * @access protected
     * @param
     * @return void
     */
    protected function func () {

    }

}

また、これが人生初のvimスクリプト!(スクリプトとは呼べなさそうだけど...)
ちなみに、上のは set formatoptions=qroctが肝!
あとは、autoindent とか smartindent とか入れてるかどうか。かな...
インデント綺麗にできないっす。どうにかする方法教えて ><;

ってか これ map 多すぎ ><;

2005/11/15

2005/10/12

phpDocumentor for VIM 1.0.1

ポスト @ 21:19:27 | ,     

vim のプラグインで phpDoc の入力ができるらしい。
ref - phpDocumentor for VIM 1.0.1 - Tobias Schlitt - a passion for php

PDV :vim onlineによると
BeforeAfterに。

やばい、これは早速入れなくては