有馬総一郎のブログ

(彼氏の事情)

2020年07月01日 19:41:31 JST - 1 minute read - Vim

Vim script 行範囲指定できるFunctionを作成する

Vim scriptで行範囲指定できるFunctionを作成してみた。

vimで範囲指定できるコマンドを定義する方法 – ぺけみさお とかを参照しつつ作成すると

command! -range=% -nargs=0 RenameMethodCamelCase call s:RenameMethodCamelCase()

でFunction内で

echo a:firstline
echo a:lastline

を呼ぶも

0
0

な結果なのでので

let first = line("'<")
let end   = line("'>")

関数内で、こうすることでビジュアルの範囲の開始行、終了行を取得していたが…そもそもとして

command! -range=% -nargs=0 RenameMethodCamelCase :<line1>,<line2>call s:RenameMethodCamelCase()

とすればちゃんと取得できていた…

command! -range=% -nargs=0 RenameMethodCamelCase :<line1>,<line2>call s:RenameMethodCamelCase()
function! s:RenameMethodCamelCase() range abort
  let first = a:firstline
  let end   = a:lastline
  if first == 0
    let first = 1
  endif
  if end == 0
    let end = line("$")
  endif
  execute first . ',' . end . 's/\(^\|_\|\.\)\@<=\(.\)/\U&/ge'
  execute first . ',' . end . 's/_\|\.//ge'
  execute first . ',' . end . 's/^/get/ge'
endfunction
abc_defg_hijk1
abc_defg_hijk2
abc_defg_hijk3

2行目だけ選択して'<,'>RenameMethodCamelCaseすれば、↓となった。

abc_defg_hijk1
getAbcDefgHijk2
abc_defg_hijk3