Переверніть кожне слово у рядку in vim


9

Ваше завдання - створити скрипт vim або надати послідовність натискань клавіш, які працюватимуть на одному рядку тексту з до 140 друкованих символів ASCII (де завгодно у файлі, курсор починається в будь-якій точці рядка) та перевертати кожен пробіл, відокремлений рядок у реченні, зберігаючи рядки в тому ж порядку.

Наприклад, вхід:

roF emos nosaer m'I gnisu a retcarahc-041 timil no siht noitseuq neve hguoht ti t'nseod evlovni .rettiwT RACECAR  

повинен повернутися:

For some reason I'm using a 140-character limit on this question even though it doesn't involve Twitter. RACECAR  

Сценарій з найменшою кількістю символів або послідовність найменших натискань клавіш для досягнення цього результату є переможцем.


1
"Для цілей цього питання це лише vim", мабуть, довільне мовне обмеження, як публікація звичайного виклику для гольфу з кодом і прохання відповіді лише у C. ( І я, здається, не один з цією думкою. )
Мартін Ендер

27
Чому RACECAR не змінюється назад?
orlp

3
Тому що це паліндром. Спробуйте відмінити це самостійно.
Джо З.

2
Ого, я дурний. Дерп.
orlp

7
@orlp Лол. Я думав, ти жартуєш.
mbomb007

Відповіді:


9

28 25 24 натискання клавіш

:se ri<CR>^qqct <C-r>"<Esc>f l@qq@q

Рекурсивний макрос, я припускаю, що Ctrl- rвважається одним натисканням клавіші.

Найважче було переконатися, що макрос залишається в одній лінії та не знищує решту файлу.


Ви можете використовувати cEзамість ct , якщо макрос не закінчувався. Але ви можете використовувати Wзамість того, f lщоб зберегти 2 удари.
Caek

@Caek Неправильно x2. Здогадайтесь, що cEробити, коли курсор на початку a retcarahc-041? І вгадайте, що Wробить, коли ми в кінці рядка?
orlp

Зверніть увагу на столицю E. нижній регістр eпіде до тире, капітал Eпіде до наступного місця. Я просто спробував це підтвердити.
Caek

спробуйте: :set ri<Enter>^qqct <C-r>"<Esc>W@qq@qдля 23.
Caek

@Caek Це не спрацює. А щодо E, я знаю, що це робить. Я мав на увазі, що cE<C-r><Esc>перетвориться a retcarahc-041на 140-character aAKA, він змінить слова.
orlp

3

24 натискання клавіш

ma:s/ /\r/g
V'a:!rev
gvJ

Я знаю, що це питання дуже давнє, але я люблю vimgolf, тому я не зміг опублікувати відповідь на одну з небагатьох проблем, пов’язаних з vim. Плюс це рішення пов'язане з Орлпом.

Так само, як сказав Орлп, найважча частина полягала в тому, щоб решта буфера була немодифікована. Якби не обмеження, ми могли б просто зробити:

:s/ /\r/g
!{rev
V}J

(19 натискань клавіш), але нам потрібно трохи більше, щоб захистити його від буфера. Це передбачає середовище Unix.

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