Я думаю, что LINQ является существенным изменением к.NET, и это - очень мощный инструмент.
я использую LINQ для XML в производстве, чтобы проанализировать и отфильтровать записи от XML-файла 6 МБ (с 20 + уровни узла) в набор данных в двух строках кода.
Перед LINQ это проводило бы сотни строк кода и дни для отладки.
Это - то, что я называю изящными!
Этот совет может помочь: http://vim.wikia.com/wiki/Reverse_letters
Предполагая, что у вас есть поддержка 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>
Мой VIM не поддерживает Python, но похоже, что это было бы довольно просто сделать с Python. Эта статья кажется хорошим объяснением того, как использовать Python в VIM, и я предполагаю, что вы бы сделали что-то вроде этого:
:python 'word'[::-1]
В статье указано, что результат появится в строке состояния, которая было бы неоптимально, если бы вы пытались заменить строку в документе, но если вы просто хотите проверить, правильно ли ваша девушка меняет строки в своей голове, это должно быть нормально.
если ваша версия 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 . Что показывает то же самое, так что я думаю, что это все.
Если у вас есть немного времени, вы можете пробиться туда, итеративно транспонируя символы ( xp
) ...
Вот еще одно (питоническое) решение, основанное на том, как это работает:
:echo join(reverse(split('hello', '.\zs')), '')
olleh
Если вы хотите заменить все слова в буфере,
:%s/\(\<.\{-}\>\)/\=join(reverse(split(submatch(1), '.\zs')), '')/g
Это работает, сначала создав список символов в слово, которое перевернуто и соединено обратно, чтобы образовать слово. Команда замены находит каждое слово, затем передает слово в выражения и использует результат в качестве замены.