Skip to main content

gjモードを使うこと

· 3 min read
Ikuya Yamada
non-stack engineer

Vimで文章を書いていると、j, k で上下に移動したときに思ったより激しくカーソル移動してしまうことがある。長い文章を書くとウィンドウの右端で折り返されるのだが、システム観点ではそこでは改行は発生しておらず、あくまで表示の都合で折り返されているだけであり、人間とパソコンの意図が一致しないために起きるちょっとした不幸といえる。

こういう場合、j, k の前にgを入力する、つまり g j, g k とストロークすることで想定通り移動はできるのだが、毎回二種類のキーを打つのはとてもストレスであり、かつ実際上これに悩まされることが多かったので、g, k をそれぞれ g j g k にマッピングする設定を .vimrc に入れている。

" 改行を考慮したj, k移動のオン/オフ設定
let g:visual_line_move = 0 " 初期設定: オフ

function! ToggleVisualLineMove()
if g:visual_line_move == 0
let g:visual_line_move = 1
nnoremap <silent> j gj
nnoremap <silent> k gk
echo "gj mode"
else
let g:visual_line_move = 0
nnoremap <silent> j j
nnoremap <silent> k k
echo "jk mode"
endif
endfunction

nnoremap <leader>g :call ToggleVisualLineMove()<CR>

私の場合 leader はスペースキーなので、スペースキーとgを同時に押すと gj mode に入り、ストレスなくカーソルの上下動ができるようになる。

ちなみにこういう「あったらいいな」系の設定は近年のvibe codingでずいぶんと実装が楽になった。vibe workingの実現まであとすこしかもしれないし、ちょっと先の未来にはvibe livingが主流になるのかもしれない。そこまでいくとそれはそれで不安になるのだが、すでにあなたの人生はvibe livingではないか、という指摘も考えられ、なんとも言えない気持ちとなる。