【问题标题】:How can you yank/print the match from a regular expression and only the match of a regular expression?如何从正则表达式中提取/打印匹配项,并且只匹配正则表达式的匹配项?
【发布时间】:2012-09-14 19:34:17
【问题描述】:

我有一大堆变量名,需要在迁移文件、视图、语言环境文件等之间移动。

我不想重新输入所有这些,也不想复制、粘贴和修剪,因为我做的太多了。

我一直在尝试通过正则表达式将它们提取出来,但每次我尝试这样做时,都会打印整行而不是只打印我想要的以 ':' 开头并以 '\s' 结尾的变量名如::name、:email、:home_phone 等。

我怎样才能让这些只是提取出我想要的东西?

我一直在 vim 中尝试这样做:

      :%s/:.*\s/y

这是输入文件:

      <%= f.input  :name %>
      <%= f.input  :email %>
      <%= f.input  :home_phone %>
      <%= f.input  :cell_phone %>
      <%= f.input  :other_phones %>

      <%= f.input  :last_position_candidate_id %>
      <%= f.input  :last_position_title %>
      <%= f.input  :last_position_company_id %>
      <%= f.input  :last_position_start_date %>
      <%= f.input  :last_position_salary %>
      <%= f.input  :last_position_medical_insurance %>
      <%= f.input  :last_position_christmas_bonus %>
      <%= f.input  :last_position_annual_bonus %>
      <%= f.input  :last_position_vehicle %>
      <%= f.input  :last_position_other_benefits %>

      <%= f.input  :conversational_english %>
      <%= f.input  :written_english %>
      <%= f.input  :vehicle %>

这是我想要的:

              :name 
      :email 
      :home_phone 
      :cell_phone 
      :other_phones 
      :last_position_candidate_id 
      :last_position_title 
      :last_position_company_id 
      :last_position_start_date 
      :last_position_salary 
      :last_position_medical_insurance 
      :last_position_christmas_bonus 
      :last_position_annual_bonus 
      :last_position_vehicle 
      :last_position_other_benefits 
      :conversational_english 
      :written_english 
      :vehicle

【问题讨论】:

  • 您使用了不精确的术语:yanking 意味着复制到寄存器(保持文本完整),但您正在尝试替换,这意味着实际更改缓冲区中的内容(删除内容你不想要)。两者实际上可以结合起来(但这是一个高级水平)。这完全取决于您想对文本做什么。
  • 我想保留此文本原样,但我想在新文件中重复使用该文本的大部分。我可以将我想要的部分拉入 VIM 寄存器并切换到新文件或复制文件并提取我想要重用的文本部分。这是不精确的,因为我可以做到这一点。 Yanking 更可取,因为它涉及的步骤更少。
  • 感谢您的澄清。除非你一直这样做,否则克隆和替代更容易;你已经有了答案。只有当您想通过映射自动化整个过程时,Yank 才会更好,但它更复杂,因此不太适合从内存中输入。

标签: regex unix vim


【解决方案1】:
%s/.*\(:\w\+\)\s.*/\1/

更多信息请参见http://vimregex.com/#backreferences

【讨论】:

    【解决方案2】:

    为避免重复输入,可能就足够了

    :set iskeyword+=:
    

    在 Vim 中打开源文件,并在另一个缓冲区中使用内置的插入模式完成(例如 :last_ 后跟 Ctrl + N)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多