Як повернути рядок зі скриптом Vim


11

Я намагаюся повернути рядок, щоб це 'abc defg hij'стало 'jih gfed cba'. Я придумав рішення

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

Чи є більш елегантне рішення чи я повинен дотримуватися того, що я придумав?


1
Це залежить від того, що ви маєте на увазі під "елегантним". Немає внутрішньої функції, присвяченої оберненню рядка, якщо це те, що ви запитуєте. Якщо ви маєте на увазі робити це з двома або меншими викликами до внутрішніх функцій та без додаткових операторів, це, здається, також не можливо.
Сато Кацура

1
Ваше теперішнє рішення є вже і вишуканим, і ідіоматичним.
romainl

1
Пропустіть '.' у розділеній частині.
Крістіан Брабандт

1
@SatoKatsura насправді, я вважаю, що це більш ефективно, тому що двигуну regexp нічого не потрібно відповідати. Крім того, це найкращий спосіб з документації.
Крістіан Брабандт

1
@ChristianBrabandt Згідно з посібником, split()без цього {keepempty}варіанту слід видалити один порожній елемент на початку, а один порожній елемент в кінці. Наразі він видаляє всі порожні елементи, включаючи ті, що знаходяться в середині списку (що корисніше, ніж задокументоване поведінка, якщо ви запитаєте мене, але ви, мабуть, ні). Я думаю, що це обговорювалося недавно vim_dev.
Сато Кацура

Відповіді:


10

Ваше рішення дуже елегантне! Альтернатива, якщо ви перебуваєте в середовищі Unix env:

!!rev


2

Якщо ви використовуєте unix-подібну систему, в vim введіть ex-команду :%! rev

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.