我有这样的评论栏
###################
# 20a#
# I need this #
# I all lines
# The endin #
###################
我想这样:
###################
# 20a# #
# I need this #
# I all lines #
# The ending # #
###################
我可以在可视模式下执行此操作(启用虚拟编辑,选择列,r#),如此answer中所述。
但是,我正在寻找这样的解决方案,如果存在一个原生的:
:100,200r20,#
(假设的意思是:替换第20列字符,即使超过行尾,对于行100到200,使用#。更一般地,替换多个字符会更好)
感谢。
答案 0 :(得分:2)
您可以将&ve
设置为all
以使用:normal!
:let x=&ve
:set ve=all|2,5norm! 19|r#
:let &ve=x
如果你愿意的话,你也可以将它们包装在一个函数中。
关于ve
选项::h 've'
P.S。
不完全是您的问题的解决方案,但您可能想要检查一下:
答案 1 :(得分:1)
如果你真的决定这样做,你可以:
:100,200g!/\m^.\{20}/s/$/\=repeat(' ', 20-strdisplaywidth(getline('.')))/
:100,200s/\m^.\{19}\zs./#/
第一个命令的要点是将线条填满所需的长度。第二行的要点是添加#
个字符。
您也可以将上述内容变为命令:
function! FillHash(line1, line2)
let max_len = max(map(getline(a:line1, a:line2), 'strdisplaywidth(v:val)')) + 1
for n in range(a:line1, a:line2)
let line = getline(n)
call setline(n, line . repeat(' ', max_len - strdisplaywidth(line)) . '#')
endfor
endfunction
command! -range FillHash call FillHash(expand(<line1>), expand(<line2>))
然后你就这样调用命令:
:100,200FillHash
但是,我建议你改用Par。