1
:/From book:/,/$/ cmd_copy chapters_from_match_@From_book@_until_end_of_line.txt

我尽量不使用“写”、“放”或“读”这些词,因为 VIM 对它们有特殊意义。我尝试将匹配项之间的内容复制(抱歉没有提到 VIM 的复制命令)到文件。你是怎么做到的,而不是复制整行?

虚拟示例

文本:

不要模仿我 dummy1 hello world 请模仿我 dummy2 不要模仿我

一些进入,应该也可以与进入顺便说一句匹配点虚拟1还没有!

还没有!

副本即将结束!假人2

已复制:

你好世界请复制我

或者

dummy1 你好世界,请复制我 dummy2

4

2 回答 2

3

start要在和之间复制文本end,请使用以下正常模式命令序列。

/start/e+1Entery/end/Enter

第一个命令搜索要复制的文本片段的模式匹配开始的下一个匹配项,并将光标定位到匹配后的第一个字符。第二个将所有内容都拉出,直到结束模式的下一个匹配。

根据使用命令的上下文,它们可以重写为 Ex 命令、映射或宏。

  • 防爆命令

    :norm!/start/e+1^My/end/
    

    (键入^MCtrl+ VEnter。)

  • 映射

    :nnoremap <leader>y /start/e+1<cr>y/end/<cr>
    
  • :let @y = "/start/e+1\ry/end/\r"
    

    (或以通常的方式记录宏:键入q,注册以存储宏,例如,y然后是答案顶部显示的命令,然后是 final q。)

于 2011-10-14T14:00:12.353 回答
0

那么,为什么不使用

:1s/^\_.\{-}dummy1//    "first line: delete everything until first occurrence of dummy1
:%s/dummy2\zs\_.\{-}\zedummy1/\n/
:1s/\_.*dummy2\zs\_.*// "delete from last occurrence of dummy2 till EOF
于 2010-09-29T14:31:48.410 回答