Vim-可视块:删除而不是插入
例如,在注释大量代码时,我经常使用可视块插入多行。这非常适合在多行的同一位置插入文本,但我不知道以后如何使用可视块模式删除此文本,Backspace、Del和d都不起作用。我正在使用MacVim。您正在寻找x: 然后选择视觉块,x:Vim-可视块:删除而不是插入,vim,vi,macvim,Vim,Vi,Macvim,例如,在注释大量代码时,我经常使用可视块插入多行。这非常适合在多行的同一位置插入文本,但我不知道以后如何使用可视块模式删除此文本,Backspace、Del和d都不起作用。我正在使用MacVim。您正在寻找x: 然后选择视觉块,x: 我经常使用它,原因完全相同-注释和取消注释大块代码。这并不是直接回答sarnold已经这样做的问题,但我建议有更有效的方法取消注释代码块。我有一个CommentToggle函数,可以注释或取消注释当前行,这取决于它是否以comchar开头 function! Com
我经常使用它,原因完全相同-注释和取消注释大块代码。这并不是直接回答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注释
希望这能有所帮助。古拉什王子的答案与前面的标签不符 我更改了它,在模式中添加了制表符,尽管行在注释和取消注释后会丢失缩进
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
谢谢,那太好了,有没有办法让它保持在视觉块模式并执行多个x?贝克:据我所知,你不能保持在视觉模式。但是,可以在x前面加一个数字;e、 g.3x删除了三个字符,这可能就是你想要的。@beck:你也可以使用gv命令再次高亮显示同一块。谢谢,@herbert我记得遇到过,但完全忘记了,谢谢。谢谢@herbert,你让我开心了。请小心用更多的答案回答问题-一旦有人注意到,它们通常在几分钟内就消失了:-但这是一个很好的答案,因为它不是针对古拉什王子,而是针对解决贝克的问题我同意更好的方法,但是,还有更好的方法:专门用于注释切换的插件->增强注释,NERDCommenter,t注释我不确定最后一种方法;十年来我一直在使用第一个命令,虽然公认的答案是正确的,但我只想指出一个重要的命令,您可以将其与之结合使用,以使其更易于使用。点命令!进入块视觉模式,选择多行,点击x,现在按。需要多少次就多少次。
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
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