basyura's blog

あしたになったらほんきだす。

w、e、b でもうちょっと効率よく移動したい

(※) 既にあった - https://github.com/kana/vim-smartword

単語を移動する時に、. とか = とかで止まらなくていいからと思っていたので書いてみた。

nnoremap <silent>w :call <SID>clever_move("w")<CR>
nnoremap <silent>b :call <SID>clever_move("b")<CR>
nnoremap <silent>e :call <SID>clever_move("e")<CR>

let s:no_clever_pattern = '\.\|(\|)\|!\|:\|]\|=\|<\|>\|"\|\$\|/\|-' ."\\|'"

function! s:clever_move(word)
  execute "normal! " . a:word
  let chr =getline('.')[col('.') -1]
  if  chr =~ s:no_clever_pattern || chr == ''
    call s:clever_move(a:word)
  endif
endfunction

clever を使いたかっただけともいう。

いまさらながら w をウインドウ移動に使用していてスムーズに移動しない(待ちが発生する)のが気になった。

noremap wh <C-w>h
noremap wl <C-w>l
noremap wj <C-w>j
noremap wk <C-w>k
noremap wp <C-w>p

別のキーに当てようとしたけど長年使ってたせいでしっくりこないので断念。