Как я могу преобразовать десятичное число для преобразовывания в шестнадцатеричную систему в VIM?

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

, Если я знаю то, что я хочу сделать, и обычно как сделать это, мне нравится C++. Если я не знаю, как сделать то, что я хочу сделать, и вероятно не совсем уверено в том, что я хочу сделать, я очень предпочитаю Lisp.

20
задан Nathan Fellman 13 July 2009 в 08:45
поделиться

4 ответа

Используйте 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
40
ответ дан 29 November 2019 в 23:02
поделиться

другой способ передать его в awk

awk '{printf "0x%x\n",$1}' file
5
ответ дан 29 November 2019 в 23:02
поделиться

Выберите (ВИЗУАЛЬНО) блок строк который содержит числа, а затем:

:!perl -ne 'printf "0x\%x\n", $_'
4
ответ дан 29 November 2019 в 23:02
поделиться

Еще один способ:

:rubydo $_ = '0x%x' % $_

Или:

:perldo $_ = sprintf '0x%x', $_

Это немного меньше печатать, и вы избегаете уровня цитирования / экранирования оболочки, который вы получили бы, если бы сделали это через :! . Вам нужна поддержка Perl / Ruby, скомпилированная в вашем Vim.

6
ответ дан 29 November 2019 в 23:02
поделиться
Другие вопросы по тегам:

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