これは、vim メーリング リストの ZyX の投稿から引用したものです。
noremap <expr> n 'Nn'[v:searchforward]
noremap <expr> N 'nN'[v:searchforward]
2 つの要素のリストとしてインデックス付けすることによりn
、変数に基づいて元の N または nにマップされます。これは、マッピングが非再帰的であるためのみ機能します。再帰的である場合、これはそれを自己と呼び、無限ループに陥ります。v:searchforward
'Nn'
v:searchforward == 1
(前方検索)マッピングが同等の場合
noremap <expr> n n
noremap <expr> N N
およびv:searchfoward == 0
(後方検索)マッピングが同等の場合
noremap <expr> n N
noremap <expr> N n
このマッピングは、Normal、Visual、および Operator 保留モードで機能します。
多分こんな感じで書いた。(これがより明確かどうかはわかりませんが)
noremap <expr> n (v:searchforward ? 'n' : 'N')
noremap <expr> N (v:searchforward ? 'N' : 'n')