Các nhóm chụp Vim Regex [bau -> byau: ceu -> cyeu]


132

Tôi có một danh sách các từ:

bau
ceu
diu
fou
gau

Tôi muốn biến danh sách đó thành:

byau
cyeu
dyiu
fyou
gyau

Tôi đã không thành công thử lệnh:

:%s/(\w)(\w\w)/\1y\2/g

Cho rằng điều này không hoạt động, tôi phải thay đổi gì để làm cho các nhóm bắt regex hoạt động trong Vim?



4
Nó hơi lạc đề một chút nên tôi đặt nó ở đây như một bình luận nhưng tôi sẽ làm :%norm ay<CR>.
romainl

2
Trong trường hợp của bạn (nếu chính xác như được mô tả), đó là một tùy chọn: di chuyển đến cột thứ 2 bằng l, nhập chế độ Khối hình ảnh với Ctrl+v, đánh dấu toàn bộ cột Shift+gtheo sau l, sau đó nhập chế độ Chèn với Shift+ivà nhập 'y'. 7 tổ hợp phím bao gồm hoàn thiện Escđể thoát chế độ Chèn. Không đăng như một câu trả lời vì nó không thực sự về các nhóm chụp (đó là những gì tôi đã tìm kiếm khi tôi tìm thấy nó). :-)
LAFK nói Phục hồi Monica

Câu trả lời:


224

Một cách để khắc phục điều này là bằng cách đảm bảo mẫu được bao quanh bởi dấu ngoặc đơn thoát :

:%s/\(\w\)\(\w\w\)/\1y\2/g

Hơi ngắn hơn (và nhiều hơn nữa ma thuật -al) là sử dụng \v, có nghĩa là trong mô hình sau khi tất cả các ký tự ASCII trừ '0'-'9', 'a'-'z', 'A'-'Z''_'có một ý nghĩa đặc biệt:

:%s/\v(\w)(\w\w)/\1y\2/g

Xem:


41

Nếu bạn không muốn thoát khỏi các nhóm bắt giữ bằng dấu gạch chéo ngược (đây là những gì bạn đã bỏ lỡ), hãy chuẩn bị \vđể biến công cụ biểu thức chính quy của Vim thành chế độ rất kỳ diệu :

:%s/\v(\w)(\w\w)/\1y\2/g

Ingo, xin lỗi vì đã đặt sai câu hỏi: Tác phẩm này tìm thấy trong :exmode; Có cách nào để làm điều đó trong hộp thoại gvim find / thay thế không?
JJoao

3
@JJoao: Không, hộp tìm / thay thế chỉ dành cho tìm kiếm và thay thế theo nghĩa đen. Dù sao thì bạn cũng không nên sử dụng nó; nó chỉ là bánh xe đào tạo cho người dùng Notepad.
Ingo Karkat

Ingo, cảm ơn bạn (nó không dành cho tôi: Tôi hài lòng với exmode, nhưng đối với các nhà ngôn ngữ học colaborators trong một dự án từ điển): nó gần như hoạt động - với \v...công việc tìm kiếm regrec ; trong chuỗi thay thế, &hoạt động nhưng \ được bảo vệ ( \1\rbị mất)
JJoao

@JJoao: Vâng, đó cũng là những gì tôi phát hiện ra khi chơi với nó. Tôi vẫn nghi ngờ liệu sử dụng Vim mà không có chế độ Ex có phải là một ý tưởng hay không, nhưng bạn có thể dễ dàng xây dựng hộp thoại tìm kiếm và thay thế của riêng mình (được cung cấp bởi nội bộ :s) thông qua inputdialog()và một chút Vimscript.
Ingo Karkat

Ingo: Cảm ơn bạn một lần nữa; Tôi đồng ý với ý kiến ​​hoài nghi của bạn. Inputdialg +: s + vimscript có lẽ là cách xây dựng thay thế tìm kiếm của gvim. Đối với tôi \1 \r điều trị là một lỗi gvim. Tôi sẽ cố gắng đăng nó trong một số danh sách cụ thể của vim. Trong khi đó, tôi sẽ thử một vimscript-inputdialog của mình.
JJoao

34

Bạn cũng có thể sử dụng mẫu này ngắn hơn:

:%s/^./&y
  • %s áp dụng mô hình cho toàn bộ tập tin.
  • ^. phù hợp với ký tự đầu tiên của dòng.
  • &ythêm các mẫu ysau.

13

Bạn cũng phải thoát khỏi phép phân nhóm:

:%s/\(\w\)\(\w\w\)/\1y\2/g

Đó là mẹo.

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.