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?

René Nyffenegger
sumber
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
Joao
sumber
3

Dari wikia

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

Untuk lebih lanjut lihat: :h revins

SergioAraujo
sumber
2

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

KeeeeiZ
sumber