如果此区域包含文本或空格(或任何内容),我可以轻松选择文件中的矩形区域。我用可视块模式和动作键来做。 但是当我尝试在新文件(或任何没有文本的文件)中创建这样的区域时,我不能。 有没有办法通过自动填充空格来“扩展”这个区域?或者我走向错误的方向?
我想要这个的原因:
我使用vim创建一个新文件,然后想创建一个与此类似的注释块:
##############################################
# #
# My comment goes here #
# #
##############################################
我可以使用 Ctrl + v + 动作键对现有文本执行此操作,然后使用 r#创建一个填充磅的区域。然后类似地用空格切出内部矩形。
如何在新文件上使用此技术?
感谢。
答案 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次。