Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 虚拟列排序_Sorting_Vim - Fatal编程技术网

Sorting 虚拟列排序

Sorting 虚拟列排序,sorting,vim,Sorting,Vim,为什么我不能对下表的第三列进行排序 第1列使用:sort/*\%1v/进行正常排序: Audi *** **** ** BMW ***** *** ***** Mercedes **** ***** *** Opel *** *** * BMW ***** *** ***** Mercedes **** ***** *** Opel

为什么我不能对下表的第三列进行排序

第1列使用
: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:是的,完全忽略了该部分。非常感谢。