2012-09-14 66 views
0

我有一大堆我需要在迁移文件,视图,区域设置文件等之间移动的变量名称。如何从正则表达式中拉出/打印匹配,并且只匹配正则表达式的匹配?

我不想重新键入所有这些,也不想复制,粘贴和修剪,因为我已经完成了太多工作。

我一直试图通过一个正则表达式来解决这些问题,但是每次我尝试这样做时,整行都会被打印出来,而不是我想以':'开头的变量名,并以'\ s结尾'如::姓名,电子邮件,:home_phone等。

我怎样才能得到这些只是提取出我想要的?

我一直在努力做到这一点与vim:

 :%s/:.*\s/y 

这里的输入文件:

这是我想获得:

   :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 
+0

你使用的是不精确的术语:yanking意味着复制到一个寄存器(保持文本完好),但你显示的是尝试替换,这意味着实际上改变了缓冲区中的内容(切掉你不想要的东西)。两者实际上可以结合(但这是一个高级的水平)。这完全取决于你想要对文本做什么。 –

+0

我想保留这个文本不动,但我想在新文件中重复使用大部分文本。我可以将我想要的部分抽出到VIM寄存器中,然后切换到新文件或复制文件并提取我想要重复使用的那部分文本。这是不准确的,因为我可以做到这一点。 Yanking更好,因为它涉及的步骤较少。 – ovatsug25

+0

感谢您的澄清。除非你一直这样做,克隆和替代品更容易;你已经有了答案。当你想通过映射来自动化整个过程时,Yank只会更好,但它更复杂,因此不适合从内存中打字。 –

回答

1

要避免再次输入,这可能足以

:set iskeyword+=: 

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