ฉันจะย้อนกลับสตริงด้วยสคริปต์เป็นกลุ่มได้อย่างไร


11

ฉันพยายามที่จะย้อนกลับสตริงเพื่อที่จะกลายเป็น'abc defg hij' 'jih gfed cba'ทางออกที่ฉันมาด้วยคือ

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

มีวิธีแก้ปัญหาที่สง่างามกว่านี้หรือฉันควรยึดติดกับสิ่งที่ฉันคิด


1
ขึ้นอยู่กับความหมายของคำว่า "สง่างาม" ไม่มีฟังก์ชั่นภายในเฉพาะสำหรับการย้อนกลับสตริงถ้านั่นคือสิ่งที่คุณกำลังถาม ถ้าคุณหมายถึงการทำมันด้วยการเรียกสองครั้งหรือน้อยกว่าไปยังฟังก์ชั่นภายในและไม่มีคำสั่งเพิ่มเติมนั่นไม่น่าจะเป็นไปได้
Sato Katsura

1
โซลูชันปัจจุบันของคุณมีทั้งสง่างามและเป็นสำนวน
romainl

1
ข้าม '.' ในส่วนแยก
Christian Brabandt

1
@SatoKatsura จริง ๆ แล้วฉันคิดว่ามันมีประสิทธิภาพมากกว่าเพราะโปรแกรม regexp ไม่จำเป็นต้องจับคู่อะไรเลย นอกจากนี้เป็นวิธีที่ต้องการจากเอกสาร
Christian Brabandt

1
@ChristianBrabandt ตามคู่มือsplit()โดยไม่มี{keepempty}ตัวเลือกควรลบรายการเปล่าเดียวที่จุดเริ่มต้นและรายการว่างเปล่าเดียวในตอนท้าย ขณะนี้มันจะลบรายการเปล่าทั้งหมดรวมถึงรายการที่อยู่ตรงกลางของรายการ (ซึ่งมีประโยชน์มากกว่าพฤติกรรมที่เป็นเอกสารหากคุณถามฉัน แต่คุณอาจไม่ได้) vim_devฉันคิดว่านี้ได้รับการกล่าวเมื่อเร็ว ๆ นี้
Sato Katsura

คำตอบ:


10

ทางออกของคุณหรูหรามาก! ทางเลือกถ้าคุณอยู่ในระบบปฏิบัติการยูนิกซ์ env:

!!rev


2

หากคุณกำลังใช้ระบบที่เหมือนยูนิกซ์ในคำสั่ง vim ให้พิมพ์ ex-command :%! rev

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.