无论是否/或?让'n'始终向前搜索用于搜索

时间:2013-08-30 00:41:00

标签: vim editor shortcut

我几乎总是使用/在Vim中搜索,然后继续使用n向前搜索,向后搜索N。但是,有时候,我会使用?跳转到我当前所在行上方几行的项目,在这种情况下,如果我想向前搜索同一项目,我必须使用N代替n,这是一种恼人的心理速度障碍。

所以我的问题是:是否可以让n始终向前,N向后?

P.S。文档似乎暗示它不可能,因为n只是"重复最新的" /"或"?" [count]次",但谁知道。

2 个答案:

答案 0 :(得分:9)

这是从vim邮件列表上的ZyX's post获取的。

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

通过将n索引为两个元素的列表,将v:searchforward映射到基于变量'Nn'的原始N或n。这只能起作用,因为映射是非递归的。如果它是递归的,那么它会称之为自我,你将处于无限循环中。

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')

答案 1 :(得分:6)

这就是它的方式,尽管在开发者的邮件列表上有一些争论......

以下是您可以采取的措施:

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

相关的邮件列表主题,其中包含更多有趣的信息:https://groups.google.com/d/msg/vim_dev/8jSoA931P2Y/JklYtxFOiAYJ