Chọn văn bản mà không di chuyển con trỏ


8

Tôi muốn phát triển một lựa chọn mà không di chuyển điểm (con trỏ) từ vị trí của nó. Tôi biết tôi luôn có thể sử dụng C-u C-spcđể di chuyển đến vị trí trước đó, nhưng tôi muốn tránh điều đó.

Cụ thể hơn, tôi muốn thực hiện cả hai thao tác này:

  • Chọn tất cả văn bản trong bộ đệm
  • Dần dần thêm các dòng / đoạn tiếp theo vào phần chọn

trong khi giữ con trỏ ở nơi đó

Emacs có chức năng tương tác nào cho việc này không? Họ có bị ràng buộc với bất kỳ phím tắt?


Bạn luôn có thể quay lại vị trí điểm trước đó với C-u C-spc.
Malabarba

1
bạn có thể cho tôi biết, điều gì có thể là sự quan tâm của việc chọn văn bản khi di chuyển con trỏ?
Nsukami _

Câu trả lời:


12

Có một câu trả lời riêng cho từng điểm bạn đã liệt kê:

  1. Liên kết mặc định của emacs C-x hsẽ chọn toàn bộ bộ đệm bất kể con trỏ ở đâu.

  2. Các mở rộng vùng gói sẽ giúp đạt được mục tiêu thứ hai của từng bước mở rộng vùng chọn. expand-regioncuối cùng cũng sẽ chọn toàn bộ bộ đệm khi bạn tiếp tục mở rộng vùng. Hãy xem readme của nó trên github để biết thêm thông tin. Gói này có sẵn thông qua MELPA.

Dưới đây là một giới thiệu ngắn gọn về gói này từ github của nó:

Mở rộng vùng làm tăng vùng được chọn theo đơn vị ngữ nghĩa. Chỉ cần nhấn phím cho đến khi nó chọn những gì bạn muốn.

Một ví dụ:

 (setq alphabet-start "abc def") 

Với con trỏ tại c, nó bắt đầu bằng cách đánh dấu toàn bộ từ abc, sau đó mở rộng sang nội dung của trích dẫn abc def, sau đó đến toàn bộ trích dẫn "abc def", sau đó đến nội dung của sexp setq alph-start "abc def "và cuối cùng là toàn bộ sexp.

Tôi muốn thêm mặc dù việc sửa đổi lựa chọn vùng trong cả hai trường hợp vẫn sẽ di chuyển con trỏ.


+1, nhưng lưu ý rằng C-x hkhông di chuyển con trỏ: đến cuối bộ đệm và sau đó là bắt đầu bộ đệm. Bạn cần C-u C-spchai lần để trở lại nơi bạn đã ở.
ShreevatsaR

9

Nếu vùng phát triển thì con trỏ thay đổi vị trí. Điều này là do con trỏ luôn ở một đầu của khu vực.

Nếu bạn chọn tất cả văn bản đệm ( C-x hvà sau đó sử dụng C-x C-xđể hoán đổi điểm và đánh dấu, thì con trỏ ở cuối văn bản), sau đó bạn nhập thêm một số văn bản, sau đó bạn đã hoàn thành những gì bạn muốn: khu vực đã được mở rộng để bao gồm văn bản bạn đã gõ. (Điều này giả định rằng bạn không delete-selection-modebật.)

