Gần đây tôi đã hỏi:
Làm thế nào để thêm tiền tố vào mỗi dòng?
Vì vậy, đi từ mã dưới đây:
I said Hello
I said There
I said I am some code
Để mã như:
Hello
There
I am some code
Bây giờ, làm cách nào để xóa n số ký tự khỏi một dòng?
Gần đây tôi đã hỏi:
Làm thế nào để thêm tiền tố vào mỗi dòng?
Vì vậy, đi từ mã dưới đây:
I said Hello
I said There
I said I am some code
Để mã như:
Hello
There
I am some code
Bây giờ, làm cách nào để xóa n số ký tự khỏi một dòng?
Câu trả lời:
Nó thậm chí còn dễ dàng hơn! Một lần nữa, sử dụng các lệnh hình chữ nhật . Di chuyển đến một góc của hình chữ nhật bạn muốn xóa, nhấn C-SPC
để đặt dấu. Di chuyển đến góc khác của hình chữ nhật và nhấn C-x r d
( delete-rectangle
). Ví dụ: di chuyển đến dòng đầu tiên bạn muốn hành động, nhấn C-a
hoặc home
để đi đến đầu dòng, di chuyển xuống dòng cuối cùng bạn muốn hành động, để di chuyển đến góc dưới bên phải và sau đó xóa.C-u number C-f
C-x r d
Nếu dòng cuối cùng có ít hơn số lượng ký tự mong muốn, có thể thuận tiện hơn khi sử dụng góc dưới bên trái và trên cùng bên phải. Ngoài ra, bạn có thể chèn các ký tự rác (điều này hữu ích nếu cả dòng đầu tiên và dòng cuối cùng ngắn hơn).
Bạn có thể sử dụng C-x r k
để giết hình chữ nhật, cho phép bạn kéo ( C-x r y
) nó sau (di chuyển đến góc trên bên trái của nơi bạn muốn chèn nó).
Bạn cũng có thể sử dụng C-x r t
( string-rectangle
) và nhập một chuỗi trống.
Các lệnh hình chữ nhật được dựa trên các vị trí cột. Nếu bạn muốn xóa n ký tự, thay vì n cột (điều này tạo ra sự khác biệt với các ký tự nhiều cột như tab), bạn có thể sử dụng thay thế biểu thức thông thường : thay thế ^.\{42\}
bằng không có gì để xóa 42 ký tự đầu tiên của mỗi dòng.
Một khả năng khác: Tôi thực sự thích sử dụng nhiều con trỏ cho các nhiệm vụ như thế này. Có sẵn package.el
thông qua MELPA, nó trở thành một phần không thể thiếu trong emacs của tôi. Tôi chỉ đơn giản là chọn I said
(và có thể bao gồm ngắt dòng trước nó), sử dụng M-x mc/mark-all-like-this
và theo cách của tôi. Nếu bạn muốn kiểm soát chi tiết hơn, bạn có thể sử dụng mc/mark-next-like-this
hoặc mc/mark-next-lines
.
Bàn phím của tôi:
(use-package multiple-cursors
:bind (("C->" . mc/mark-next-like-this)
("C-M->" . mc/mark-all-like-this-dwim)))
Đá Emacs bắt buộc! tập: http://emacsrocks.com/e13.html
Nếu bạn đã cua-mode
bật, thì:
Tôi thích cua-mode
cách làm việc, so với hình chữ nhật tiêu chuẩn Emacs trong đó tương đương sẽ là:
Việc cua-mode
lưu ba lần nhấn phím so với hình chữ nhật Emacs tiêu chuẩn.
Để hoàn thiện: xóa 3 ký tự đầu tiên khỏi mỗi dòng (chính thức: từ điểm trên hoặc trong khu vực) có thể được thực hiện bằng cách thay thế regrec ^...
(hoặc nói chung hơn ^.\{3\}
:) bằng một chuỗi trống.
Giải thích: trong regexen, ^
có nghĩa là "bắt đầu của dòng", .
có nghĩa là "bất kỳ nhân vật nào" và \{n\}
có nghĩa là " n sự lặp lại của điều trước".
Điều này có một lợi ích bổ sung là tương tác (trừ khi một lần nhấn !
, điều này giúp query-regexp-replace
thay thế mọi thứ từ bây giờ mà không có thêm câu hỏi nào).
Và một khả năng nữa:
F3C-aC-3C-dC-nF4
ghi lại một macro bàn phím, về cơ bản là "di chuyển đến đầu dòng, xóa ba ký tự và di chuyển đến dòng tiếp theo". Sau đó, bạn có thể phát lại nó cho đến khi kết thúc bộ đệm bằng C-uF4hoặc C-xC-kráp dụng nó cho các dòng trong khu vực. Điều này có một nhược điểm: nó sẽ bị hỏng khi bất kỳ dòng nào có ít hơn 3 ký tự.