如何根据案例标签对每个案例(作为大型案例构造的一部分)关联的代码块进行排序?
我想要的是改造 -
switch(val)
{
case C_LABEL:
/* do something */
break;
case A_LABEL:
/* do something else*/
break;
case B_LABEL:
/* do something really different */
break;
default:
printf("'val' not recognized");
}
进入 -
switch(val)
{
case A_LABEL:
/* do something else */
break;
case B_LABEL:
/* do something really different */
break;
case C_LABEL:
/* do something */
break;
default:
printf("'val' not recognized");
}
答案 0 :(得分:4)
将每个箱子变成一个班轮:
:fromline,tolineg/case/.,/break/s/\n/§
对它们进行排序:
:fromline,tolinesort
重新格式化:
:fromline,tolines/§/\r/g
注意:
答案 1 :(得分:2)
我的AdvancedSorters plugin简化了@ romainl答案中列出的步骤:
:/^switch/+2,/default:/-1 SortRangesByHeader /case /
初始范围限制了对case
部分的行的排序。插件中的:SortRangesByHeader
命令根据case
语句定义范围,并对其进行排序。
答案 2 :(得分:1)
有一些外界的帮助:
:command! -range SortCases execute "<line1>,<line2>!ruby -e 'puts STDIN.read.split(/(?<=\\n)(?=[\\x20\\x09]*(?:case|default)\\b)/).sort'"
然后你可以vi{:SortCases<CR>
做你需要做的事。
答案 3 :(得分:1)