Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.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
如何在Vim中对双线块进行排序?_Vim - Fatal编程技术网

如何在Vim中对双线块进行排序?

如何在Vim中对双线块进行排序?,vim,Vim,我有一个包含以下内容的文件: /** doxygen comment for enum member1 */ COMMON_PREFIX_name1 = 1, /** doxygen comment for enum member2 */ COMMON_PREFIX_name2 = 2, /** doxygen comment for enum member3 */ COMMON_PREFIX_name3 = 3, /** doxygen comment for enum member4 */

我有一个包含以下内容的文件:

/** doxygen comment for enum member1 */
COMMON_PREFIX_name1 = 1,
/** doxygen comment for enum member2 */
COMMON_PREFIX_name2 = 2,
/** doxygen comment for enum member3 */
COMMON_PREFIX_name3 = 3,
/** doxygen comment for enum member4 */
COMMON_PREFIX_name4 = 4,
...

是否可以按照成员名称中的
name1
name2
等后缀对定义进行排序,并将每个注释保持在相应定义的上方?

我提出以下操作顺序

  • 连接成对的行:

    :g/^\s*COMMON_PREFIX_/-j!
    
  • 按变量名称的后缀对连接行进行排序:

    :sort#\*/\s*COMMON_PREFIX_#
    
  • 将已排序的行拆分回:

    :g#\*/\zs\ze\s*COMMON_PREFIX_#s//\r/
    
  • 您可以同时运行所有三个命令:

    :exe'g/^\s*COMMON_PREFIX_/-j!' | sort#\*/\s*COMMON_PREFIX_# | g#\*/\zs\ze\s*COMMON_PREFIX_#s//\r/
    

    你能补充一些解释吗?我不知道-j!角色在做。@johnny:当然。
    :global
    命令的结束部分(在第二个斜杠之后)是另一个Ex命令,用于在与给定模式匹配的行上执行<代码>-j运行
    :使用
    连接
    命令-
    范围上的code>修饰符
    -
    是一行范围
    -1
    中最短的一行,指的是当前行上方的行。谢谢,我一直使用j,没有-或!。我从来不知道我能加入上一排。对不起,我还是不明白“!”的作用@约翰尼:用
    修改器
    :join
    命令不会在连接的行之间插入或删除任何空格。
    :j
    :j之间的区别
    Ex命令与
    J
    gJ
    正常模式命令相同。太好了,感谢您花时间解释。我尝试了vim帮助,但只找到了其他含义。