2009-07-13 17 views
18

मैं एक फ़ाइल मैं विम में संपादन कर रहा हूँ में इस स्तंभ है:मैं वीआईएम में दशमलव संख्या को हेक्स में कैसे परिवर्तित कर सकता हूं?

16128 
16132 
16136 
16140 
# etc... 

और मैं इस कॉलम को परिवर्तित करना चाहते हैं:

0x3f00 
0x3f04 
0x3f08 
0x3f0c 
# etc... 

मैं कैसे विम में ऐसा कर सकते हैं?

उत्तर

38

उपयोग प्रतिस्थापन को संभालने के लिए \= कमांड के साथ:

:%s/\d\+/\=printf("0x%04x", submatch(0)) 

विवरण:

  • :%s/\d\+/: किसी भी लाइन (:%) और स्थानापन्न (s) पर एक या अधिक अंक (\d\+) का मिलान करें।
  • \=:
  • printf("0x%04x",: प्रत्येक मैच के लिए, निम्नलिखित अभिव्यक्ति का परिणाम के साथ बदलें प्रारूप "0x%04x" है, जो एक शाब्दिक 0x चार अंकों वाला (या अधिक) हेक्स नंबर के बाद से मेल खाती है का उपयोग कर एक स्ट्रिंग उत्पादन, गद्देदार शून्य के साथ।
  • submatch(0): पूरा मैच का नतीजा है (यानी नंबर)।

अधिक जानकारी के लिए देखें:

:help printf() 
:help submatch() 
:help sub-replace-special 
:help :s 
+0

+1 अच्छा (... और शेष 15 वर्ण) – stefanB

+0

अच्छी तरह से काम करता है, इस बात से अवगत रहें कि यदि आपके पूर्णांक में ऋणात्मक मान हैं, तो आपको इसकी खोज को उचित रूप से 's/- \? \ D \ +/\ = printf ("0x% 08x", submatch (0)) 'और अतिरिक्त '0xffff की आवश्यकता के अनुसार हटाएं: उदाहरण के लिए 32 बिट के लिए' s/0xffffffff/0x'। – Orwellophile

5

एक और तरीका है, यह AWK को

awk '{printf "0x%x\n",$1}' file 
4

चुनें (दृश्य) लाइनों के ब्लॉक कि संख्या शामिल पारित करने के लिए, और उसके बाद:

printf (सी के sprintf के अनुरूप)
:!perl -ne 'printf "0x\%x\n", $_' 
+1

विम का आंतरिक प्रिंटफ होने पर पर्ल का उपयोग क्यों करें? – DrAl

6

फिर भी एक और तरीका है:

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

या:

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

इसमें कुछ समय कम लिखना है और आप एक स्तर से बचने उद्धरण/खोल से बचने के लिए जो आपको मिलेगा यदि आपने :! के माध्यम से ऐसा किया है । आपको अपने विम में संकलित पर्ल/रूबी समर्थन की आवश्यकता है।

+1

और विस्क्रिप्ट का उपयोग करने के तरीके को याद रखना आसान है, अगर (अधिकांश लोगों की तरह) आप इसे पर्ल और रूबी से बहुत कम बार उपयोग करते हैं। – ephemient

1

हेक्साडेसिमल में एक दशमलव बदलने के लिए, आदेश

:echo printf("%x", decimal) 

यह दशमलव के हेक्साडेसिमल बराबर में परिणाम प्रदर्शित किया जा रहा का उपयोग करें।

उदाहरण:

:echo printf("%x", 61444) 

f004 (61,444 के समकक्ष) प्रदर्शित होता है।

यह खोजने के लिए और फ़ाइल में 61,444 की जगह नहीं होगी।

संबंधित मुद्दे

 संबंधित मुद्दे