ariyasacca

カテゴリ一覧

Biz | SF | Software | tDiary | Web | ゲーム | サバティカル | スポーツ | ミステリ | メタル | 健康 | 投資 | 携帯 | 時事ネタ | 死生観 | 資格 | 雑記
2004|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|

2012-02-27 (月) [長年日記]

[Software]Vimのnmapとnnoremapの違い

自分の設定ファイルには、どこかで拾ったキーマップが沢山入っていて、ノーマルモード時の設定が、よく考えずにほとんどnmapで定義されていたのだけど、やっと違いを理解した。

「Vimテクニックバイブル」P.15より引用(強調は私です)。

  • mapはキーシーケンスを展開したあと、さらに別のマップを適用しようとします
  • noremapは一度だけ展開します

使い分けに迷った場合は、通常はnoremapを使い、プラグインが提供しているような<Plug>を含むキーシーケンスへマッピングする場合はmap系を使えばおおむね問題ないでしょう。

つまり、良くある「検索語句の位置を自動で画面の中心にする」というような場合は、nnoremapでは一度しか展開されず、その後の「zz」で中心に移動してもらえない。

よって、この場合はnmapでマッピングするのが正しい。

nmap n nzz
nmap N Nzz

再帰的なマッピングが無いと期待通りに動かないもの以外は全てnnoremapに定義し直した。

色々な基礎を理解せずにVimを使って来たことが次々と明らかになってきてヤバイ。

Vimテクニックバイブル ~作業効率をカイゼンする150の技(Vimサポーターズ)

2012-02-28追記

勘違いしてました、thincaさんからのツッコミにあるとおり、zzを本来の動きとは別の動作にマッピングしていない限り、nnoremapを使えば大丈夫でした。記事は元のままにしておきますが、ご注意下さい。

本日のツッコミ(全2件) [ツッコミを入れる]
thinca (2012-02-28 (火) 11:05)

>nmap n nzz<br>>nmap N Nzz<br><br>この場合は、zzに独自のマッピングをしていない限りはnnoremapで大丈夫です。<br>逆に、zzに独自のマッピングをしていて、それを使いたい場合はnmapを使う必要があります。

雷悶 (2012-02-28 (火) 21:25)

>thincaさん<br>コメントありがとうございます、指摘頂いたとおり、nnoremapでも大丈夫でした。<br><br>勘違いしていたことを記事にも追記しておきます。


最近のツッコミ

  1. ウルトラマン (2019-04-18(木)19:22)「声優代節約の為やぞ」
  2. ああああ (2019-03-28(木)15:19)「バージョンは好きにしていいのか。 」
  3. 雷悶 (2019-01-06(日)09:46)「時代はProっしょ~」

参号館  の中の  日記(ariyasacca)

トップ «前の日記(2012-02-26 (日)) 最新 次の日記(2012-03-01 (木))» 編集