En basit yol binary
seçeneği kullanmaktır . Kimden :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.
Bunu yapmazsanız ve ortamınız çok baytlı bir kodlama kullanıyorsa (örneğin, çoğu insanın kullandığı gibi UTF-8), Vim, metni genellikle dosya bozulmasına yol açan şekilde kodlamaya çalışır.
Bunu bir dosyayı açarak ve sadece kullanarak doğrulayabilirsiniz :w
. Şimdi değişti.
Eğer ayarlarsanız LANG
ve LC_ALL
karşı C
(ASCII), Vim şey dönüştürmez ve dosyalar aynı kalmak Vim herhangi baytlı kodlama yapmak gerekmez çünkü (hala olsa, bir yeni satır ekler).
Ben kişisel olarak ikiliyi de devre dışı bırakmayı tercih ediyorum set wrap
, ancak diğerleri de etkinleştirmeyi tercih ediyor olabilir . YMMV. Yapılacak başka bir faydalı şey :set display=uhex
. Kimden :help 'display'
:
uhex Show unprintable characters hexadecimal as <xx>
instead of using ^C and ~C.
Ve son bir ipucu olarak, cetveldeki imlecin altındaki karakterin onaltılık değerini %B
( :set rulerformat=0x%B
) ile gösterebilirsiniz .
Daha ileri: xxd
xxd(1)
Bir dosyayı daha okunabilir bir biçime dönüştürmek için aracı kullanabilirsiniz ve (bu önemli bit), düzenlenen "okunabilir biçimi" ayrıştırıp ikili veri olarak geri yazabilirsiniz. xxd
bir parçası vim
, yani eğer vim
yüklediyseniz de sahip olmalısınız xxd
.
Kullanmak için:
$ xxd /bin/ls | vi -
Veya dosyayı daha önce açtıysanız, şunları kullanabilirsiniz:
:%!xxd
Şimdi değişikliklerinizi yapın, ekranın sol tarafındaki (onaltılık sayılar), sağ taraftaki değişikliklerin (yazdırılabilir gösterim) yazarken göz ardı edilmesini sağlamanız gerekir.
Kaydetmek için şunu kullanın xxd -r
:
:%!xxd -r > new-ls
Bu dosyayı kaydedecektir new-ls
.
Veya ikili dosyayı geçerli tamponda yüklemek için:
:%!xxd -r
Kimden 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.
Ve sonra sadece :w
yazmak için kullanın . ( dikkat : binary
yukarıdaki nedenlerle aynı sebeplerden dolayı, dosyaya yazmadan önce bu seçeneği belirlemek istiyorsunuz ).
Bunu kolaylaştırmak için tamamlayıcı tuşlar:
" 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>
Bu ayrıca, 'Araçlar V HEX'e Dönüştür' ve 'Araçlar X Geri dönüştür' altında gVim kullanıyorsanız menüden de kullanılabilir.
Vim ipuçları wiki Daha fazla bilgi ve bazı yardımcı komut dosyaları ile bir sayfası vardır. Şahsen, muhtemelen bu ikili dosyaları düzenliyorsanız, gerçek bir hex editörü kullanarak daha iyi olduğunuzu düşünüyorum. Vim
işi halledebilir , ancak belli ki bunun için tasarlanmamış ve :set binary
Vim olmadan yazdığınızda ikili dosyalarınızı tahrip edebilir!