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