Vim - 可视块:删除而不是插入

hen*_*ald 12 vi vim macvim

我经常使用可视块然后插入多行,例如注释掉很多代码.这非常适合在多行上的相同位置插入文本,但我无法弄清楚如何使用可视块模式删除此文本,Backspace,Del和d都不起作用.我正在使用MacVim.

sar*_*old 23

您正在寻找x:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
Run Code Online (Sandbox Code Playgroud)

然后视觉块选择,x:

root:/root:/bin/bash
daeaemon:/usr/sbin:/bin/sh
bin/bin:/bin/sh
sys/dev:/bin/sh
Run Code Online (Sandbox Code Playgroud)

我经常使用它,原因完全相同 - 评论和取消注释大块代码.

  • @beck:你也可以使用`gv`命令再次重新点亮同一个块. (7认同)

Pri*_*ash 6

这不是直接回答问题(sarnold已经这样做了),但我建议有更有效的方法(取消)注释代码块.我有一个CommentToggle函数,可以注释或取消注释当前行,具体取决于它是否以"comchar"开头.

function! CommentToggle(comchar)
    let firstchar = matchstr(getline("."),"[^ ]")
    if firstchar == a:comchar
        sil exe 'normal ^xx'
    else 
        sil exe 'normal ^i' . a:comchar . ' '
    endif
endfunction
Run Code Online (Sandbox Code Playgroud)

因此,对于perl文件,您可以映射:

nnoremap <silent> <leader>c :call CommentToggle('#')<CR>
Run Code Online (Sandbox Code Playgroud)

并按3 \ c(取消)从光标位置注释三行.

您还可以编写可视模式映射:

vnoremap <silent> <leader>c :call CommentToggle('#')<CR>
Run Code Online (Sandbox Code Playgroud)

允许您选择一个可视区域,然后按\c(取消)对它们进行全部评论.

此特定函数仅适用于单字符注释("#","%"等),但可以直接将其扩展为更长的字符串(例如"//"),甚至更复杂的替换,例如HTML评论.

希望这可以帮助.