Как перевернуть строку с помощью скрипта Vim

11

Я пытаюсь перевернуть строку, чтобы это 'abc defg hij'стало 'jih gfed cba'. Решение, которое я придумал,

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

Есть ли более элегантное решение или я должен придерживаться того, что придумал?

Рене Ниффенеггер
источник
1
Это зависит от того, что вы подразумеваете под «элегантным». Нет внутренней функции, предназначенной для обращения строки, если это то, что вы спрашиваете. Если вы имеете в виду сделать это с двумя или менее вызовами внутренних функций и без дополнительных операторов, то это тоже не представляется возможным.
Сато Кацура
1
Ваше текущее решение уже элегантно и идиоматично.
romainl
1
Пропустить '.' в разделенной части.
Кристиан Брабандт
1
@SatoKatsura на самом деле, я думаю, что это более эффективно, потому что движку регулярных выражений не нужно ничего совпадать. Кроме того, это предпочтительный способ из документации.
Кристиан Брабандт
1
@ChristianBrabandt Согласно инструкции, split()без {keepempty}опции следует удалить один пустой элемент в начале и один пустой элемент в конце. В настоящее время он удаляет все пустые элементы, включая те, что находятся в середине списка (что более полезно, чем задокументированное поведение, если вы спросите меня, но, вероятно, это не так). Я думаю, что это обсуждалось недавно vim_dev.
Сато Кацура

Ответы:

10

Ваше решение очень элегантно! Альтернатива, если вы используете env на основе Unix:

!!rev
JJoao
источник
3

Из викия

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

Для более подробной информации смотрите: :h revins

SergioAraujo
источник
2

Если вы используете unix-подобную систему, в vim введите ex-command :%! rev

KeeeeiZ
источник