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>
- Prev Entry:vimのhelpの引きかたメモ
- Next Entry:group byはorder byより先に処理される。これ重要。