自分の設定ファイルには、どこかで拾ったキーマップが沢山入っていて、ノーマルモード時の設定が、よく考えずにほとんどnmapで定義されていたのだけど、やっと違いを理解した。
「Vimテクニックバイブル」P.15より引用(強調は私です)。
- mapはキーシーケンスを展開したあと、さらに別のマップを適用しようとします
- noremapは一度だけ展開します
使い分けに迷った場合は、通常はnoremapを使い、プラグインが提供しているような<Plug>を含むキーシーケンスへマッピングする場合はmap系を使えばおおむね問題ないでしょう。
つまり、良くある「検索語句の位置を自動で画面の中心にする」というような場合は、nnoremapでは一度しか展開されず、その後の「zz」で中心に移動してもらえない。
よって、この場合はnmapでマッピングするのが正しい。
nmap n nzz nmap N Nzz
再帰的なマッピングが無いと期待通りに動かないもの以外は全てnnoremapに定義し直した。
色々な基礎を理解せずにVimを使って来たことが次々と明らかになってきてヤバイ。
勘違いしてました、thincaさんからのツッコミにあるとおり、zzを本来の動きとは別の動作にマッピングしていない限り、nnoremapを使えば大丈夫でした。記事は元のままにしておきますが、ご注意下さい。
最近のツッコミ
参号館 日記(ariyasacca)
>nmap n nzz<br>>nmap N Nzz<br><br>この場合は、zzに独自のマッピングをしていない限りはnnoremapで大丈夫です。<br>逆に、zzに独自のマッピングをしていて、それを使いたい場合はnmapを使う必要があります。
>thincaさん<br>コメントありがとうございます、指摘頂いたとおり、nnoremapでも大丈夫でした。<br><br>勘違いしていたことを記事にも追記しておきます。