2014-02-13 57 views
1

我有以下的文字中選擇單引號之間的所有字符串:使用vim

select region_id, 'Males_Negative_Nil_income_Age_15_19_years' as category, Males_Negative_Nil_income_Age_15_19_years as number from income_mf_pivot 
union 
select region_id, 'Males_Negative_Nil_income_Age_20_24_years' as category, Males_Negative_Nil_income_Age_20_24_years as number from income_mf_pivot 
union 
select region_id, 'Males_Negative_Nil_income_Age_25_34_years' as category, Males_Negative_Nil_income_Age_25_34_years as number from income_mf_pivot 
union 
select region_id, 'Males_Negative_Nil_income_Age_35_44_years' as category, Males_Negative_Nil_income_Age_35_44_years as number from income_mf_pivot 

我想用(我通過選擇設定)完成了爲

Males_Negative_Nil_income_Age_15_19_years, 
Males_Negative_Nil_income_Age_20_24_years, 
Males_Negative_Nil_income_Age_25_34_years, 
Males_Negative_Nil_income_Age_35_44_years 

我認爲這將會像/ g一樣做選擇(使用它來選擇兩者之間的所有內容),然後以某種方式抽出它,但是我已經用盡了。

我不是一個vim純粹主義者。我不介意它是否不止一個命令。我在此之後才能夠在整個文件上運行。

回答

2

yi'命令允許您猛拉之間的文本單引號,但一次只適用於單個實例。

只要寬度是相同的(具有矩形的選擇即你),可以使用嵌段視覺模式,開始與<C-v>(在Windows上經常<C-q>)。

要獲得單引號內的所有文本,您可以使用我的ExtractMatches plugin。它提供了以下命令:

:%YankMatchesToReg /'\zs[^']\+\ze'/ 

之後,你可以p ASTE的文本,並添加尾隨逗號。如果所有匹配都應該在一行中,我的UnconditionalPaste plugin中的g,p可以一次完成。

+1

雖然我沒有直接使用你的插件,但我通過你的插件頁面找到了[vim-yankitute](https://github.com/someboddy/vim-yankitute),而且我更熟悉如何安裝它。雖然正則表達式是相同的,這與我之後的完全一致,非常感謝。 – kelso

2

你可以放在前M光標,然後開始塊可視模式CTRL-v,移動到你想6je猛拉什麼的另一端,並與y進行粘貼。 雖然這樣可以抽出空白的線條,但它們應該很容易被粘貼掉。

的另一種方式,這也將追加逗號是使用外部濾波器像sed

:r!sed -n "s/.*'\(Males[^']*\).*/\1,/p" % 

這導致

Males_Negative_Nil_income_Age_15_19_years, 
Males_Negative_Nil_income_Age_20_24_years, 
Males_Negative_Nil_income_Age_25_34_years, 
Males_Negative_Nil_income_Age_35_44_years, 
1

要選擇

Males_Negative_Nil_income_Age_15_19_years 

select region_id, 'Males_Negative_Nil_income_Age_15_19_years' as category, Males_Negative_Nil_income_Age_15_19_years as number from income_mf_pivot 

使用vi'(選擇內單引號)

:help object-select閱讀有關它

2

我會假設恰好有在每個目標行中使用兩個單引號,就像你的示例文本。

我會在可視模式下選擇所需的行,然後用進入Ex模式。範圍''<,'>'(代表視覺選擇)將被自動插入。我將完成,爲

:'<,'>v/'.*'/d 

(刪除不包含兩個人物都行),擺脫了‘聯盟’線。然後v:代替這兩個命令重新選擇的可視的選擇,並完成命令行

:'<,'>s/^[^']*'\|'.*//g 
:'<,'>-s/$/, 

或也許,

:'<,'>s/.*'\(.*\)'.*/\1, 

,然後除去最後一行爲,