Vùng cũng đã bị hủy kích hoạt, tự động, do đó văn bản vùng không còn được tô sáng. Để kích hoạt lại khu vực, hãy làm C-x C-x(mà bạn có thể lặp lại, nếu bạn muốn giữ con trỏ ở cuối bộ đệm.


4

Như đã đề cập, expand-regiongói là tuyệt vời nhưng tôi cũng cảm thấy giá trị của nó đề cập đến easy-kill. Nó được coi là một sự thay thế cho kill-ring-saveviệc biến M-w"bản sao" bình thường thành một lệnh sao chép động cũng hoạt động như một tiền tố để lưu các thứ khác nhau. Ví dụ: M-wsẽ sao chép vùng hoạt động, url, email hoặc dòng hiện tại (theo thứ tự easy-kill-try-things) nhưng theo sau là "d", M-w dnó sẽ sao chép mạnh mẽ của defun hiện tại.

Ngoài ra còn có một phương pháp mở rộng / thu hẹp lựa chọn hiện tại, hơi giống như expand-region, cũng như một lệnh được gọi easy-markđể đánh dấu các khu vực mà không thay đổi điểm hiện tại của bạn.


1

Khi bạn đã sao chép một cái gì đó, bạn có thể thêm văn bản vào lựa chọn sau này bằng cách sử dụng C-M-w:

  • sao chép một dòng / khu vực
  • làm việc gì khác
  • bạn muốn nối sthg vào văn bản đã sao chép trước đó: type C-M-w( append-next-kill) và sau đó sao chép những gì bạn muốn ( M-w).

1

Như đã nêu trong các câu trả lời khác:

C-xh sẽ chọn toàn bộ bộ đệm; (mark-whole-buffer)

Nếu bạn muốn phát triển lựa chọn của mình, cách dễ nhất là sử dụng các mark-*lệnh.

Như một ví dụ chính:

C-M-SPC (mark-sexp)sẽ đánh dấu sexp tại điểm. Nếu bạn lặp lại lệnh, nó sẽ thêm sexp sau vào vùng chọn. Con trỏ sẽ vẫn ở vị trí hiện tại hoặc di chuyển đến điểm bắt đầu của đối tượng (đoạn / sexp) để đảm bảo nó được đánh dấu hoàn toàn.


Mở đầu ánh xạ (mark-whole-buffer)tới <kbd> Cmd-a </ kbd> trên OSX để giữ một số điểm tương đồng với chức năng OSX điển hình.
Aaron Lee

1

Nếu bạn ổn với việc sử dụng chuột, bạn có thể sử dụng lựa chọn thứ cấp . Nhấn Meta, sau đó nhấp và kéo nút chuột trái ( M-drag-mouse-1). Điều này không di chuyển điểm miễn là bạn chỉ sao chép văn bản hiển thị trên màn hình. Bạn có thể sao chép lựa chọn thứ cấp với M-mouse-3và kéo nó với M-mouse-2.

Ngoài lựa chọn thứ cấp, bạn sẽ cần di chuyển con trỏ để chọn văn bản tùy ý, bởi vì con trỏ là một đầu của lựa chọn (cái còn lại là dấu).

Nếu bạn muốn làm việc trong bộ đệm mà không ảnh hưởng đến điểm, bạn có thể mở bộ đệm trong cửa sổ thứ hai ( C-x 2hoặcC-x 3 ). Mỗi cửa sổ có một điểm riêng. Khi bạn chọn xong và chỉnh sửa, hãy đóng cửa sổ ( C-x 0) và quay lại cửa sổ khác.

Để linh hoạt hơn, bạn có thể sao chép bộ đệm hiện tại. Chạy M-x clone-indirect-bufferhoặc C-x 4 cđể tạo một cửa sổ mới hiển thị bộ đệm đó. Bản sao có cùng văn bản với bản gốc, nhưng nó có dấu và điểm riêng.

Nếu bạn đã giết một số văn bản, bạn có thể nối thêm văn bản bằng cách nhập C-M-w( append-next-kill) và sau đó sử dụng lệnh kill. Ví dụ: C-M-w C-knối phần đuôi của dòng hiện tại vào văn bản đã ở phía trước của vòng khử và xóa văn bản đã sao chép. C-M-w M-wnối thêm vùng chọn vào văn bản ở phía trước vòng khử (trái ngược với cách M-wđẩy văn bản đã chọn làm mục nhập mới trên vòng khử).

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.