Sắp xếp mỗi vài dòng


7

Tôi muốn sắp xếp các mục sau dựa trên khóa của họ

case IndexError:
    PyErr_SetString(PyExc_IndexError, exc.str.c_str());
    break;
case ValueError:
    PyErr_SetString(PyExc_ValueError, exc.str.c_str());
    break;
case RuntimeError:
    PyErr_SetString(PyExc_RuntimeError, exc.str.c_str());
    break;
case IOError:
    PyErr_SetString(PyExc_IOError, exc.str.c_str());
    break;

vì vậy nó trở thành

case IOError:
    PyErr_SetString(PyExc_IOError, exc.str.c_str());
    break;
case IndexError:
    PyErr_SetString(PyExc_IndexError, exc.str.c_str());
    break;
case RuntimeError:
    PyErr_SetString(PyExc_RuntimeError, exc.str.c_str());
    break;
case ValueError:
    PyErr_SetString(PyExc_ValueError, exc.str.c_str());
    break;

Về cơ bản, tôi chỉ sắp xếp các dòng

case IOError:
case IndexError:
case RuntimeError:
case ValueError:

Nội dung của các dòng khác (những dòng không bắt đầu bằng a case) không quan trọng nhưng tôi muốn chúng được sắp xếp với các trường hợp.


1
Một giải pháp phụ có thể là, vì nội dung của các cases tương tự nhau, bạn có thể tạo lại toàn bộ. Nhận các sắp xếp *Errors (từ một enum? Có lẽ chạy qua sort(1)?), Sau đó thực hiện một macro mà cải đạo XErrorđể case XError: PyErr_SetString(PyExc_XError, exc.str.c_str()); break;và chạy nó cho tất cả các giá trị enum.
Shahbaz

Tôi đã không sử dụng điều này cho mình nhưng vis.vim tuyên bố để làm điều đó. (Đọc phần 4 tại liên kết.) Bạn có thể tải xuống vis.vim tại đây.
Dan J.

Câu trả lời:


7

Cách dễ dàng: nối các dòng trong các khối logic trước khi sắp xếp.

Chi tiết:

  • đánh dấu các dòng
  • nối các dòng thụt vào các dòng trên: :'<,'>s/\n /^A/
  • đánh dấu các dòng một lần nữa: gv
  • sắp xếp chúng: :'<,'>sort
  • đánh dấu các dòng một lần nữa: gv
  • tách các dòng trở lại và khôi phục thụt lề: :'<,'>s/^A/\r /g

^Aở trên là ký tự Ctrl-A(ASCII SOH). Nó có thể là bất kỳ ký tự nào không xuất hiện trong các dòng được sắp xếp, nhưng Ctrl-Aphù hợp với hóa đơn. Bạn có thể nhập nó dưới dạng Ctrl-vCtrl-a.


2

Ý tưởng: Chúng ta hãy nối nsố dòng trong trường hợp thành một dòng. Thực hiện theo quy trình cho tất cả các trường hợp. Sau đó, sử dụng sort để sắp xếp các trường hợp. Sau đó, cắt những dòng đó trở lại và thụt lề chúng.

Các bước:

1) Tham gia ncác dòng sau casebằng cách gõ này. (trong trường hợp của bạn, n là 3)

:g/case / normal! 3gJ

2) Chọn tất cả các trường hợp như vậy bằng chế độ trực quan. Nhấn vot Vđể chọn tất cả các trường hợp. Nhấn :. Nó sẽ xuất hiện như thế nào :'<,'>. Loại sắp xếp.

:'<,'>sort

3) Đặt các dòng của trường hợp theo nó. Chọn chúng một lần nữa bằng cách nhấn gv.

:'<,'>s/\(;\|:\)    /&\r    /g

Điều này phân chia các dòng trường hợp. Nếu các dòng không được thụt lề đúng cách, bạn có thể căn chỉnh chúng bằng cách chọn gvvà sau đó ==.

Điều này hoạt động cho bất kỳ số lượng dòng, miễn là bạn sử dụng các bước tùy chỉnh cho mục đích của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.