有没有一种方法可以在VIM中增加%z
十六进制数呢?通常,我可以通过按下ctrl + a
来增加普通数字。但不幸的是,我正在使用一个老式系统,该系统使用%z
而不是0x
来表示十六进制数。我已经尝试过了。
Set nf=hex
但这仅适用于
0x
十六进制数。有人遇到过这种情况吗?我在谷歌上没有找到太多相关信息。%z
是什么意思,但我写了一个快速而简单的函数来增加像%z0f这样的数字;这是你想要的吗?然后你应该能够添加一个映射到它上面(但不能用它本身,因为它在函数中使用!),例如::map <C-p> :call MyIncrement()<CR>
当然,你应该根据自己的需要进行定制;第17行重置光标位置以在增加后保持正确的位置;你可以用l:b
(或甚至l:a
)替换l:c
并选择你最喜欢的选项。function! MyIncrement()
let l:l = line(".")
let l:c = col(".")
let l:a = 0
let l:b = 0
let l:s = search('%z[0-9a-f]\+', 'bcW',l:l)
if l:s == l:l
let l:a = col(".")
let l:s = search('%z[0-9a-f]\+', 'ecW',l:l)
let l:b = col(".")
if ((l:a<=l:c)&&(l:c<=l:b))
call cursor(l:l, l:a+2)
silent exe "normal i 0x\e\<C-a>"
call cursor(l:l, l:a+2)
silent exe "normal 3x"
call cursor(l:l, l:c)
endif
endif
endfunction
:map \a Fza0x<ESC><C-a>Fzlxx
现在,\a
-- (请选择更好的键)将会:
z
(Fz
)0x
(a0x<ESC>
)<C-a>
)0x
(Fzlxx
)
%z
格式是从哪里来的?看起来 vim 只支持0x
作为十六进制数的前缀,因此你最好将所有的%z
全局替换为0x
,然后执行宏或其他操作来增加数值,最后再恢复前缀。 - robbyphillips