Làm cách nào để chọn hoặc đánh dấu một khối trong Emacs?


Câu trả lời:


66

Hãy xem vùng-hình chữ nhật trong emacs.

Tóm lại, bạn bắt đầu lựa chọn như bình thường với Control- Space, sau đó giết vùng bằng Control- x r kvà dán (hoặc kéo ) khối đã giết bằng Control- x r y.


11
Điều đó không giết các vùng, nó giết các hình chữ nhật, khác rất nhiều so với những gì chế độ hình ảnh của vim làm, theo kinh nghiệm của tôi.
Allen

2
Nó khác biệt như thế nào?
Ken Williams

73

Nếu tôi hiểu câu hỏi một cách chính xác, ban đầu nó không phải là về các vùng hình chữ nhật.

C-Spc đặt dấu ở vị trí hiện tại.

Cho dù con trỏ của bạn ở đâu sau đó, văn bản giữa dấu cuối cùng và vị trí hiện tại sẽ được "chọn" (bạn có thể đánh dấu điều này bằng cách kích hoạt transient-mark-mode, nhưng điều này cũng có nghĩa là các dấu phải bị xóa khi bạn không muốn đánh dấu).

Bạn có thể thao tác trên vùng đó bằng các lệnh như:

C-w. . Vùng giết chóc. Thao tác này sẽ xóa và đưa khu vực vào vòng tiêu diệt.
C-y. . Yank. Điều này sẽ chèn đoạn mã cuối cùng từ vòng tiêu diệt.
M-y. . Vòng tiêu diệt chu kỳ. Ngay sau đó C-y, nó thay thế phần bị giật bởi các đoạn mã khác trong vòng giết.
M-w. . Lưu vùng vào vòng giết. Thích C-w, nhưng không xóa.

Đây chỉ là cách sử dụng cơ bản. Dấu hiệu cũng có những công dụng khác. Tôi giới thiệu hướng dẫn ( C-h t).


6
Đáng chú ý C-s C-rlà thường được sử dụng trong bối cảnh này để đi tìm điểm cuối / điểm bắt đầu của khu vực. (Đặc biệt hữu ích trong macro.)
ocodo

Vâng, đó là các lệnh rất tốt, nhưng ... Làm thế nào để chọn vùng được đánh dấu? Sau tất cả, tôi vẫn cần nó, tức là để thụt lề mã giữa các dấu.
Hi-Angel

Vùng giữa điểm đánh dấu cuối cùng và điểm hiện tại (đó là vị trí con trỏ của bạn) vùng được chọn. Chạy M-x indent-regionthôi.
Svante

@Svante Không, nó không được chọn. Mặc dù indent-regionhoạt động tốt, nhưng c-indent-line-or-region(một, liên kết với phím tab ) thì không. Chức năng cuối cùng không hoạt động trên các vùng được đánh dấu , mà trên những vùng đã chọn , tức là vùng được đánh dấu giống như khi bạn chọn nó bằng chuột.
Hi-Angel

2
@YagamyLight Ah, bạn có thể làm điều đó bằng cách nhấn C-Spchai lần vào nơi bạn đánh dấu. Điều đó sẽ kích hoạt tạm thời chế độ đánh dấu thoáng qua (cho đến khi bạn hủy (với C-g)). Sau đó di chuyển điểm để xem vùng đã chọn xuất hiện.
Svante

32

Emacs 24.4 hiện có chế độ hình chữ nhật đánh dấu. Cx không gian để gọi nó.


1
Làm thế nào để bạn di chuyển khối hình chữ nhật?
Stryker


10

Mặc dù C-SPClà một cách phổ biến để bắt đầu đánh dấu một thứ gì đó từ bất kỳ điểm nào của bạn, nhưng thường có những cách nhanh hơn / dễ dàng hơn mà không liên quan đến việc di chuyển rõ ràng đến điểm bắt đầu / kết thúc ...

Các phím tắt lựa chọn được tích hợp sẵn

  • M-h- một phương tiện quan trọng để đánh dấu đoạn văn . Một "đoạn văn" thường có nghĩa là một khối mã.

  • C-M-hC-M-@- để đánh dấu giới tính và làm mờ tương ứng. Điều này hoạt động với một số ngôn ngữ, không chỉ nói ngọng.

  • giữ phím shift - một cách khéo léo khác để đánh dấu trong quá trình di chuyển. Ví dụ: M-S-fchọn chuyển tiếp toàn bộ từ. Đây là shift-select-modevà nó được bật theo mặc định trong Emacs 24+. Trên một số bàn phím (không phải chiclet), bạn có thể nhấn giữ C-S-bằng một ngón út.

Bạn có thể nhấn liên tục bất kỳ mục nào trong số này để mở rộng vùng chọn.

(LƯU Ý: sử dụng C-gthường xuyên để hủy đánh dấu trong khi thử nghiệm.)

Tiện ích bổ sung

Có một số gói tiện ích bổ sung giúp cải thiện việc lựa chọn khu vực và mọi thứ. Đây là tất cả chơi tốt với nhau và phù hợp với các trường hợp sử dụng khác nhau. Sử dụng tất cả!

  • Mở rộng-Vùng : Mở rộng vùng làm tăng vùng đã chọn theo đơn vị ngữ nghĩa. Chỉ cần tiếp tục nhấn phím cho đến khi nó chọn những gì bạn muốn. C-=là một ràng buộc được đề xuất cho nó. Nhấn vào nó một vài lần để có được những gì bạn cần.

  • Easy-Kill : Sử dụngM-wvà ghi nhớ để chọn các loại nội dung khác nhau, như từ, giới tính, danh sách, v.v.

  • Zop-to-Char : Giống như zap-to-char , nhưng cung cấp lựa chọn tốt và các hành động theo hướng menu khác.

  • diff-hl : Đánh dấu các vùng đã thay đổi không cam kết. Sử dụngdiff-hl-mark-hunkđể chọn / đánh dấu một phần nhỏ.


7

Sử dụng Control- Spaceđể đặt dấu và di chuyển con trỏ của bạn.

Các transient-mark-modeý làm nổi bật các lựa chọn cho bạn. M- x transient-mark-mode.

Bạn có thể thiết lập Emacs để bật chế độ này theo mặc định bằng cách sử dụng tùy chỉnh. M- x customize-option RET transient-mark-mode.


1

... và trong trường hợp bạn đang sử dụng Ubuntu và C-spckhông phù hợp với bạn: bạn cần xóa liên kết khóa "phương thức nhập tiếp theo" IBus, như trong

chạy ibus-setupvà thay đổi liên kết khóa cho "phương thức nhập tiếp theo" thành một thứ khác (hoặc xóa hoàn toàn bằng cách nhấp vào nút "..." và sau đó nhấp vào nút "Xóa").

Trích dẫn lấy từ câu trả lời cho một câu hỏi SO.


0

Để mở rộng câu trả lời của Edin Salkovic, nếu bạn sử dụng chế độ CUA, bạn có thể sử dụng để bắt đầu lựa chọn khối trực quan. Có rất nhiều phím tắt để kiểm soát lựa chọn khối được mô tả trong tài liệu của CUA .


-1

Với Emacs 25, chỉ cần nhấn C- Spacevà sau đó di chuyển con trỏ của bạn đến bất cứ nơi nào bạn muốn để đánh dấu / chọn vùng văn bản mà bạn quan tâm. Sau đó, bạn có thể cần các lệnh sau:

  • C- wđể cắt.
  • M- wđể sao chép.
  • C- yđể dá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.