Vimのマウス操作による挿入・コマンドラインモードへの遷移方法
概要
先日「VimのノーマルモードのEnterキーでの改行の挿入方法」の記事を公開した。こちらに記した通り,普段はノーマルモードのEnterで改行を挿入できるようにしている。
ただし,この設定だけでは1点課題が残る。それは,ノーマルモードでの行末への改行の挿入だ。これは,ノーマルモードでは行末にカーソルを移動できないことが根本原因となる。
これにより,ファイルの最終行に文字列がある場合に,空行を挿入することが煩雑になる。そのままやろうとすると,最後の1文字を残して改行してしまうため,一度挿入モードに入って行末にカーソルを移動させてからEnterを入力することになる。
普段の作業では,GVimでファイルを開くことも多い。愛用している多ボタンマウスの「Logicool G ゲーミングマウス 有線 G600t MMO ゲーム用 20個 多ボタン RGB 国内正規品」のボタンにEnterやEscapeなどを割り当てており,マウスだけでテキストファイルに改行を挿入したりしていた。
ただ,今回のノーマルモードでファイル末尾の行末への改行挿入ができないことが若干のストレスに感じていた。そこで,これを回避するべく,マウス操作だけでインサートモードへの遷移方法を考えた。ついでに,コマンドラインモードへの遷移方法も記している。
方法
設定例は以下となる。GitHubでも公開している。
augroup main
autocmd!
augroup END
"" mouse
if has('mouse')
set mouse=a
if has('mouse_sgr')
set ttymouse=sgr
elseif has('mouse_urxvt')
set ttymouse=urxvt
else
set ttymouse=xterm2
endif
"" Enter insert/normal/Command-line modes from mouse.
nnoremap <RightMouse><LeftMouse> :
inoremap <LeftMouse><RightMouse> <ESC>
autocmd main BufEnter *
\ if &modifiable
\| nnoremap <buffer> <LeftMouse><RightMouse> i
\| endif
endif
設定の末尾のmap関係が本質的な設定となる。設定内容は大きく以下の通りとなる。
- 右クリック+左クリックの同時押し: コマンドラインモード
- 左クリック+右クリックの同時押し: 挿入モード/ノーマルモード
ノーマルモードから挿入モードに遷移する際は,バッファーの編集可否を確認する必要があるため,autocmd
でバッファーごとに判定している。これは冒頭で引用した先日の設定と同じ考え方だ。
結論
マウス操作でのコマンドライン/挿入/ノーマルモードへの遷移方法を記した。
Vimは基本的にキーボード操作がメインとなるが,GVimやG600のように多ボタンマウスを使えば,キーボードを使わずにマウス片手だけである程度操作することもできる。
行末の改行やコマンドラインモードなど,マウス操作メインでの作業でかゆい問題に今回は対処できた。
マウスを使った快適なVimライフを過ごしたい。