【发布时间】: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 才会更好,但它更复杂,因此不太适合从内存中输入。