Cách nhanh nhất để di chuyển khối mã đến dòng cụ thể


8

Giả sử bạn có mã trên các dòng 4, 5, 6. Sau đó, bạn muốn di chuyển khối mã này sang điểm bắt đầu của dòng 9 trong khi cũng xóa các dòng 4, 5, 6.

Cách nhanh nhất, tức là số lượng ít nhất các nét chính, để đạt được điều này là gì? Một chức năng tùy chỉnh sẽ phù hợp hơn?

Câu trả lời:


6

Bắt đầu từ đầu dòng 4 ( ESC 4 ESC g ghoặc M-4 M-g M-gđi đến đó), C-3 C-k C-2 C-n C-y(hoặc ESC 3 C-k down down C-ynếu bạn không muốn giữ bộ sửa đổi) sẽ làm điều này.

Nếu bạn không muốn thực hiện số học trong đầu, nhưng thay vào đó hãy chọn các dòng một cách trực quan, sau đó

  • Di chuyển đến đầu khu vực để di chuyển
  • C-SPC để đặt dấu
  • Di chuyển xuống đầu dòng đầu tiên để giữ
  • C-w cắt
  • Di chuyển xuống nơi bạn muốn chèn văn bản cắt
  • C-y dán

Tôi không nghĩ có cách nào để làm điều này ngắn hơn trừ khi bạn sẵn sàng mất một chút linh hoạt (ví dụ: nếu bạn thường muốn di chuyển một khối chính xác ba dòng). Bạn cần cung cấp ba vị trí: điểm bắt đầu của khối để di chuyển, điểm cuối của khối cần di chuyển và đích đến. Trong các trình tự ở trên, có một tổ hợp phím duy nhất tại mỗi vị trí, mức thấp nhất có thể.


8

Nếu khoảng cách không lớn, bạn có thể sử dụng văn bản di chuyển :

nhập mô tả hình ảnh ở đây

Đối với các nét chính, đối với tôi đó là:

  1. Chọn địa bàn:

    C-SPCC-nC-nC-n

  2. Di chuyển vùng:

    H-S-nH-S-nH-S-n

( move-text-downđược liên kết với H-S-n)


Bạn cũng có thể cung cấp một đối số số ncho move-text-downmove-text-up. Điều này rút ngắn bước (2) đến M-3 H-S-n.
itjeyd

3

Bạn có thể sử dụng vùng mở rộng để đánh dấu khối, nếu đó là một đơn vị ngữ nghĩa, giống như một hàm (Trang web của gói giải thích điều này chi tiết hơn). Sau đó di chuyển nó xung quanh như phản ứng khác giải thích. Tùy thuộc vào vị trí của bạn trong khối, một lần nhấn phím có thể đánh dấu toàn bộ.


Bạn có thể mở rộng về điều này? Bạn có ý nghĩa gì một khối thực sự? Giống như một khối chức năng?
Edgar Aroutiounian

Có, thuật ngữ được sử dụng trong gói là "đơn vị ngữ nghĩa" có thể là từ, dòng, khối mã, hàm, lớp, toàn bộ tệp. Tôi đã chỉnh sửa câu trả lời để bao gồm một liên kết đến gói giải thích điều này tốt hơn.
rlazo

2

Nếu bạn đang sử dụng evil-mode, bạn có thể lựa chọn sử dụng một exlệnh: :4,6m9(mà moves đường 4để 6đến đường dây 9).


Tôi không có ý đề cập đến một tính năng kỳ lạ như thi đua vi khi nó không liên quan gì đến câu hỏi.
Gilles 'SO- ngừng trở nên xấu xa'

2
Gilles: evil-modekhông chính xác tối nghĩa - nó có gần 18.000 lượt tải xuống trên melpa. Một câu trả lời khác được sử dụng expand-region, đó cũng là một gói bên ngoài. Đối với trang web Hỏi & Đáp, có lẽ nên bao gồm nhiều cách để thực hiện cùng một điều với các gói khác nhau (mặc dù có thể tốt khi đưa ra một số hướng dẫn).
shosti
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.