Подтвердить что ты не робот

Обратное слово в Vim

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

word = > дроу

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

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

4b9b3361

Ответ 2

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

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

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

:%s/\(\<.\{-}\>\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g

Это работает, сначала создавая список символов в слове, который обращается и соединяется назад, чтобы сформировать слово. Подставляющая команда находит каждое слово, а затем передает слово в выражения и использует результат в качестве замены.

Ответ 3

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

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

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

nmap ,r :ReverseWord<CR>

Ответ 4

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

:python 'word'[::-1]

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

Ответ 5

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

ИЗМЕНИТЬ

\is:

:<C-U>let [email protected]<CR>
\ :let [email protected]"<CR>
\ gv"ay :let @a=substitute(@a, '.\(.*\)\@=', '\[email protected][strlen(submatch(1))]', 'g')<CR> 
\ gvc<C-R>a<Esc> :let @a=old_reg_a<CR> 
\ :let @"=old_reg<CR>

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

Ответ 6

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

Python

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

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

И ваш текст будет заменен, чтобы стать:

nohtyP

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

Ответ 7

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

Выберите, что вы хотите изменить, и отфильтруйте (%! <cmd>) его:

:%! rev

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

Ответ 8

Если у вас есть какое-то время на ваших руках, вы можете пузырить свой путь туда, итеративно переставляя символы (xp)...

Ответ 9

Есть хитрый способ сделать это, если у вас есть Vim, скомпилированный с +rightleft. Вы устанавливаете 'allowrevins' которые позволяют вам 'allowrevins' Ctrl+_ в режиме вставки, чтобы запустить режим обратной вставки. Первоначально он был сделан для вставки двунаправленных скриптов.

Введите нужное слово в режиме вставки или переместите курсор в конец уже набранного слова. Нажмите Ctrl+_ а затем выберите метод завершения (i_Ctrl-x), который, скорее всего, не i_Ctrl-x результатов для вашего слова. Ysing Ctrl + e, чтобы отменить завершение на месте, похоже, не работает в этом случае.

Т.е. для несинтаксического текстового файла вы можете нажать в режиме вставки Ctrl+x Ctrl+d который гарантированно не сможет найти имена макросов/функций в текущем файле (см :h i_CTRL-X_CTRL-D и :h complete для получения дополнительной информации.).

И вуаля! Завершение поиска в обратном режиме переводит найденное слово в обратный. Обратите внимание, что курсор переместится в начало этого слова (поменялось направление письма, помните?)

Затем вы должны снова нажать Ctrl+_ чтобы вернуться в обычный режим вставки и раскладки клавиатуры и продолжить редактирование.

Совет: Вы можете установить исключительно 'complete' (по крайней мере для буфера) на параметр завершения, который гарантированно не даст результата. Просто перейдите к опциям :h 'complete'. Это сделает простые i_Ctrl-N/i_Ctrl-P доступными для удобного сеанса обращения слов. Конечно, вы можете автоматизировать это с помощью макроса, функции или привязки.

Примечание: установка/сброс 'paste' и 'compatible' может установить/сбросить 'allowrevins'. Смотри :h allowrevins.