是否有快速计算hex文件中的数量? 该文件类似于表示十六进制值的序列:
13
ff
a0
在这种情况下,1的数量是3 + 8 + 2 = 13个数(在我们转换为二进制之后)。 现在我有数千条这样的行,在vi命令中有没有快速的方法呢?
答案 0 :(得分:1)
(假设文件是ascii hex,如果不在python中写一些东西应该不那么难)
稍微设置一下,你就可以很快地完成这项任务。
首先创建一个具有以下内容的文件。
let g:hex2popcount = {
\ '0': 0, '1': 1, '2': 1, '3': 2,
\ '4': 1, '5': 2, '6': 2, '7': 3,
\ '8': 1, '9': 2, 'a': 2, 'b': 3,
\ 'c': 2, 'd': 3, 'e': 3, 'f': 4}
function! Accum(var)
let g:x += g:hex2popcount[a:var]
endfunction
hex2popcount dict是将16个十六进制字符映射到一位数的计数。然后我们创建一个名为Accum的函数,用于跟踪我们看到的位数。要在文件中的所有十六进制数字上运行此操作,我们将使用表达式替换n
标记,该标记实际上不会执行任何替换。
let g:x = 0 | %s/\x/\=Accum(submatch(0))/gn | echo g:x
我们将g:x
设置为零,然后对文件中的每个十六进制数字运行Accum(submatch(0))
。替换完成后g:x
包含一位数的总数。
确保在vim中提供文件。使用vim -S <file with accum function>
或:source <file with accum function>
或将命令放在vimrc中。
相关帮助页面为:help sub-replace-expression
和:help :s_flags