На динамических языках я более экспериментален. Легче изменить вещи на лету, таким образом, я могу исследовать решения быстрее.
, Если я знаю то, что я хочу сделать, и обычно как сделать это, мне нравится C++. Если я не знаю, как сделать то, что я хочу сделать, и вероятно не совсем уверено в том, что я хочу сделать, я очень предпочитаю Lisp.
Используйте printf
(аналог C sprintf
) с командой \ =
для обработки замены:
:%s/\d\+/\=printf("0x%04x", submatch(0))
Подробнее :
:% s / \ d \ + /
: соответствует одной или нескольким цифрам ( \ d \ +
) в любой строке (:%
) и подставьте ( s
). \ =
: для каждого совпадения замените результатом следующего выражения: printf ("0x% 04x",
: произвести строка, использующая формат «0x% 04x»
, что соответствует литералу 0x
, за которым следует четырехзначное (или более) шестнадцатеричное число, дополненное нулями.
submatch (0)
: результат полного соответствия (т.е. число). Для получения дополнительной информации см .:
:help printf()
:help submatch()
:help sub-replace-special
:help :s
другой способ передать его в awk
awk '{printf "0x%x\n",$1}' file
Выберите (ВИЗУАЛЬНО) блок строк который содержит числа, а затем:
:!perl -ne 'printf "0x\%x\n", $_'
Еще один способ:
:rubydo $_ = '0x%x' % $_
Или:
:perldo $_ = sprintf '0x%x', $_
Это немного меньше печатать, и вы избегаете уровня цитирования / экранирования оболочки, который вы получили бы, если бы сделали это через :!
. Вам нужна поддержка Perl / Ruby, скомпилированная в вашем Vim.