有馬総一郎のブログ

(彼氏の事情)

2020年07月01日 19:41:31 JST - 1 minute read - Comments - 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