Webtech Walker

Vimで同じインデントの部分を選択する

kanaさんの記事をみて自分で定義した部分を選択したりomapに定義したりするのがすごい便利だなーと思って自分でも書いてみました。

カレントの位置と同じインデントの部分を選択できるような設定を書きました。たとえば下記のようテキストがあったときに配列と中身だけを選択するときとかに便利です。vibで選択すると、)の前まで選択範囲になるのでちょっと選択したい範囲と違ったりするんですよね。

function foo() {
     $hoge = array(
          'foo' => 'bar',
          'hoge' => 'fuga',
     );
}

ソースはこんな感じ

function! VisualCurrentIndentBlock()
    let current_indent = indent('.')
    let current_line   = line('.')
    let current_col    = col('.')
    let last_line      = line('$')

    let start_line = current_line
    while start_line != 1 && current_indent == indent(start_line - 1) 
        let start_line = start_line - 1
    endwhile

    let end_line = current_line
    while end_line != last_line && current_indent == indent(end_line + 1)
        let end_line = end_line + 1
    endwhile

    call cursor(start_line, current_col)
    normal V
    call cursor(end_line, current_col)
endfunction

nnoremap gi :call VisualCurrentIndentBlock()<CR>
onoremap gi :normal gi<CR>
このエントリーをはてなブックマークに追加