Làm thế nào để thay thế mỗi lần xuất hiện của một chuỗi bằng bộ đếm tăng dần trong vim?


2

Tôi có 203 trường hợp của từ ubuntutrong một tệp và tôi muốn thay thế từng từ bằng UBUNTU_X, trong đó "X" là một bộ đếm tăng dần. Nói cách khác, tệp gốc là:

ubuntu xxxxxxxx ubuntu xxxxxxxx ubuntu xxxubuntuxxx xxxubuntu ubuntuxxxxxx ...

Và tôi muốn thay thế nó bằng:

UBUNTU_1 xxxxxxxx UBUNTU_2 xxxxxxxx UBUNTU_3 xxxUBUNTU_4xxx xxxUBUNTU_5 UBUNTU_6xxxxx ... 

Sự xuất hiện cuối cùng phải là UBUNTU_203


Nó dường như hoàn toàn rõ ràng với tôi như bây giờ. Tôi cũng có một câu trả lời được viết cho nó, mà tôi sẽ đăng ngay khi nó được giữ lại.
tự đại diện

@Wildcard Mở ngay
Michael Mrozek

Câu trả lời:


2

ggOUbuntu_0Esc0"ndeddqq/\<Ubuntu\>^Mde"nP^Ab"nyeq999@q

Điều này sẽ làm những gì bạn muốn nếu gõ ở chế độ bình thường.

Giải trình:

  • gg - đi đến dòng đầu tiên của tập tin
  • O - tạo một dòng mới phía trên dòng hiện tại và vào chế độ chèn
  • Ubuntu_0 - gõ văn bản
  • Esc - thoát chế độ chèn, cũng có thể sử dụng Ctrl[
  • 0 - đi đến bắt đầu của dòng hiện tại
  • "nde - vào đăng ký n, xóa đến cuối từ
  • dd - xóa dòng hiện tại
  • qq - bắt đầu ghi macro vào thanh ghi q
  • /\<Ubuntu\>^M- tìm kiếm Ubuntu. \ <và \> có nghĩa là ranh giới từ và Ctrl-M giống như nhấn Enter.
  • de - xóa đến hết từ
  • "nP - đặt nội dung của thanh ghi n trước vị trí con trỏ
  • ^A - Ctrl-A, tăng số dưới con trỏ lên một
  • b - đi đến bắt đầu từ hiện tại
  • "nye - vào đăng ký n yank văn bản đến cuối từ hiện tại
  • q - dừng ghi macro
  • 999@q- chạy macro được ghi trong thanh ghi q 999 lần (hoặc dừng khi mẫu \<Ubuntu\>không tìm thấy nữa)

Điều này có thể được sửa đổi một chút tùy thuộc vào yêu cầu chính xác của bạn. Chẳng hạn, tôi giả định rằng bạn chỉ muốn khớp "Ubuntu" thành một từ. Tôi cũng giả định rằng bạn chỉ muốn khớp với chữ viết hoa nhất định hoặc, nếu bạn không biết gì về nó, bạn không bận tâm đến các chữ viết hoa khác nhau của "ub Ubuntu" được chuyển thành "Ubuntu".


1

Một số bản phân phối linux đã được vim biên dịch với sự hỗ trợ của Perl. Nếu đây là trường hợp, bạn có một :perldo commandvà một:perl command

:perldo  s/ubuntu/"UBUNTU" . ++$a/ge 
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.