Hi felix!

On Mo, 22 Feb 2010, felix hoo wrote:

> When I edit the binary file in hex mode in vim. I would like to have the
> ascii view updated once I change the hex value. Is it possible to do so?
> 
> Current behavior is :
> 
> 0000000: 3132 372e 302e 302e 3109 0920 2020 206c  127.0.0.1..    l
> 0000010: 6f63 616c 686f 7374 0a                   ocalhost.
> 
> Change the first byte. But the ASCII view does not changed accordingly.
> 
> 0000000: 3232 372e 302e 302e 3109 0920 2020 206c  127.0.0.1..    l
> 0000010: 6f63 616c 686f 7374 0a                   ocalhost.
> 
> I would like to vim act like this
> 
> 0000000: 3232 372e 302e 302e 3109 0920 2020 206c  227.0.0.1..    l
> 0000010: 6f63 616c 686f 7374 0a                   ocalhost.

I think, the best solution would be, to filter your file back through 
xxd -r and return to the hex view by filtering it again through xxd. 

Nevertheless, you could update the view manually, something like this 
could work:

fun! <sid>HexVal(val)
     let val=substitute(a:val, '\s\+', '','g')
     let list=split(val, '..\zs')
     call map(list, 'nr2char(str2nr(v:val,16))')
     call map(list, 'empty(v:val)?".":v:val')
     let val=join(list, '')
     let val=substitute(val, '[^[:print:]]', '.', 'g')
     return val
endfun

fun! <sid>UpdateHexDisplay() range
    s/\%51c.*$//e
    s/: \zs\(\%(\x\{4\}\s\)\{,8}\).*$/\=submatch(0).repeat(' ',
    \41-len(submatch(0))).<sid>HexVal(submatch(1))/
endfu

com! -range HexUp :call <sid>UpdateHexDisplay()


And then run :HexUp on your changed lines. This is however only barely 
tested and might corrupt your file. You should be very careful, when 
using this.

regards,
Christian

-- 
You received this message from the "vim_use" maillist.
For more information, visit http://www.vim.org/maillist.php

Reply via email to