Перевернуть слово в Vim

Как я могу перевернуть слово в Vim? Предпочтительно с командами регулярного выражения или обычного режима, но приветствуются и другие методы:

слово => дроу

Спасибо за вашу помощь! PS: ям в windows XP

Python встроен в мой vim, но не в Perl.

 Jogusa05 нояб. 2009 г., 15:08
Привет, @wishi_! Моя девушка может очень быстро поменять слова, и я хочу это проверить :-)
 wishi05 нояб. 2009 г., 14:47
Я вижу эту функцию очень часто. Точно: зачем тебе это? ;)

Ответы на вопрос(8)

Если у вас естьrev установлен (например, через MSys или Cygwin), тоЭто действительно не так сложно.

Выберите то, что вы хотите изменить и отфильтровать (%! ) Это:

:%! rev

Это передает ваш выбор в вашу оболочку, передавая ему команду.

если ваша версия VIM поддерживает это вы можете сделатьvw\is или жеviw\is (поместите курсор на первую букву слова перед вводом команды) ... но у меня было много проблем с совместимостью с этим. Не уверен, что нужно скомпилировать или включить, но иногда это работает.

РЕДАКТИРОВАТЬ:

\is является:

:let [email protected]
\ :let old_reg[email protected]"
\ gv"ay :let @a=substitute(@a, '.\(.*\)\@=', '\[email protected][strlen(submatch(1))]', 'g') 
\ gvca :let @a=old_reg_a 
\ :let @"=old_reg

Didn»не помню, откуда он пришел, но поиск Google пришел эту статью наvim.wikia.com, Что показывает то же самое, так что я думаю, чтосидеть.

 Benj05 нояб. 2009 г., 13:53
Хм, это некажется, не работает для меня, если вы печатаете "карта", что у тебя есть \ я отображается?

Вот еще одно (питоническое) решение, основанное на том, как это работает:

:echo join(reverse(split('hello', '.\zs')), '')
olleh

Если вы хотите заменить все слова в буфере,

:%s/\(\\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g

Для этого сначала создается список символов в слове, который переворачивается и объединяется, образуя слово. Команда замены находит каждое слово, а затем передает слово в выражения и использует результат в качестве замены.

Я неPython не поддерживается в моем VIM, но, похоже, было бы довольно просто сделать это с Python.Эта статья кажется хорошим объяснением того, как использовать Python в VIM, и яя угадываю тебясделать что-то вроде этого:

:python 'word'[::-1]

В статье указывается, что результат будет отображаться в строке состояния, что было бы неоптимальным, если вы пытались заменить строку в документе, но если вы просто хотите проверить, правильно ли ваша девушка переворачивает строки в своей голове, это все должно быть в порядке.

Ну, вы можете использовать сам Python, чтобы перевернуть строку с помощью команды фильтра. Скажите, что текст, который вы написали, был:

Python

Вы можете отменить это, выпустив.

:1 ! python -c "print raw_input()[::-1]"

И ваш текст будет заменен на:

nohtyP

«1» в команде говорит vi отправлять строку 1 в оператор python, который мы выполняем: "print raw_input () [:: - 1] ", Поэтому, если вы хотите, чтобы какая-то другая строка была перевернутой, вы бы отправили номер этой строки в качестве аргумента. Затем оператор python переворачивает строку ввода.

Предполагая, что выу вас есть поддержка Perl, встроенная в vim, вы можете сделать это:

command! ReverseWord call ReverseWord()
function! ReverseWord()
perl < EOF
    $curword = VIM::Eval('expand(" $reversed");
    VIM::DoCommand("norm lbcw$reversed");
EOF
endfun

И потенциально связать это с нажатием клавиши так:

nmap ,r :ReverseWord
 Jogusa05 нояб. 2009 г., 14:18
Это неКажется, это не работает для меня, возможно, Perl не поддерживается. Но питон поддерживается! Спасибо за ваши усилия.
 Benj05 нояб. 2009 г., 13:55
Хорошо, исправил и отредактировал мой ответ, в основном нужна норма lbcw, а не просто bcw
 Benj05 нояб. 2009 г., 15:08
Вы можете сказать, если у вас есть Perl с "vim - версия | grep perl " если вы видите "+ Perl» это значитs скомпилирован. В большинстве дистрибутивов Linux по умолчанию встроен perl, хотя яЯ должен был скомпилировать его на себе на win32 и macosx.
 Benj05 нояб. 2009 г., 13:54
Хм, только что понял, что нене работать, если тыНа первую букву слова, вы должны быть на букву еще две.
Решение Вопроса

Этот совет может помочь:http://vim.wikia.com/wiki/Reverse_letters

Если у вас есть немного времени, вы можете проложить себе дорогу, итеративно переставляя символы (xp) ...

Ваш ответ на вопрос