सबसे आसान तरीका binary
विकल्प का उपयोग करना है। से :help binary
:
This option should be set before editing a binary file. You can also
use the -b Vim argument. When this option is switched on a few
options will be changed (also when it already was on):
'textwidth' will be set to 0
'wrapmargin' will be set to 0
'modeline' will be off
'expandtab' will be off
Also, 'fileformat' and 'fileformats' options will not be used, the
file is read and written like 'fileformat' was "unix" (a single <NL>
separates lines).
The 'fileencoding' and 'fileencodings' options will not be used, the
file is read without conversion.
[..]
When writing a file the <EOL> for the last line is only written if
there was one in the original file (normally Vim appends an <EOL> to
the last line if there is none; this would make the file longer). See
the 'endofline' option.
यदि आप ऐसा नहीं करते हैं, और आपका वातावरण एक मल्टीबैट एन्कोडिंग का उपयोग कर रहा है (उदाहरण के लिए UTF-8, जैसा कि अधिकांश लोग उपयोग करते हैं), विम पाठ को इस तरह से एन्कोड करने का प्रयास करता है, आमतौर पर भ्रष्टाचार दर्ज करने के लिए अग्रणी होता है।
आप एक फ़ाइल खोलकर, और बस उपयोग करके इसे सत्यापित कर सकते हैं :w
। अब इसे बदल दिया गया है।
आप सेट करते हैं LANG
और LC_ALL
करने के लिए C
(ASCII), विम कुछ भी परिवर्तित नहीं करता है और फ़ाइलें एक ही रहना (यह अभी भी, एक नई पंक्ति कहते हैं, हालांकि) के बाद से विम किसी भी multibyte एन्कोडिंग करने की ज़रूरत नहीं होगी।
मैं व्यक्तिगत रूप से भी बाइनरी के लिए अक्षम करना पसंद करता हूं set wrap
, हालांकि अन्य इसे सक्षम करना पसंद कर सकते हैं । YMMV। एक और उपयोगी चीज है :set display=uhex
। से :help 'display'
:
uhex Show unprintable characters hexadecimal as <xx>
instead of using ^C and ~C.
और एक अंतिम टिप के रूप में, आप शासक में कर्सर के नीचे चरित्र का हेक्स मान दिखा सकते हैं %B
( :set rulerformat=0x%B
) के साथ ।
अधिक उन्नत: xxd
आप xxd(1)
फ़ाइल को अधिक पठनीय प्रारूप में बदलने के लिए उपकरण का उपयोग कर सकते हैं , और (यह महत्वपूर्ण बिट है), संपादित "पठनीय प्रारूप" को पार्स करें और इसे बाइनरी डेटा के रूप में वापस लिखें। xxd
का हिस्सा है vim
, इसलिए यदि आपने vim
स्थापित किया है तो आपके पास भी होना चाहिए xxd
।
इसके प्रयेाग के लिए:
$ xxd /bin/ls | vi -
या यदि आपने पहले ही फ़ाइल खोल ली है, तो आप उपयोग कर सकते हैं:
:%!xxd
अब अपने परिवर्तन करें, आपको यह करने की ज़रूरत है कि प्रदर्शन के बाईं ओर (हेक्स संख्या), राइट-हैंड साइड में परिवर्तन (प्रिंट करने योग्य प्रतिनिधित्व) को लिखने पर ध्यान नहीं दिया गया है।
इसे बचाने के लिए, उपयोग करें xxd -r
:
:%!xxd -r > new-ls
यह फाइल को सेव करेगा new-ls
।
या वर्तमान बफर में बाइनरी लोड करने के लिए:
:%!xxd -r
से xxd(1)
:
-r | -revert
reverse operation: convert (or patch) hexdump into binary. If
not writing to stdout, xxd writes into its output file without
truncating it. Use the combination -r -p to read plain hexadeci‐
mal dumps without line number information and without a particu‐
lar column layout. Additional Whitespace and line-breaks are
allowed anywhere.
और फिर :w
इसे लिखने के लिए उपयोग करें। ( खबरदार : आप binary
फ़ाइल को लिखने से पहले विकल्प सेट करना चाहते हैं , ऊपर दिए गए समान कारणों के लिए)।
पूरक कीबाइंड इसे थोड़ा आसान बनाने के लिए:
" Hex read
nmap <Leader>hr :%!xxd<CR> :set filetype=xxd<CR>
" Hex write
nmap <Leader>hw :%!xxd -r<CR> :set binary<CR> :set filetype=<CR>
यदि आप gVim का उपयोग कर रहे हैं, तो 'टूल ➙ कन्वर्ट HEX' और 'टूल्स। कन्वर्ट बैक' के तहत यह मेनू से भी उपलब्ध है।
Vim सुझावों विकि में अधिक जानकारी के लिए और कुछ सहायक स्क्रिप्ट के साथ एक पृष्ठ है। व्यक्तिगत रूप से, मुझे लगता है कि यदि आप बाइनरी फ़ाइलों को अक्सर संपादित कर रहे हैं, तो शायद आप असली हेक्स संपादक का उपयोग करना बेहतर समझते हैं। विम काम कर सकते हैं
, लेकिन यह स्पष्ट रूप से इसके लिए डिज़ाइन नहीं किया गया है, और यदि आप कभी भी :set binary
विम के बिना लिखते हैं तो आपकी बाइनरी फाइलें नष्ट हो सकती हैं!