Làm thế nào để chọn cột sau đó thực hiện chỉnh sửa trong GNU Emacs?


15

Tôi đã sử dụng ViM, TextMate và GNU Emacs trong nhiều năm.

Ví dụ ở đây là văn bản tôi muốn chỉnh sửa

foo
foo
foo

Và đây là kết quả văn bản tôi muốn có

bar foo
bar foo
bar foo

Khi tôi ở trên Vim, tôi có thể thực hiện "Ctrl v" trên dòng đầu tiên và cột đầu tiên, sau đó nhấn "2 j", sau đó nhấn "i", sau đó nhập "thanh", xong.

Khi tôi sử dụng Textmate, tôi có thể nhấn "Tùy chọn lệnh của Apple" trong khi chọn xuống (bằng chuột), sau đó nhập "thanh", xong.

Nhưng khi tôi dùng GNU Emacs 23.1, tôi không biết làm thế nào. : ((

Tôi đã tìm kiếm EmacsWiki và tìm kiếm xung quanh nhưng không tìm được giải pháp. Xin hướng dẫn cho tôi nếu bạn biết giải pháp của tôi. Sẽ biết ơn vì điều đó.


@Trey Jackson và @humble cà phê, đã giải quyết, cảm ơn rất nhiều !!
Arie

Câu trả lời:


16

Hai lựa chọn đến với tâm trí. Đầu tiên là hình chữ nhật (như đã đề cập trong câu trả lời khác). Các hướng rõ ràng cho đó là:

  1. goto dòng đầu tiên, cột đầu tiên
  2. C-SPC
  3. goto dòng cuối cùng (cột đầu tiên)
  4. C-x r t bar SPC RET

Một tùy chọn khác, cung cấp các lệnh chỉnh sửa hình chữ nhật / cột rất đẹp là chế độ CUA . Đây là một bài đăng blog (tiết lộ: blog của tôi) mô tả cách sử dụng nó. Để thấy sức mạnh của chế độ CUA, thật đáng để xem video ba phút này .

Tôi tích hợp chế độ CUA với các chế độ sau (vì tôi không muốn có chế độ đánh dấu thoáng qua):

(setq cua-enable-cua-keys nil)
(setq cua-highlight-region-shift-only t) ;; no transient mark mode
(setq cua-toggle-set-mark nil) ;; original set-mark behavior, i.e. no transient-mark-mode
(cua-mode)

11

Trong Emacs-24.4, hỗ trợ cơ bản cho hình chữ nhật đã được cải thiện một chút, vì vậy thay vì sử dụng C-SPCtheo sau C-x r t, bạn có thể làm:

C-x SPC
down down
C-t bar RET

Một trong những điều hay về nó so với C-SPCphương pháp là bạn sẽ nhận được phản hồi trực quan về hình chữ nhật bạn đang chọn. Tất nhiên cua-modephương pháp này cũng hoạt động (và hoạt động tương tự).


thật đáng buồn, dường như với tôi những cải tiến là chưa đủ: cua-modeđã đúng hơn ... Chỉ cần đề cập đến một điều: trong cua-modekhi một hình chữ nhật được tô sáng, tôi có thể nhập và thêm văn bản. Trong "hỗ trợ cơ bản" tích hợp sẵn hiện tại, tô sáng biến mất (lựa chọn bị "hủy") và đầu vào được chèn tại điểm con trỏ. Đây là phản trực giác và không phải là những gì tôi thường muốn (và làm quen với cách cua-modethực hiện)
ShinTakezou

@ShinTakezou: trong khi bạn tìm thấy bộ đếm chế độ hình chữ nhật trực quan, tôi thấy bộ đếm hành vi của cua trực quan. May mắn thay, bạn có thể chọn. Nếu bạn thích hỗ trợ của cua, bạn có thể bật chế độ cua hoặc (nếu bạn chỉ muốn hỗ trợ hình chữ nhật của nó) (global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode).
Stefan

trong thực tế là những gì tôi làm: gắn bó với chế độ cua. Nó hoạt động như: làm nổi bật một cột, gõ văn bản, thực hiện. Mặt khác: hightlight một cột, giả sử bạn muốn thêm văn bản, nhập văn bản trong bộ thu nhỏ (bạn sẽ không thấy nó xuất hiện trong bộ đệm khi bạn nhập ...), ... xong. Sau này bạn sẽ thấy một lỗi đánh máy trong char cuối cùng ... ở chế độ cua, tôi có thể thấy nó khi tôi gõ, xóa nó (không hoàn tác toàn bộ phần chèn), suy nghĩ lại, chèn một char khác ... và hình chữ nhật tiếp tục được tô sáng khi tôi cần, btw và tôi có thể thu nhỏ nó, phóng to nó, gõ thêm một số văn bản hoặc "cắt" hình chữ nhật mới đó ... vì vậy, với tôi nó trực quan và thoải mái hơn.
ShinTakezou

Tôi rất vui vì bạn thích nó ;-)
Stefan

BTW, trong Emacs-25, thao tác chỉnh lưu không phải CUA C-t(aka C-x r t) cũng hiển thị cho bạn bản xem trước của văn bản mới được chèn khi bạn nhập nó.
Stefan

2

Trong emacs, các loại cột này được gọi là "hình chữ nhật". Vì vậy, đây là trang tài liệu có liên quan.

Tất cả các lệnh này yêu cầu vùng chứa hình chữ nhật bạn đang hoạt động. Vì vậy, bạn cần đặt dấu ở ký tự trên cùng bên trái trong hình chữ nhật và mở rộng vùng thành ký tự dưới cùng bên phải trong hình chữ nhật. Lệnh bạn đang theo sau M-x string-insert-rectangleđó sẽ nhắc bạn nhập chuỗi.


1

Câu trả lời ngắn nhất: Kích hoạt chế độ hình chữ nhật CUA qua C-RET.

Vì vậy, đối với trường hợp của bạn, nó sẽ là

  1. Chuyển đến dòng đầu tiên, cột đầu tiên và nhấn C-RETđể vào chế độ CUA
  2. Đi đến dòng cuối cùng, cột đầu tiên và chỉ cần gõ barSPC
  3. Thoát chế độ CUA qua ESChoặc CG

Xem câu trả lời của @Trey để biết giải pháp phức tạp hơn và liên kết đến CUA.


2
Vâng, tôi có quá ít danh tiếng để bình luận. Tôi không muốn lặp lại câu trả lời của anh ấy, nhưng tôi sẽ thêm một số thông tin từ tài liệu CUA.
Martin

0

Bạn có thể sử dụng thay thế-regex cho việc này:

  1. đặt dấu ở dòng cuối cùng -> C SPC và đi đến dòng cuối cùng
  2. gõ Mx thay thế-regrec RET trong xe buýt nhỏ (tôi có một ràng buộc chính cho Mr này)
  3. Cho ^ RET
  4. gõ thanh và nhấn RET

Điều này sẽ thêm thanh vào đầu dòng.

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.