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

时间:2011-07-04 10:58:40

标签: vim vi macvim

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

3 个答案:

答案 0 :(得分: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

然后使用visual-block-select,x

root:/root:/bin/bash
daeaemon:/usr/sbin:/bin/sh
bin/bin:/bin/sh
sys/dev:/bin/sh

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

答案 1 :(得分: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

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

nnoremap <silent> <leader>c :call CommentToggle('#')<CR>

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

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

vnoremap <silent> <leader>c :call CommentToggle('#')<CR>

允许您选择一个可视区域并按 \ c 来(取消)对它们进行全部评论。

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

希望这有帮助。

答案 2 :(得分:1)

Prince Goulash的回答与主要标签不一致。

我更改了它,将标签字符添加到模式中,尽管在评论和取消注释后行会丢失缩进。

function! CommentToggle( comchar )
        let firstchar = matchstr( getline( "." ), "[^ \t]" )
        if firstchar == a:comchar
                sil exe 'normal ^2x'
        else
                sil exe 'normal ^i' . a:comchar . ' '
        endif
endfunction

我更喜欢将评论字符添加到第一个位置,这对Prince Goulash函数的修改可以解决问题:

function! CommentToggle( comchar )
        let firstchar = matchstr( getline( "." ), "[^ \t]" )
        if firstchar == a:comchar
                sil exe 'normal ^2x'
        else
                sil exe 'normal gI' . a:comchar . ' '
        endif
endfunction