dor*_*erg 7 vim editor shortcut
我几乎总是在Vim中搜索/,然后继续搜索向前n和向后搜索N.然而,有时我?会跳到我当前所在线上几行的一个项目,在这种情况下,如果我想向前搜索同一个项目,我必须使用N而不是n一个烦人的心理速度磕碰.
所以我的问题是:是否有可能n永远前进,N后退?
PS文档似乎暗示它不可能,因为n简单地"重复最新"/"或"?"[计数]次",但谁知道.
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)
这就是它的方式,尽管在开发者的邮件列表上有一些争论......
以下是您可以做的事情:
:noremap n /<CR>
:noremap N ?<CR>
Run Code Online (Sandbox Code Playgroud)
相关的邮件列表主题包含更多有趣的信息:https://groups.google.com/d/msg/vim_dev/8jSoA931P2Y/JklYtxFOiAYJ