<template>
<h1>Hello</h1>
</template>
Run Code Online (Sandbox Code Playgroud)
如果我使用搜索这个
/<template>\_.*template>
Run Code Online (Sandbox Code Playgroud)
如何拉动/剪切所选内容以将其放在文件中的其他位置?
有更好的方法来做这件事吗?
问题是,搜索后,您得到的是匹配项,而不是选择项。如果您想对该匹配执行某些操作,则必须将该匹配转换为“动作”、“选择”或“范围”。多才多艺:help gn可以帮助解决这三个问题。
搜索完成后,您可以执行以下操作:
\ndgn\nRun Code Online (Sandbox Code Playgroud)\n剪切匹配的文本,然后将光标移至其他位置并按p或P将其放置在那里。问题在于寄存器是按字符排列的,因此您的代码片段可能会插入到行的中间,这不好。您还可以执行以下操作:
:/foo/put=@"\nRun Code Online (Sandbox Code Playgroud)\n或者:
\n:6put=@"\nRun Code Online (Sandbox Code Playgroud)\n这将以逐行方式放置文本,因为 Ex 命令如下:put都是逐行的。
参见:help gn、:help :range、 和:help :put。
或者,您可以在视觉线模式下选择匹配的文本:
\nVgn\nRun Code Online (Sandbox Code Playgroud)\n并用 切割它d。由于这是在可视行模式下完成的,因此寄存器是逐行的,因此您可以将代码片段放在p/P放在任何地方,而不会产生太大的风险。
通过上述方法,您可以边做边决定要做什么,一个接一个的原子操作。去那里。拿着它。去那里。去做。
\n这绝对没问题,但多年来,我开始欣赏 Ex 命令在此类场景中的更高水平的表达能力。
\n这是我的做法(“在最后一行后移动文本”,此处):
\n:/<template/,/<\\/template>/m$\nRun Code Online (Sandbox Code Playgroud)\n看:help :move。
这是另一种方法,它混合了上面的所有方法/方法再加上一种:
\n/<template>\\_.*template><CR> \nvgn\n:'<,'>m$\nRun Code Online (Sandbox Code Playgroud)\n其中\xe2\x80\xa6
\nFWIW,这里以简洁的方式显示了上述所有方法:
\n/<template>\\_.*template><CR>\ndgn\n<motion>\np\nRun Code Online (Sandbox Code Playgroud)\n/<template>\\_.*template><CR>\ndgn\n<motion>\n:<address>put=@"\nRun Code Online (Sandbox Code Playgroud)\n/<template>\\_.*template><CR>\nVgn\nd\n<motion>\np\nRun Code Online (Sandbox Code Playgroud)\n:/<template/,/<\\/template>/m$\nRun Code Online (Sandbox Code Playgroud)\n/<template>\\_.*template><CR> \nvgn\n:'<,'>m$\nRun Code Online (Sandbox Code Playgroud)\n