Làm cách nào để đảo ngược chuỗi với tập lệnh Vim


11

Tôi đang cố gắng đảo ngược một chuỗi, để nó 'abc defg hij'trở thành 'jih gfed cba'. Giải pháp tôi đưa ra là

join(reverse(split(l:text, '.\zs')), '')

Có một giải pháp thanh lịch hơn hay tôi nên gắn bó với những gì tôi đã đưa ra?


1
Nó phụ thuộc vào những gì bạn có nghĩa là "thanh lịch". Không có chức năng nội bộ dành riêng để đảo ngược chuỗi, nếu đó là những gì bạn đang hỏi. Nếu bạn có nghĩa là thực hiện nó với hai hoặc ít hơn các cuộc gọi đến các chức năng nội bộ và không có câu lệnh bổ sung nào, thì điều đó dường như cũng không thể thực hiện được.
Sato Katsura

1
Giải pháp hiện tại của bạn đã được cả thanh lịch thành ngữ.
romainl

1
Bỏ qua '.' trong phần tách.
Christian Brabandt

1
@SatoKatsura thực sự, tôi nghĩ rằng nó hiệu quả hơn, bởi vì công cụ regrec không cần phải phù hợp với bất cứ điều gì. Hơn nữa, đây là cách ưa thích từ tài liệu.
Christian Brabandt

1
@ChristianBrabandt Theo hướng dẫn, split()không có {keepempty}tùy chọn nên xóa một mục trống duy nhất ở đầu và một mục trống duy nhất ở cuối. Hiện tại, nó sẽ xóa tất cả các mục trống, bao gồm các mục ở giữa danh sách (hữu ích hơn hành vi được ghi lại nếu bạn hỏi tôi, nhưng có lẽ bạn không biết). Tôi nghĩ rằng điều này đã được thảo luận gần đây trên vim_dev.
Sato Katsura

Câu trả lời:


10

Giải pháp của bạn rất thanh lịch! Một thay thế nếu bạn đang ở trong Unix dựa trên env:

!!rev

3

Từ wiki

vnoremap <Leader>r c<C-O>:set revins<CR><C-R>"<Esc>:set norevins<CR>

Để xem thêm: :h revins


2

Nếu bạn đang sử dụng một hệ thống giống như unix, trong vim, hãy nhập lệnh ex :%! rev

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.