วิธีที่ง่ายที่สุดคือใช้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 ตามที่คนส่วนใหญ่ใช้) Vim พยายามเข้ารหัสข้อความดังกล่าวซึ่งมักจะนำไปสู่ความเสียหายของไฟล์
:w
คุณสามารถตรวจสอบโดยการเปิดไฟล์และเพียงแค่ใช้ ตอนนี้มันเปลี่ยนไปแล้ว
หากคุณตั้งค่าLANG
และLC_ALL
เป็นC
(ASCII), Vim จะไม่แปลงอะไรเลยและไฟล์จะยังคงเหมือนเดิม (แต่ก็ยังเพิ่มบรรทัดใหม่) เนื่องจาก Vim ไม่จำเป็นต้องทำการเข้ารหัสแบบหลายไบต์
ผมเองยังชอบที่จะปิดการใช้งาน 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' และ 'เครื่องมือ➙แปลงกลับ'
เคล็ดลับที่เป็นกลุ่มวิกิพีเดียมีหน้าเว็บที่มีข้อมูลเพิ่มเติมและบางสคริปต์ผู้ช่วย โดยส่วนตัวแล้วฉันคิดว่าคุณน่าจะใช้โปรแกรมแก้ไข hex จริงถ้าคุณแก้ไขไฟล์ไบนารีที่มักจะ เป็นกลุ่มสามารถ
เรียงลำดับของงาน แต่เห็นได้ชัดว่ามันไม่ได้ออกแบบมาสำหรับมันและถ้าคุณเคยเขียนโดยไม่ต้องเป็น:set binary
กลุ่มอาจทำลายไฟล์ไบนารีของคุณ!