:/string
搜索单词,但是如果必须搜索整个当前行,该怎么做。例如,如果cursor
目前位于line 1
,如何与:/
类似地搜索包含整个当前行的文本。光标应跳到匹配的line 4
,然后再跳到line 7
#1 楼
这是我的操作方法:添加行(到未命名的寄存器中),但不包括结尾的换行符:
0y$
不可思议的搜索:
/\V
添加虚线:
<c-r>"
启动搜索:
<cr>
@EvergreenTree指出注释,您当然可以创建映射以一次性执行所有步骤:
nnoremap <leader>* 0y$/\V<c-r>"<cr>
相关帮助主题:
:help registers
:help /magic
:help c_CTRL-R
NB如果您要搜索的行中包含反斜杠,即使进行非常神奇的搜索,您仍需要遍历并转义(通过添加另一个反斜杠)。
#2 楼
尤其是出于制图目的,我发现使用getline()
比拉动自己更优雅。用字符串getline()
调用'.'
将返回光标下方的行。有两个不错的选择::exec '/' . getline('.')
将字符串
'/'
和getline()
返回的内容解析在一起,并将其作为vim命令执行。或
/<C-r>=getline('.')<CR>
,它使用表达式寄存器
@=
。在第一个=
之后计算<CR>
之后的表达式,并将其放在命令行中。评论
真好!当该行包含/或'之类的字符时,它不能很好地工作。无论如何,我今天学到了一些东西!谢谢
–Luc M
17年8月3日在16:16
#3 楼
如果您的行包含某些被解释为模式一部分的项目,则现有答案均会失败。\V
点可以到达大部分位置,但仍会与反斜杠混在一起。 >然后,如果要在映射中使用它,则最后需要一两个<Enter>
,这取决于您希望它如何工作。评论
很好的答案!行通常包含两种斜线,这会混淆其他答案。最后一个转义参数也应该包含正斜杠:escape(…,'/ \')
– bobbogo
19年1月15日在10:04
#4 楼
就个人而言,我会得到一个视觉明星插件(那里几乎没有)。有一个不错的Vimcast关于此内容:搜索选定的文本。这意味着您可以在视觉上选择该行,然后按*
。 /> 注意:此映射不支持可视块(
vimrc
)。评论
我添加了映射,但实际上它跳到第一个匹配的单词,而不是选择整行。
–manav m-n
16年1月22日在15:04
如果匹配一个单词,那么我认为您是在正常模式下使用*或未正确安装映射。
– Peter Rincker
16年1月22日在15:15
#5 楼
安装了vim-asterisk后,只需使用V$*
(或0v$*
)来选择当前行并搜索它。 评论
*是否仅搜索光标下方的单词,而不是当前的视觉选择?
–EvergreenTree
16年1月22日在14:06
@EvergreenTree我确实忘记提及插件了。感谢通知
–adelarsq
16年1月22日在16:17
#6 楼
完成此操作的另一种方法是使用命令行窗口:打开命令行窗口按
yy/<Ctrl-F>p<Enter>
粘贴行按Enter开始搜索
评论
您还可以使用q /获得与/
– evilsoup
16年1月23日,0:59
#7 楼
http://vim.wikia.com/wiki/Searching_for_expressions_which_include_slashes指出可以直接设置搜索寄存器,如下所示::let @/='/abc/def/ghi/'
这允许在线搜索甚至在行中包含斜线时也可以使用。
评论
当然,您也可以为此创建一个映射:nnoremap {key} 0y $ / \ V
–EvergreenTree
16年1月21日在23:50