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

dor*_*erg 7 vim editor shortcut

我几乎总是在Vim中搜索/,然后继续搜索向前n和向后搜索N.然而,有时我?会跳到我当前所在线上几行的一个项目,在这种情况下,如果我想向前搜索同一个项目,我必须使用N而不是n一个烦人的心理速度磕碰.

所以我的问题是:是否有可能n永远前进,N后退?

PS文档似乎暗示它不可能,因为n简单地"重复最新"/"或"?"[计数]次",但谁知道.

FDi*_*off 9

这是从vy邮件列表上的ZyX帖子中获取的.

noremap <expr> n 'Nn'[v:searchforward]
noremap <expr> N 'nN'[v:searchforward]
Run Code Online (Sandbox Code Playgroud)

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

v:searchforward == 1(向前搜索)映射相当于

noremap <expr> n n
noremap <expr> N N
Run Code Online (Sandbox Code Playgroud)

v:searchfoward == 0(向后搜索)映射相当于

noremap <expr> n N
noremap <expr> N n
Run Code Online (Sandbox Code Playgroud)

此映射适用于"正常","可视"和"操作员暂挂"模式.


我可能会这样写.(虽然我不确定这是否更清楚)

noremap <expr> n (v:searchforward ? 'n' : 'N')
noremap <expr> N (v:searchforward ? 'N' : 'n')
Run Code Online (Sandbox Code Playgroud)


glt*_*lts 6

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

以下是您可以做的事情:

:noremap n /<CR>
:noremap N ?<CR>
Run Code Online (Sandbox Code Playgroud)

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