Tôi có thể thực hiện tương tác: thay thế (tìm kiếm & thay thế) không?


16

Đôi khi, tôi sử dụng :svới biểu thức chính quy phức tạp có thể đúng hoặc không chính xác hoặc không chắc chắn liệu tôi có muốn thay thế tất cả các kết quả khớp hay không.

Có cách nào tôi có thể nói với Vim để xác nhận mọi trận đấu mà nó tìm thấy trước khi nó thực sự thay thế văn bản không?

Câu trả lời:


18

Ngoài những gì Carpetsmoker nói:

Các &incsearch( set incsearch) thiết lập trong Vim là thực sự hữu ích. Bạn có thể sử dụng nó cùng với một thủ thuật hữu ích và ít được biết đến.

Mẹo nhỏ là hãy thử regex phức tạp của bạn bằng cách chỉ sử dụng lệnh /hoặc ?. Vim sẽ sử dụng &incsearchcài đặt để hiển thị các trận đấu tương tác. Khi bạn hài lòng với regex, bạn có thể sử dụng :%s//replacementđể vim sử dụng tìm kiếm trước đó.

Lưu ý cách phần trong //trống (đó là nơi bạn đặt văn bản để tìm kiếm). Nếu bạn để trống, bạn đang bảo Vim sử dụng biểu thức tìm kiếm trước đó. Với điều này, bạn có thể gõ một biểu thức chính phức tạp /và có tất cả các lợi ích của set incsearch, sau đó sử dụng %s//replacementlệnh để thực sự tìm kiếm và thay thế.

Nếu bạn muốn một cái gì đó tương tự như tìm kiếm :scác lệnh, hãy xem vim-over , nhưng tôi chỉ thích sử dụng cách Vim gốc.


Tôi đã từng sử dụng một biến thể của điều này: Chỉ cần sử dụng :%s/pattern/replace/và sau đó nhấn uđể hoàn tác, bạn có thể thấy các phần mà Vim đã thay đổi nếu bạn đã hlsearchbật. Và bạn có thể thay thế văn bản này một lần nữa với ^R.
Martin Tournoij

17

Đúng! Sử dụng ccờ cho :substitute. Từ :help substitute:

[c]     Confirm each substitution.  Vim highlights the matching string (with
        hl-IncSearch).  You can type:                           :s_c
            'y'     to substitute this match
            'l'     to substitute this match and then quit ("last")
            'n'     to skip this match
            <Esc>   to quit substituting
            'a'     to substitute this and all remaining matches {not in Vi}
            'q'     to quit substituting {not in Vi}
            CTRL-E  to scroll the screen up {not in Vi, not available when
                        compiled without the +insert_expand feature}
            CTRL-Y  to scroll the screen down {not in Vi, not available when
                        compiled without the +insert_expand feature}

Ví dụ sử dụng đơn giản như chiếc bánh:

%s/old/new/c

Điều này rất hữu ích, nhưng không biết về điều này cho đến 2 tuần trước :-) Và nó thậm chí còn có sẵn trong ol 'vi :-)

Tiền thưởng: Bạn cũng có thể muốn sử dụng :set nowrapscan; điều này ngăn Vim quấn lên trên khi nó chạm đáy. Tôi thấy điều này đặc biệt hữu ích khi sử dụng ccờ.


7

Thay thế tương tác yêu thích của tôi là tìm kiếm bằng cách sử dụng /và đi qua các trận đấu bằng cách sử dụng n.

Sau đó chọn kết hợp sử dụng gnvà sau đó sđể thay thế các văn bản với bất cứ điều gì tôi thích.

lặp lại bằng cách di chuyển đến trận đấu tiếp theo và nhấn.


Đây là một mẹo rất hay, bởi vì: (1) tương tác, (2) bạn có thể đi đến trận đấu trước nếu bạn vô tình bỏ qua nó (điều mà bạn không thể sử dụng :s/old/new/gc).
Ayrat

3

Trong Neovim cũng có 'inccommand'tùy chọn cho phép bạn xem trước kết quả của :slệnh trong khi bạn nhập nó.


1

Vì lợi ích của mọi người, incsearchđã được cập nhật trong vim8 để cũng hiển thị xem trước khi bạn nhập mẫu

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.