代码之家  ›  专栏  ›  技术社区  ›  Valentin V

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

  •  3
  • Valentin V  · 技术社区  · 14 年前

    但是当我尝试在一个新文件(或任何没有文本的文件)中创建这样的区域时,我不能。 有没有办法通过自动填充空格来“扩展”这个区域?还是我走错了方向?

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

    我可以使用 Ctrl+v组合键 运动关键点 ,那么 右#

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

    4 回复  |  直到 14 年前
        1
  •  5
  •   DrAl    14 年前

    除了布莱恩·拉斯穆森(Brian Rasmussen)的回答(非常好),我知道的唯一方法 你要的就是使用 virtualedit 模式。这不允许您在不存在的行上进行编辑,但允许您在现有行的末尾之外进行编辑。因此,要将当前行转换为#符号负载,可以执行以下操作:

    :set virtualedit=all
    v50lr#
    

    要制作50x5块,可以创建4个新的空行,然后执行相同的操作:

    :set virtualedit=all
    4o<ESC>
    <C-V>4k50lr#
    

    (其中 <C-V> + <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)bung以下内容

    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
    

    等。。。

        2
  •  4
  •   Brian Rasmussen    14 年前

    5 0 # 电子稳定控制系统 是的

    当然,你还是要做的,无论你做什么,都可以从你的帖子中得到评论。

        3
  •  1
  •   Random_Random_Random    8 年前

    公认的答案提到使用

    :set virtualedit=all
    

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

    :set virtualedit=block
    

        4
  •  0
  •   sleepynate    14 年前

    我不认为有任何选择文本不在那里,但简单的解决办法将是“种子”与类似的东西 76a yy4p ... 所以画76个空格,然后再复制4次。