前言
Vim 雖然有內建 :sort 指令,不過它只能以「行」為單位進行排序,光靠它並無法做到連帶整個區塊,例如:函數、成員方法、類別等進行排序。
解決方案 I (推薦)
使用現成外掛 obreitwi/vim-sort-folds。
:set foldmethod=syntax
zm
Use -- VISUAL LINE -- to select the foldings need to be sorted.
<Leader>sf
zr
解決方案 II (手動)
搭配 :g 指令。先將區塊內容隱藏,剩下標頭一行即可利用 :sort 指令進行排序。最後再將隱藏的內容部分還原,即可實現對整個區塊連帶內容一起排序的效果。
指令
Before
void printB() {
  std::cout << "B";
}
void printA() {
  std::cout << "A";
}
操作
:g/^void print[AB]() {/,/^}/ s/$\n/\n
:'<,'>sort
:%s/^@/\r/g
◎注: ^@ = Ctrl+@
After
void printA() {
  std::cout << "A";
}
void printB() {
  std::cout << "B";
}