Answers:
您可以使用以下方法来更改的行为,n
并向N
下/向上连续搜索:
nnoremap <expr> n 'Nn'[v:searchforward]
nnoremap <expr> N 'nN'[v:searchforward]
更新:它是如何工作的?
这使用表达式映射,每次遇到lhs时,它将映射的lhs映射到将要评估的表达式。请参阅:h map-expression
帮助。
发生的事情是,将v:searchforward变量(它确定最后一次搜索的方向的内部状态,请参阅参考资料:h v:searchforward
)用作其前面字符串的索引。因此,在第一个地图的情况下,如果最后一个搜索方向是向前,则n将被映射到'n'(索引为1,表示返回第二个字符),如果它是向后的,则'n'将被映射到'N'(因为v:searchforward变量为0,因此将返回'N'。
编写这些映射的另一种方法是(可能更清楚):
nnoremap <expr> n (v:searchforward ? 'n' : 'N')
nnoremap <expr> N (v:searchforward ? 'N' : 'n')
也有一些插件可以做到这一点(即SearchRepeat插件,也可能还有其他插件)。
v:searchforward
作为索引。
我正在使用SearchIndex插件。要使用Christian Brabandt的答案,但要保持插件的功能,即每次输入n或时都显示匹配号N,因此请将其放在vimrc中:
nnoremap <silent><expr> n (v:searchforward ? 'n' : 'N') . ":SearchIndex<CR>"
nnoremap <silent><expr> N (v:searchforward ? 'N' : 'n') . ":SearchIndex<CR>"