Sorting 虚拟列排序
为什么我不能对下表的第三列进行排序 第1列使用Sorting 虚拟列排序,sorting,vim,Sorting,Vim,为什么我不能对下表的第三列进行排序 第1列使用:sort/*\%1v/进行正常排序: Audi *** **** ** BMW ***** *** ***** Mercedes **** ***** *** Opel *** *** * BMW ***** *** ***** Mercedes **** ***** *** Opel
:sort/*\%1v/
进行正常排序:
Audi *** **** **
BMW ***** *** *****
Mercedes **** ***** ***
Opel *** *** *
BMW ***** *** *****
Mercedes **** ***** ***
Opel *** *** *
Audi *** **** **
BMW ***** *** *****
Audi *** **** **
Opel *** *** *
Mercedes **** ***** ***
第2列也使用:sort/*\%2v/
进行正常排序:
Audi *** **** **
BMW ***** *** *****
Mercedes **** ***** ***
Opel *** *** *
BMW ***** *** *****
Mercedes **** ***** ***
Opel *** *** *
Audi *** **** **
BMW ***** *** *****
Audi *** **** **
Opel *** *** *
Mercedes **** ***** ***
但是第3列没有使用:sort/*\%3v/
进行排序:
Audi *** **** **
BMW ***** *** *****
Mercedes **** ***** ***
Opel *** *** *
BMW ***** *** *****
Mercedes **** ***** ***
Opel *** *** *
Audi *** **** **
BMW ***** *** *****
Audi *** **** **
Opel *** *** *
Mercedes **** ***** ***
我做错了什么?你被一个错误观念愚弄了:原子指定字符列(但不将它们作为匹配项使用);我认为您需要根据以空格分隔的文本/报纸或表格中所谓的“列”进行排序 即,第一个示例按字符B、A、O和M排序;第二个在M、u、p、e上,而不是
*
上(取决于您的区域设置,大写字母排序在小写之前)
如果您有:set ruler
,您将在右下角看到当前列。在您的示例中,第三个文本列从位置20开始,因此您必须使用
:%sort /.*\%20v/
在第三个文本列上排序
对于Vim,虚拟列意味着屏幕列,通过一个(单宽)字符所占的空间来衡量。还有一个列,表示字符表示的字节数(有些不直观)。这种区别对于非ASCII、不可打印和
字符很重要。您被一个错误的概念愚弄了:\%v
原子指定字符列(但不将它们作为匹配项使用);我认为您需要根据以空格分隔的文本/报纸或表格中所谓的“列”进行排序
即,第一个示例按字符B、A、O和M排序;第二个在M、u、p、e上,而不是*
上(取决于您的区域设置,大写字母排序在小写之前)
如果您有:set ruler
,您将在右下角看到当前列。在您的示例中,第三个文本列从位置20开始,因此您必须使用
:%sort /.*\%20v/
在第三个文本列上排序
对于Vim,虚拟列意味着屏幕列,通过一个(单宽)字符所占的空间来衡量。还有一个列,表示字符表示的字节数(有些不直观)。这种区别对于非ASCII、不可打印和
字符很重要。您的错误之处在于考虑
**
*****
***
*
作为“虚拟专栏”
“虚拟列”是单单元格宽的列
在第一个代码段中,匹配的列如下:
\%1v \%2v \%3v
A u d
B M W
M e r
O p e
因此,您的行不是按星号的数量排列的,而是按字母顺序排列的
我尝试了以下命令按星号的数量排序,但它们似乎不可靠
:%sort /.*\%12c.*\%16c/
:%sort /.*\%20c.*\%24c/
:%sort /.*\%30c.*\%34c/
你做错的是考虑
**
*****
***
*
作为“虚拟专栏”
“虚拟列”是单单元格宽的列
在第一个代码段中,匹配的列如下:
\%1v \%2v \%3v
A u d
B M W
M e r
O p e
因此,您的行不是按星号的数量排列的,而是按字母顺序排列的
我尝试了以下命令按星号的数量排序,但它们似乎不可靠
:%sort /.*\%12c.*\%16c/
:%sort /.*\%20c.*\%24c/
:%sort /.*\%30c.*\%34c/
嗯,好的。下次我会努力提高打字速度;-)谢谢,英戈。你搞定了。但我的下一个问题是:在Vim中,是否有可能实现我所追求的那种类型,即通过“报纸专栏”?如果我用
Ctrl-G
选择一个星号块,然后执行,那就不那么容易了。您可以使用=virtcol('.')
将当前列插入命令。看看这个插件;它有一个:Sort
命令。下次我会努力提高打字速度;-)谢谢,英戈。你搞定了。但我的下一个问题是:在Vim中,是否有可能实现我所追求的那种类型,即通过“报纸专栏”?如果我用Ctrl-G
选择一个星号块,然后执行,那就不那么容易了。您可以使用=virtcol('.')
将当前列插入命令。看看这个插件;它有一个:Sort
命令。我喜欢你的“直观”解释!排序尝试不起作用的原因是您似乎忽略了/{pattern}/
(不直观地)覆盖了被跳过的部分。@IngoKarkat:是的,完全忽略了该部分。非常感谢。我喜欢你的“视觉”解释!排序尝试不起作用的原因是您似乎忽略了/{pattern}/
(不直观地)覆盖了被跳过的部分。@IngoKarkat:是的,完全忽略了该部分。非常感谢。