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

时间:2010-09-08 11:36:11

标签: vim viemu

如果此区域包含文本或空格(或任何内容),我可以轻松选择文件中的矩形区域。我用可视块模式和动作键来做。 但是当我尝试在新文件(或任何没有文本的文件)中创建这样的区域时,我不能。 有没有办法通过自动填充空格来“扩展”这个区域?或者我走向错误的方向?

我想要这个的原因:

我使用vim创建一个新文件,然后想创建一个与此类似的注释块:

##############################################
#                                            #
#  My comment goes here                      #
#                                            #
##############################################

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

如何在新文件上使用此技术?

感谢。

4 个答案:

答案 0 :(得分:5)

除了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运行时文件夹的plugins目录中的文件中敲响以下内容(例如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

等...

答案 1 :(得分:4)

如果你想在新文件中创建一个像这样的块,你可以做类似 5 0 i ESC ý 5 P

所以它是50次插入#然后是猛拉当前行并将其放置5次。这将给你一个50x5的#块。

当然,你仍然需要这样做,无论你做什么从#s块到你帖子中的评论。

答案 2 :(得分:1)

接受的答案提及

:set virtualedit=all

但是,您可以在所有模式下启用virtualedit,这可能不是您想要的。实际上还有一个选项可以在块编辑模式下启用它:

:set virtualedit=block

这就是我在vimrc中的内容

答案 3 :(得分:0)

我认为没有选择不存在的文本,但是简单的解决方案是使用76a yy4p之类的东西来“种子”......所以绘制76个空格,然后复制该行额外的4次。