Thay thế một chuỗi đã cho


12

Hãy để chúng tôi nói tôi có một văn bản như vậy dưới đây:

AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)
AC (nn)

Bây giờ tôi muốn thay thế nnbằng số như vậy

AC (0)
AC (1)
AC (2)
AC (3)
AC (4)
AC (5)
AC (6)
AC (7)
AC (8)
AC (9)
AC (10)

Tôi đã từng M-x replace-regexp nn RET \# RETthực hiện điều này.

Câu hỏi:

  1. Tôi muốn bắt đầu số thay thế để bắt đầu 1chứ không phải từ 0. Hay đúng hơn là bắt đầu từ một số chỉ định nói 25. Tôi nên sửa đổi lệnh trên như thế nào?
  2. Cách thay thế nnbằng các chữ số như 001, 002.... 998, 999v.v. - Ý tôi là với các số 0 đứng đầu

Đây không phải là những gì bạn yêu cầu, nhưng một cách khác để làm điều này là sử dụng macro cùng với một thanh ghi.
Sâu bướm

Câu trả lời:


12

Kỹ thuật chung

Chuỗi thay thế của bạn có thể chứa mã lisp tùy ý. Từ tài liệu cho regrec thay thế :

Trong các cuộc gọi tương tác, văn bản thay thế có thể chứa '\,' theo sau là biểu thức Lisp được sử dụng như một phần của văn bản thay thế. Bên trong biểu thức đó, '\ &' là một chuỗi biểu thị toàn bộ kết quả khớp, '\ N' khớp một phần, '# &' và '#N' các giá trị số tương ứng từ 'chuỗi-số' và '# 'chính nó cho' số lần thay thế ', số lần thay thế đã xảy ra cho đến nay, bắt đầu từ con số không.

Chúng ta có thể sử dụng kỹ thuật này theo một số cách.

Bắt đầu từ 1

Wat chúng tôi muốn làm là thay thế nnbằng một hơn so với replace-countbạn đã sử dụng \#.

Gọi #'replace-regexpvới đối số \,(1+ \#):

C-M-% nn \,(1+ \#)sẽ thay thế nn với 1trước, sau đó 2, 3vv

Bắt đầu tại 25

Bạn có thể sửa đổi điều này bằng cách không chỉ thêm một, mà (trong ví dụ của bạn) 25:

C-M-% nn \,(+ 25 \#)

Số không hàng đầu

Hoặc chúng ta có thể sử dụng formatđể thêm số không hàng đầu. Điều này sẽ thay thế nnvới 000, 001, 002, vv Bạn có thể kết hợp mã lisp khác ở trên để bắt đầu 001, 025hoặc bất cứ điều gì bạn muốn.

C-M-% nn \,(format "$03d" \#)


5

Bạn cũng có thể sử dụng cua-mode.

Chọn région hình chữ nhật (tất cả các nn) và sau đó M-x cua-rectangle-mark-mode.

Tiếp theo, M-nvà chấp nhận các giá trị mặc định.


Tôi ước tôi cũng có thể chấp nhận điều này như một câu trả lời
Prasanna
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.