Make 'n' always search forwards, regardless of whether / or ? was used for searching

旧城冷巷雨未停 提交于 2019-12-21 00:27:11

问题


I almost always search in Vim with /, and then continue searching forwards with n and backwards with N. Sometimes, however, I use ? to jump to an item just a few lines above the line I'm currently at, and in that case, if I want to search the same item forwards, I have to use N instead of n, an annoying mental speed bump.

So my question is: is it possible to make n always go forwards, and N backwards?

P.S. Documentation seems to hint that it's not possible, since n simply "Repeats the latest "/" or "?" [count] times", but who knows.


回答1:


This was taken from ZyX's post on the vim mailing list.

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

It maps n to the original N or n based off of the variable v:searchforward by indexing 'Nn' as a list of two elements. This only works because the mapping is non-recursive. If it was recursive this would call it self and you would be in an infinite loop.

When v:searchforward == 1 (search forward) the mappings are equivalent to

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

and when v:searchfoward == 0 (search backwards) the mappings are equivalent to

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

This mapping works in Normal, Visual, and Operator pending modes.


I probably would have written it like this. (Although I'm not sure this is any clearer)

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



回答2:


That is just the way it is, notwithstanding some debate on the developers' mailing list ...

Here's what you can do about it:

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

Relevant mailing list thread with a lot more interesting info: https://groups.google.com/d/msg/vim_dev/8jSoA931P2Y/JklYtxFOiAYJ



来源:https://stackoverflow.com/questions/18523150/make-n-always-search-forwards-regardless-of-whether-or-was-used-for-searc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!