Bagaimana cara membalikkan string dengan skrip Vim


11

Saya mencoba membalikkan sebuah string, sehingga 'abc defg hij'menjadi 'jih gfed cba'. Solusi yang saya temukan adalah

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

Apakah ada solusi yang lebih elegan atau haruskah saya tetap dengan apa yang saya hasilkan?


1
Itu tergantung pada apa yang Anda maksud dengan "elegan". Tidak ada fungsi internal yang didedikasikan untuk membalikkan string, jika itu yang Anda tanyakan. Jika Anda bermaksud melakukannya dengan dua atau kurang panggilan ke fungsi internal dan tidak ada pernyataan tambahan, itu sepertinya juga tidak mungkin.
Sato Katsura

1
Solusi Anda saat ini sudah elegan dan idiomatis.
romainl

1
Lewati '.' di bagian split.
Christian Brabandt

1
@SatoKatsura sebenarnya, saya pikir ini lebih efisien, karena mesin regexp tidak perlu cocok dengan apa pun. Lebih jauh, ini adalah cara yang lebih disukai dari dokumentasi.
Christian Brabandt

1
@ChristianBrabandt Menurut manual, split()tanpa {keepempty}opsi harus menghapus satu item kosong di awal, dan satu item kosong di akhir. Saat ini menghapus semua item kosong, termasuk yang ada di tengah daftar (yang lebih berguna daripada perilaku yang didokumentasikan jika Anda bertanya kepada saya, tetapi Anda mungkin tidak). Saya pikir ini telah dibahas baru-baru ini vim_dev.
Sato Katsura

Jawaban:


10

Solusi Anda sangat elegan! Alternatif jika Anda berada di env berbasis Unix:

!!rev

3

Dari wikia

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

Untuk lebih lanjut lihat: :h revins


2

Jika Anda menggunakan sistem seperti unix, di vim, ketikkan ex-command :%! rev

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.