Инвертируйте слово в Vim

Я думаю, что LINQ является существенным изменением к.NET, и это - очень мощный инструмент.

я использую LINQ для XML в производстве, чтобы проанализировать и отфильтровать записи от XML-файла 6 МБ (с 20 + уровни узла) в набор данных в двух строках кода.

Перед LINQ это проводило бы сотни строк кода и дни для отладки.

Это - то, что я называю изящными!

13
задан Jogusa 5 November 2009 в 13:42
поделиться

6 ответов

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

4
ответ дан 1 December 2019 в 22:23
поделиться

Предполагая, что у вас есть поддержка perl, встроенная в 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
ответ дан 1 December 2019 в 22:23
поделиться

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

:python 'word'[::-1]

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

3
ответ дан 1 December 2019 в 22:23
поделиться

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

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

\ is is:

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

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

2
ответ дан 1 December 2019 в 22:23
поделиться

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

0
ответ дан 1 December 2019 в 22:23
поделиться

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

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

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

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

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

7
ответ дан 1 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: