Bir dizeyi Vim komut dosyasıyla nasıl tersine çevirebilirim?


11

Ben bir dize ters çalışıyorum, böylece 'abc defg hij'olur 'jih gfed cba'. Ortaya koyduğum çözüm

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

Daha zarif bir çözüm var mı yoksa bulduğum şeye bağlı kalmalı mıyım?


1
"Zarif" ile ne demek istediğine bağlı. Eğer bir dize tersine çevirmeye adanmış hiçbir dahili fonksiyon yoktur, eğer sormak istediğiniz buysa. Bunu iç işlevlere iki veya daha az çağrı ile yapmak ve ek bir ifade ile yapmak istemiyorsanız, bu da mümkün görünmüyor.
Sato Katsura

1
Geçerli bir çözüm zaten zarif hem de ve deyimsel.
romainl

1
'.' bölünmüş kısmında.
Christian Brabandt

1
@SatoKatsura aslında, bence daha verimli, çünkü regexp motorunun hiçbir şeyle eşleşmesi gerekmiyor. Ayrıca, bu dokümantasyondan tercih edilen yoldur.
Christian Brabandt

1
@ChristianBrabandt Kılavuza göre split(), {keepempty}seçenek olmadan başlangıçta tek bir boş öğeyi ve sonunda tek bir boş öğeyi kaldırmalısınız. Şu anda listenin ortasındaki olanlar da dahil olmak üzere tüm boş öğeleri kaldırıyor (bana sorarsanız belgelenmiş davranıştan daha yararlıdır, ancak muhtemelen değilsiniz). Bence bu son zamanlarda tartışıldı vim_dev.
Sato Katsura

Yanıtlar:


10

Çözümünüz çok zarif! Unix tabanlı env'deyseniz bir alternatif:

!!rev

3

Wikia isimli ev sahibinden

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

Daha fazla bilgi için: :h revins


2

Unix benzeri bir sistem kullanıyorsanız, vim'de ex-command yazın :%! rev

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.