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

标签 vim viemu

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

我想要这个的原因:

我用 vim 创建了一个新文件,然后想创建一个类似于这样的注释块:

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

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

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

谢谢。

最佳答案

除了 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 是您的 friend )。

作为一个稍微更严重的替代方案如何:在您的 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

等等...

关于vim - 如何在空文件(vim)中以可视 block 模式(Ctrl + v)选择矩形区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667283/

相关文章:

vim - 是否可以删除除所选文本之外的所有内容?

windows - 如何将 gVim 设置为 Git for Windows 上的编辑器?

php - 在 Vim 中阅读 PHP 手册页

vim - 在新的缩进级别 vim 之后的换行符之后缩进

c - read() 和 write() 将多余的输出发送到 Vim

visual-studio-2008 - Visual Studio 2008 中的触摸输入

c# - 删除整个方法的命令?

visual-studio - 你将如何在 VIM 中使用它进行剪切和粘贴?