Xử lý dấu câu trong mẫu văn bản với tìm kiếm / thay thế vim


2

Trong vim, chúng ta có :substitutelệnh tìm kiếm một mẫu văn bản và thay thế nó bằng một chuỗi văn bản.

Làm thế nào để một người xử lý một mẫu văn bản với dấu chấm câu trong đó?

Ví dụ làm việc tối thiểu: mẫu văn bản $S(\R^2)$phải được thay thế bằng chuỗi văn bản $\Sm$. Chỉnh sửa: Làm thế nào để chúng ta cũng tính đến thực tế là mẫu văn bản có thể nằm trong một mẫu văn bản khác?


Bạn đang nói về những loại thay thế? :s/S(\\R^2)/\\Sm/
NigoroJr

1
Vâng. Vậy \ có nghĩa là dấu gạch chéo ngược? Là dấu ngoặc đơn được chèn mà không có bất kỳ điều chỉnh? Nhân tiện, tôi đã thay đổi MWE của tôi. Giải pháp của bạn không hoạt động trên MWE đã thay đổi.
Mussé Redi

1
Hãy xem Vim's :help pattern.txt:help sub-replace-specialđể xem các ký tự đặc biệt được thể hiện như thế nào trong các mẫu tìm kiếm và chuỗi thay thế.
garyjohn

Câu trả lời:


2

Có vẻ như đó là vấn đề thoát khỏi các nhân vật. Ví dụ của bạn,

:s/\$S(\\R^2)\$/$\\Sm$/

sẽ thay thế sự xuất hiện đầu tiên của S(\N^2)với \Sm. \\đang thoát \(giống như bạn làm \*khi bạn muốn đại diện cho nhân vật * ). Không có điều đó, ví dụ, chuỗi \rsẽ có nghĩa là vận chuyển trở lại. Lý do tại sao bạn không phải thoát khỏi $phần thứ hai của :s(không biết thuật ngữ kỹ thuật cho nó) là vì nó không có ý nghĩa đặc biệt nào với nó trong khi nó có nghĩa là kết thúc dòng trong phần đầu tiên .

Bạn cần thêm dấu gạch chéo ngược vào dấu ngoặc đơn khi bạn muốn chụp.


Chúng ta cũng cần tính đến thực tế là mẫu văn bản có thể nằm trong một mẫu văn bản khác. Tôi hiểu rằng người ta có thể làm điều này bằng cách đi trước mẫu văn bản với \ <và đóng nó bằng \>. Chỉ, điều này đã không làm việc. Bất kỳ đề xuất?
Mussé Redi

Bạn có thể đưa ra một ví dụ cho điều đó? \<\>khớp từ đầu / cuối của từ (tham khảo :h \<)
NigoroJr

Ví dụ: $S(R^2)$,nơi cũng có dấu phẩy nhưng chúng tôi chỉ muốn thay thế mẫu văn bản không bao gồm dấu phẩy.
Mussé Redi

Lệnh tôi đã làm điều đó. Nếu bạn muốn thay thế tất cả các lần xuất hiện, hãy thêm công cụ gsửa đổi vào cuối. Ví dụ: :s/foo/bar/gsẽ thay thế tất cả các foos trong dòng hiện tại bằng bar.
NigoroJr

Thêm một %là những gì tôi cần, để thay thế tất cả các lần xuất hiện như vậy trong toàn bộ tập tin. Vì vậy, chúng tôi có :%s/\$S(\\R^2)\$/$\\Sm$/.
Mussé Redi
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.