VimのノーマルモードのEnterキーでの改行の挿入方法

VimのノーマルモードでEnterキーでの改行の挿入方法を記す。

概要

VimのノーマルモードでのEnter (<CR>) は次の行頭への移動を意味する。しかし,次の行に移動するだけならばjで十分だし,<CR>と全く同じことをしたければ,j^で十分だ。

行頭への移動よりも,直感的にはEnterを入力したら改行を入力してほしい。ただし,ヘルプやnetrw, Quickfixなど編集不能画面ではエラーが出るのでこの設定は除外したい。

そこで,このノーマルモードのEnterで改行の挿入方法を考えた。

方法

まず,安直なのは単に以下のようなキー割当が思いつく (参考: ノーマルモード時に、カーソル位置で改行を挿入する – ryutamaki)。

nnoremap <CR> i<CR><ESC>

この方法で大部分は問題ないのだが,これだとヘルプなど編集不能なバッファーでEnterを入力するとその都度エラーがでてしまう。netrwなどのファイラーだと,Enterでディレクトリーを移動できないなど問題が起きる。

そこで,この問題を回避するために以下の設定を.vimrcに記述する。後で参照しやすいようにGitHubにも同じ内容の設定を掲載している。

augroup main
  autocmd!
augroup END

"" Insert line break by Enter in normal mode
autocmd main BufWinEnter *
  \  if &modifiable
  \|   nnoremap <buffer> <CR> i<CR><ESC>
\| else
\| nunmap <buffer> <CR>
\| endif

まず,バッファーごとに編集の可否が変わるため,autocmdBufEnterでバッファーに入るたびにキー割当を設定する。

そして,現在のバッファーが編集可能な場合 (&modifiable) のみ,前述のキー割当を該当バッファーにだけ設定する。これはnnoremapの第1引数に<buffer>を指定することで実現している。現在のバッファーが編集不能な場合,キー割当を解除する。

バッファー単位で設定することで,他の編集不能なバッファーに影響を与えずに設定を適用できる。

結論

VimのノーマルモードのEnterキーでの改行の挿入方法を記した。

これでノーマルモードで通常のテキストエディターと同じく,Enterで改行を挿入できるようになる。

iでインサートモードに遷移してからEnter入力すればいいかと思うが,これは思考が途切れるため避けたかった。

細かいことだが,一つ一つの積み重ねが大きな作業効率改善になる。Vimの設定もどういう意図で設定したか後で忘れてしまうのでここで整理できたのは良かった。

VimのノーマルモードのEnterキーでの改行の挿入方法” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です