在匹配之间复制,而不是在线之间复制,而是在匹配点之间复制

时间:2010-09-29 08:37:21

标签: vim matching

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

我尽量不使用“写”,“放”或“读”字样,因为VIM对它们有特殊意义。我尝试复制(抱歉不是指VIM的复制命令)匹配文件之间的东西。你怎么做,没有复制整行?

虚拟示例

文字:

  

不要复制我的dummy1你好世界   请复制我dummy2不要复制我

     有些进入,还应该用btw进入比赛点dummy1还没有!

     

尚未!

     

副本即将结束! dummy2

COPIED:

  

你好世界请复制我

  

dummy1你好世界请复制我dummy2

2 个答案:

答案 0 :(得分:3)

要在startend之间复制文字,请使用以下正常序列 模式命令。

  

/start/e+1 输入 y/end/ 输入

第一个命令搜索下一次出现的模式匹配 开始复制的文本片段,并将光标定位到第一个 比赛结束后的角色。第二个人猛拉一切直到下一个 匹配结束模式。

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

  • Ex命令

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

    (键入^M Ctrl + V 输入。)

  • 映射

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

    (或以通常的方式录制宏:输入q,注册以存储 宏,比方说,y,然后在答案的顶部显示命令 最后是q。)

答案 1 :(得分: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