Thay thế một mẫu bằng số dòng hiện tại


15

Tôi muốn thay thế 'x' trong tệp này bằng số dòng hiện tại. Đó là, thay đổi

x
x
x

đến

1
2
3

Hiện tại, tôi sử dụng một lớp lót Perl:

perl -pi -e '$x=$.; s/x/$x/' myfile.txt

Tôi nghĩ UltraEdit có thể làm điều đó với một lựa chọn dọc và thay thế. Điều này có thể được thực hiện trong vim? (Ví dụ của tôi ở đây giả sử 'x' là tất cả có trên một dòng. Nhưng các dòng trong tệp thực của tôi phức tạp hơn nhiều.)

Câu trả lời:


23

Vâng, vim có thể làm điều này! Thực hiện tìm kiếm toàn cầu xvà thay thế nó bằng \=printf("%d", line('.'). Ví dụ:

:%s/x/\=printf("%d", line('.'))

Bạn cũng có thể thay đổi x sang một tìm kiếm khác, nếu bạn cần.

Giải trình:

Điều này thay thế mọi lần xuất hiện của x(hoặc bất cứ điều gì bạn tìm kiếm) bằng thanh ghi đánh giá \=. Thanh ghi này đánh giá mã vimscript và trả về một chuỗi. Trong trường hợp này, mã được đánh giá là "In dòng chúng tôi đang ở dưới dạng số thập phân"


9

Vì bạn đã đề cập chọn dọc và thay thế, bạn cũng có thể làm điều đó. Sử dụng CtrlVđể chọn khóa văn bản bạn muốn thay thế, sau đó cnhập 0, để thay thế bằng 0. Sau đó, chọn 0 số đó:

nhập mô tả hình ảnh ở đây

Sau đó nhấn g<c-a>( g+ Ctrla):

nhập mô tả hình ảnh ở đây

Nếu bạn đã thay thế một cột duy nhất, thì bạn có thể sử dụng gvđể nhanh chóng chọn lại cùng một khu vực.

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.