Trong vim, đôi khi tôi có dịp thay thế một vài lần xuất hiện đầu tiên của trận đấu trên một dòng, nhưng không phải ai cũng muốn như g
vậy. ví dụ:
a a a a a
đến
b b b a a
Tôi biết tôi có thể sử dụng :s/a/b/[enter]:[up][enter]:[up][enter]
, nhưng điều đó đủ tẻ nhạt ở ba lần lặp lại, tôi có những dòng có khả năng thay thế hơn 10.
Tôi đã thử:
:s/a/b/3g
: vim phàn nàn về các ký tự dấu.:s/a/b/3
: thay đổi lần xuất hiện đầu tiên trên này và hai dòng sau.3:s/a/b
: giông như trươc đo.:s/a/b/g3
: thay đổi tất cả các lần xuất hiện trên này và hai dòng tiếp theo.:3s/a/b
: thay đổi lần xuất hiện đầu tiên trên dòng 3.:/a/,3/a/s/a/b
: thay đổi lần xuất hiện đầu tiên trên mỗi dòng giữa dòng tiếp theoa
và dòng thứ ba cóa
trong tệp (nhắc nhở nếu cần).:/a/,/\([^a]*a\)\{3\}/s/a/b/
: thay đổi lần xuất hiện đầu tiên trên mỗi dòng giữa điều này và lần tiếp theo với 3a
giây trên đó (và điều này sẽ không dễ dàng mở rộng cho tìm kiếm nhiều ký tự).
Và nhiều mẫu địa chỉ khác, không có mẫu nào hoạt động. Tôi phải nói rằng, tôi đã học được một lượng khá lớn về :s
lệnh cố gắng tìm câu trả lời cho vấn đề này, nhưng tôi vẫn chưa giải quyết được.
Bất cứ ai biết làm thế nào để làm điều này?
(điểm thưởng cho phạm vi cụ thể, ví dụ: lần thứ hai đến lần thứ tư)
n
và .
mặc dù tôi không nghĩ sẽ sử dụng chúng ở đây. Chắc chắn là một sự cải thiện, cảm ơn.
s/a/=something/
nên làm thủ thuật ( :help sub-replace-=
). Tôi không đủ thông thạo Vim để viết something
ngay lập tức.
:[up][enter]
có thể được thay thế bằng &
, điều này vẫn không lý tưởng nhưng ít nhất là ít đau đớn hơn.