diary.sasaplus1.com

#1

今日は昨日書いたVim scriptを読みやすくした。

優先事項があるので後回しにする、と言いつつも気になってしまって修正した。

" / を入力した際の挙動を条件によって変更する
function! s:get_smart_very_magic() abort
  if getcmdtype() != ':'
    return '/'
  endif

  let cmd = getcmdline()
  let pos = getcmdpos()

  if
        \ (cmd ==#      's' && pos == 2) ||
        \ (cmd ==#     '%s' && pos == 3) ||
        \ (cmd ==# "'<,'>s" && pos == 7)
    " :s/ と入力したら :s/\v にする
    return '/\v'
  elseif
        \ (cmd ==#      's/\v' && pos ==  5) ||
        \ (cmd ==#     '%s/\v' && pos ==  6) ||
        \ (cmd ==# "'<,'>s/\v" && pos == 10)
    " :s// と入力したら :s/\v/ から :s// にする
    return "\<BS>\<BS>/"
  endif

  return '/'
endfunction

" very magicをonにする
cnoremap <expr> / <SID>get_smart_very_magic()

昨日のスクリプトよりは保守しやすくなったと思う。

スクリプトローカルな関数はmap系関数に指定できないのか、と思って諦めかけていたが、調べてみたら可能だった1のでそのように書いた。<SID>はこういう時に使うんだな。


  1. Vim: とs:の使い分け ↩︎