2013-12-11 24 views
0

我有一個長行的文件,需要查看/複製整個文件的特定位置中的值,但複製行的其餘部分。僅複製第n列的值Vim

如果文本寬度足夠小,〜184列,我可以使用:設置colorcolumnnum來突出顯示值。然而,超過184個字符,它有點笨重的滾動。

我試過了:g/\%1237c/y Z,對於我所需要的位置之一,但是那個抽出了整條線。例如對於一個較小的樣本:g/\%49c/y Z會將所有第1行和第2行全部抽出,但是我想要在該列上抽取或複製該字符,即=第1行和第2行的x 。

vim: filetype=help foldmethod=indent foldclose=all modifiable noreadonly 
Table of Contents *sfcontents* *vim* *regex* *sfregex* 
*sfsearch* - Search specific commands 
|Ampersand-replaces-previous-pattern| 
|append-a-global-search-to-a-register| 
*sfHelp* Various Help related commands 
+0

您可能包含您要從中複製的文件內容的示例嗎?我無法從問題中完全知道你究竟想要做什麼。 –

+0

不要以爲我有能力附加文件和發佈1500字符寬的例子不會這樣做:)但你的答案後給出答案。該文件看起來像下圖(Nowrap模式),並且我想要它自己的U和文件中的最後一個D在位置U = 56和D = 265,另一個文件在位置1265有D。2929122011000000000006410240024097 U 000000 000000 00000000 D – Steve

回答

1

有兩個問題與:g命令:

  1. 對於每個匹配線,光標被定位在第一。所以即使你在特定的欄目中匹配,該位置也會丟失。
  2. 原子\%c實際上與字節索引相匹配(Vim有點混淆地命名「列」),所以你的測量對於Tab和非ASCII字符是關閉的。改爲使用虛擬列原子\%v

相反的:global,我會用:substitute用替代表達,在how to extract regex matches using vim描述的成語:

:let t=[] | %s/\%49v./\=add(t, submatch(0))[-1]/g | let @@ = join(t, "\n") 

另外,如果你安裝我ExtractMatches plugin,我是短命令調用:

:YankMatchesToReg /\%50v./ 
+0

Ingo。非常感謝,排序問題 – Steve

+0

Ingo我試圖連接YankMatchestoReg,因爲我有我需要的幾個位。如果需要,我可以稍後合併,但是想知道是否有辦法做到這一點。我嘗試了以下第一行在字符位置有D的地方265虛擬嘗試1 YankMatchesToReg /\%5v./x | :YankMatchesToReg /\%265v./X 「XP的結果(結果1線) 12M 嘗試2 YankMatchesToReg /\%5v./x 然後 YankMatchesToReg/\%265V。/ X 結果的「XP(顯示器不顯示它,但是結果是在不同的行) 中號 d 應看起來像在不同的行 1 d 中號 – Steve

+0

很難遵循(在未格式化的註釋中)你想要的,但是該命令將總是在分隔的行上附加新的匹配。 –