2013-08-30 8 views
7

ほとんどの場合、Vimで/を検索してから、nで前方検索を続け、Nで後方検索を続けます。しかし、時々、?を使用して、私が現在行っている行の数行上の項目にジャンプします。その場合、同じ項目を前方に検索したい場合は、nの代わりにNを使用する必要があります。迷惑な精神的なスピードバンプ。「/ n」が/または?が検索に使用されました

私の質問は:nは常に前進し、後はNにすることはできますか?

P.S.ドキュメンテーションは、nが単に「最新の "/"または "[回数]回繰り返す"が、知っているので、不可能であることを示唆しているようです。

答えて

9

これはvimメーリングリストのZyX's postから取ったものです。

noremap <expr> n 'Nn'[v:searchforward] 
noremap <expr> N 'nN'[v:searchforward] 

それは二つの要素のリストとしてインデキシング'Nn'によって可変v:searchforwardのオフに基づいて元のNまたはNにnをマッピングします。これは、マッピングが非再帰的であるためにのみ機能します。それが再帰的であれば、これは自己を呼び出すでしょうし、あなたは無限ループになります。

ときv:searchforward == 1(前方検索)マッピングが

noremap <expr> n n 
noremap <expr> N N 

v:searchfoward == 0に相当します(後方検索)マッピングが

noremap <expr> n N 
noremap <expr> N n 

に相当します。このマッピングは、Visual、ノーマルで動作し、オペレータ保留モード。


これはおそらくこのように書かれています。 (これは明確ではありませんが)

noremap <expr> n (v:searchforward ? 'n' : 'N') 
noremap <expr> N (v:searchforward ? 'N' : 'n') 
+0

これは独創的なマッピングです – dorserg

+0

ところで、このスレッドがポップアウトされたので、私はあなたのために新しいソリューションを持っていますが、最初に私は望んでいました /パターン と繰り返すことができます「nnnn」というクレームがあります。 – ZyX

6

は、ここではそれについて何ができるかだ...開発者のメーリングリスト上でいくつかの議論にもかかわらず、それがあるだけの方法である:

:noremap n /<CR> 
:noremap N ?<CR> 

多いと関連メーリングリストのスレッドもっと興味深い情報:https://groups.google.com/d/msg/vim_dev/8jSoA931P2Y/JklYtxFOiAYJ

+0

私は '/ e'フラグを失っているようです。 – FDinoff

+0

ああ、そうです、私はそれを ':s'と混同し、十分にテストしませんでした。私は別の問題があるのだろうかと思っていますが、解決策はほとんど単純すぎるようです... – glts

+0

私はスレッドの底にZyxの答えが好きです。 (もしあなたが最初に投稿していなければ、その変数を見つけることができたらどこに行ったのか) 'noremap n 'N' [v:searchforward]'と 'noremap N 'n' [v:searchforward]' – FDinoff

関連する問題