如何在空文件中使用可视块模式(Ctrl+v)选择一个矩形区域(vim)?

3
我可以轻松地在文件中选择一个矩形区域,只要该区域包含文本或空格(或任何内容)。我使用可视块模式和运动键来完成它。 但是,当我尝试在新文件中(或任何没有文本的文件)创建这样的区域时,我无法做到。 是否有一种方法可以通过自动填充空格等方式“扩展”此区域?或者我走错了方向? 我想这样做的原因是: 我使用vim创建一个新文件,然后想创建一个类似于此的注释块:
##############################################
#                                            #
#  My comment goes here                      #
#                                            #
##############################################

我可以使用Ctrl+v+方向键在现有文本上执行此操作,然后使用r#创建一个填充了井号的区域。然后类似地用空格剪切出内部矩形。

我如何在新文件上使用这种技术?

谢谢。

4个回答

6
除了 Brian Rasmussen 的(非常好的)答案外,我所知道的实现几乎与您要求的相同的唯一方法是使用虚拟编辑模式 virtualedit。这不会让你在不存在的行上进行编辑,但它会让你超出现有行的结尾进行编辑。因此,要将当前行变成一堆 # 符号,可以执行以下操作:
:set virtualedit=all
v50lr#

要制作一个50x5的块,您可以创建4个新的空白行,然后执行相同的操作:
:set virtualedit=all
4o<ESC>
<C-V>4k50lr#

(其中<C-V>表示按下Ctrl+V<ESC>表示按下Esc)。
我相信有一些适用于各种文件类型的插件可以更轻松地创建这样的注释块,但我不确定哪个是最好的。
你可以像这样做:
50i#<ESC>yyo#<ESC>48a<SPACE><ESC>a#<ENTER>#<SPACE><SPACE>My comment goes here<ESC>:exe<SPACE>'normal'<SPACE>(49-getpos('.')[2]).'a<SPACE>'<ENTER>a#<ENTER>#<ESC>48a<SPACE><ESC>a#<ESC>p

也许这只是我傻了!如果您有兴趣,可以留给读者自己去想象发生了什么(:help 是您的好朋友)。
以下是稍微严肃一些的替代方案:将以下内容放入您的 vimrc 文件中或放在 vim 运行时文件夹的插件目录中的文件中(例如,在 Unix 上为 ~/.vim/plugins)。
nmap <F4> :InsertCommentBlock<CR>
command! InsertCommentBlock call InsertCommentBlock()
function! InsertCommentBlock()
    let linelength = 50
    let linelist = []

    call add(linelist, repeat('#', linelength))
    call add(linelist, '#' . repeat(' ', linelength-2) . '#')
    let comment = input('Please enter a comment: ')
    call add(linelist, '#  ' . comment . repeat(' ', linelength - (4+len(comment))) . '#')
    call add(linelist, '#' . repeat(' ', linelength-2) . '#')
    call add(linelist, repeat('#', linelength))

    call append(line('.'), linelist)
endfunction

请参见:

:help function
:help 'virtualedit'
:help command
:help nmap
:help repeat()
:help append()
:help add()
:help getpos()
:help :exe

etc...


4
如果你想在新文件中创建像这样的一个块,可以执行以下操作:50i#EscY5P。这将使你插入50次#,然后复制当前行并粘贴5次。这样就可以得到一个50x5的#块。
当然,你仍然需要做一些工作来将#块转换成你发布的评论形式。

1
接受的答案提到使用。
:set virtualedit=all

然而,如果您在所有模式下启用virtualedit,则可能不是您想要的。实际上,还有一种选项可以仅在块编辑模式下启用它:
:set virtualedit=block

这是我放在我的vimrc文件里的内容。


0

我认为没有办法选择不存在的文本,但简单的解决方案是用像 76a yy4p 这样的东西“种植”它... 所以画出 76 个空格,然后将该行复制 4 次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接