Как перевернуть строку с помощью скрипта 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

3

Из викия

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

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


2

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.