Как я могу отменить слово в Vim? Предпочтительно команды с регулярным выражением или нормальным режимом, но также приветствуются другие методы:
word = > дроу
Спасибо за вашу помощь! PS: Я в Windows XP
Python встроен в мой vim, но не Perl.
Как я могу отменить слово в Vim? Предпочтительно команды с регулярным выражением или нормальным режимом, но также приветствуются другие методы:
word = > дроу
Спасибо за вашу помощь! PS: Я в Windows XP
Python встроен в мой vim, но не Perl.
Этот совет может помочь: http://vim.wikia.com/wiki/Reverse_letters
Вот другое (питоновское) решение, основанное на том, как это работает:
:echo join(reverse(split('hello', '.\zs')), '')
olleh
Если вы хотите заменить все слова в буфере,
:%s/\(\<.\{-}\>\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g
Это работает, сначала создавая список символов в слове, который обращается и соединяется назад, чтобы сформировать слово. Подставляющая команда находит каждое слово, а затем передает слово в выражения и использует результат в качестве замены.
Предполагая, что у вас есть встроенная поддержка 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>
У меня нет Python, поддерживаемого на моем VIM, но похоже, что это было бы довольно просто сделать с Python. Эта статья кажется хорошим объяснением того, как использовать Python в VIM, и я предполагаю, что вы сделали бы что-то вроде этого:
:python 'word'[::-1]
В статье указано, что результат появится в строке состояния, что было бы неоптимальным, если бы вы пытались заменить строку в документе, но если вы просто хотите проверить, что ваша девушка правильно меняет строки в ней голова, это должно быть хорошо.
если ваша версия 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. Что показывает то же самое, поэтому я предполагаю, что это.
Ну, вы могли бы использовать сам python, чтобы перевернуть строку с помощью команды filter. Скажите, что вы написали:
Python
Вы можете изменить его, выпустив.
:1 ! python -c "print raw_input()[::-1]"
И ваш текст будет заменен, чтобы стать:
nohtyP
"1" в команде сообщает vi отправить строку 1 в оператор python, который мы выполняем: "print raw_input() [:: - 1]". Поэтому, если вы хотите, чтобы какая-то другая линия была отменена, вы отправили бы этот номер строки в качестве аргумента. Затем инструкция python меняет направление ввода.
Если у вас установлено rev
(например, через MSys или Cygwin), это действительно не так сложно.
Выберите, что вы хотите изменить, и отфильтруйте (%! <cmd>
) его:
:%! rev
Это передает ваш выбор в вашу оболочку, передавая ей команду.
Если у вас есть какое-то время на ваших руках, вы можете пузырить свой путь туда, итеративно переставляя символы (xp
)...
Есть хитрый способ сделать это, если у вас есть 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
.