如何使用Vim填充字符x到y列的行

Joh*_*ley 29 vim

如何使用Vim将具有指定字符的行的剩余部分填充到某列?例如,假设光标位于第四列,我想用破折号填充当前行的其余部分,直到第80列.我该怎么做?

Con*_*ner 61

你可以做80Ax<Esc>d80|一个更简单的解决方案.

  • 这应该是最好的答案!`80A-<ESC> D80 |`.管道做了什么? (4认同)
  • `:help |` - 它是指定列的动作 - 在本例中为第80列.因此,这使用100Ax <esc>来追加到行的末尾100次,并且附加的字符是x.然后,它删除第80列的所有内容. (2认同)

drf*_*lat 24

这是一个实现你要求的功能,稍微多一点.

  • 它从当前行的末尾填充行,而不是光标位置
  • 它强制在当前在线上和重复的字符之间的单个空格
  • 它允许您指定任何字符串来填充行的其余部分
  • 它使用vim的textwidth设置来决定该行应该有多长(而不是仅假设80个字符)

该功能定义如下:

" fill rest of line with characters
function! FillLine( str )
    " set tw to the desired total length
    let tw = &textwidth
    if tw==0 | let tw = 80 | endif
    " strip trailing spaces first
    .s/[[:space:]]*$//
    " calculate total number of 'str's to insert
    let reps = (tw - col("$")) / len(a:str)
    " insert them, if there's room, removing trailing spaces (though forcing
    " there to be one)
    if reps > 0
        .s/$/\=(' '.repeat(a:str, reps))/
    endif
endfunction
Run Code Online (Sandbox Code Playgroud)

将其插入您的.vimrc,并对其进行映射,例如

map <F12> :call FillLine( '-' )
Run Code Online (Sandbox Code Playgroud)

然后,您可以按F12将连字符应用于当前行

注意:这可能很容易扩展到在VISUAL模式下进行选择,但目前仅适用于单行.*


fov*_*ven 5

如果我正确理解了这个问题,可以这样完成:在正常模式下从所需的结束列中减去光标的当前列位置,然后键入结果,然后输入'i'进入插入模式,然后输入要填充的字符与...的空间.通过返回正常模式结束.例如,在正常模式下光标位于第四列时,如果要用破折号填充第80列的其余部分,请键入76i-然后按Esc或Ctrl- [返回正常模式.这应该导致76个破折号从第4列开始到第79列结束.