【发布时间】:2015-12-15 09:12:34
【问题描述】:
如标题中所述,我想转到 Vim 中当前光标下字符的下一个匹配项。我知道f <character> 等,但我特别想要“这个”字符。我该怎么做?
【问题讨论】:
-
如果您的光标在字符
s上,那么fs;将带您到下一个字符。对;的重复点击将继续将您带到s的更多出现处。
如标题中所述,我想转到 Vim 中当前光标下字符的下一个匹配项。我知道f <character> 等,但我特别想要“这个”字符。我该怎么做?
【问题讨论】:
s 上,那么fs; 将带您到下一个字符。对; 的重复点击将继续将您带到s 的更多出现处。
它本身并不存在。
如果需要,您可以创建一个新映射(例如绑定到<leader>a)。将以下内容添加到您的 .vimrc 并重新启动:
nnoremap <leader>a vy/<C-R>"<CR>
" vy : copy the character under the cursor
" / : open search
" <C-R>" : paste the character
" <CR> : launch the search
然后,接下来的每个搜索都将像往常一样通过 n 键可用。
(Leader 是默认的 \ 键,但可以使用命令重新映射:set mapleader =)
这不是问题的一部分,但我应该补充一点,为了便于导航,最好查看 easymotion 插件并知道它存在。
【讨论】:
:nnoremap <silent> <leader>a vy/<C-R>='\V'.escape(getreg('"'),'\\/')<CR><CR> 这样可以正确转义特殊字符。
我不知道光标下的字符有一个与 * 等效的内置函数,但下面的映射应该满足您的要求:
nnoremap <silent> <key> "zyl:normal! f^Rz^M
nnoremap <silent> <key> "zyl:normal! F^Rz^M
nnoremap <silent> <key> "zyl:normal! t^Rz^M
nnoremap <silent> <key> "zyl:normal! T^Rz^M
^R 是用<C-v><C-r> 获得的,^M 是用<C-v><CR> 获得的。
【讨论】:
<C-v><C-r> 的作用吗?对我来说,单个 Ctrl-R 似乎工作正常。
<C-v><C-r> 用于在缓冲区中插入文字 ^R。
<c-r>这样的keynotation应该可以工作并使其更具可读性。
你可以这样做:
yl:normal! f<Ctrl-R>"<CR>
解释:
yl— 将光标下的字符拉出(复制)到" 寄存器中:normal — 执行随后的普通模式命令f<Ctrl-R>"<CR> — 插入" 的内容注册并运行f{char} 命令。
当然,您需要为命令创建一个映射以使其可用。
【讨论】:
如果您在 * 上有一个可视化映射来搜索下一个选定的内容(例如 one),您只需输入 v*
注意:关于如何扩展 |start| 在 SO 上有几个条目。到可视模式,一个在 vim.wikia 上。
【讨论】:
使用* 向前搜索第[count] 次出现的最靠近光标的单词。我怀疑下一个字符是否有键,但您可以/x 然后n 转到下一个x。
【讨论】: