除了 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
ETC...