在Vim中,如何在选择中的每一行的开头插入字符?
例如,假设我的语言的注释系统不允许像/* */这样的块注释,我想通过在每一行的开头预先添加//来注释掉一个代码块。我该怎么做呢?
在Vim中,如何在选择中的每一行的开头插入字符?
例如,假设我的语言的注释系统不允许像/* */这样的块注释,我想通过在每一行的开头预先添加//来注释掉一个代码块。我该怎么做呢?
当前回答
投票最多的答案映射:
首先可视化地选择所需的行,然后执行<leader>zzz,其值为:
vnoremap <leader>zzz <C-V>^I-<Space><Esc>
<C-V>进入可视模式 ^到行首(或使用'0'到第一个非空白) I以块模式插入 -<空格>插入'- '(例如,根据需要编辑) <Esc>应用相同的插入到所有可视块行
或上次正常模式下的视觉选择:
nnoremap <leader>zzz gv<C-V>^I-<Space><Esc>
其他回答
对于代码块的注释,我喜欢NERD的Commenter插件。
选择一些文本:
Shift-V
...select the lines of text you want to comment....
备注:
,cc
取消:
,cu
或者只是切换一行或块的注释状态:
,c<space>
投票最多的答案映射:
首先可视化地选择所需的行,然后执行<leader>zzz,其值为:
vnoremap <leader>zzz <C-V>^I-<Space><Esc>
<C-V>进入可视模式 ^到行首(或使用'0'到第一个非空白) I以块模式插入 -<空格>插入'- '(例如,根据需要编辑) <Esc>应用相同的插入到所有可视块行
或上次正常模式下的视觉选择:
nnoremap <leader>zzz gv<C-V>^I-<Space><Esc>
我可以推荐EnhCommentify插件。
如。把这个放到你的vimrc中:
let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'
然后,您可以使用',c'注释/取消注释(选定的)行
将注释区域标记为可视块(<C-V)
然后执行c#<ESC>p
改为“#” 放回去
如果你经常这样做,在你的.vimrc中定义一个快捷方式(例如\q)
:vmap \q c#<ESC>p
还有另一种方式:
:'<,'>g/^/norm I//
/^/只是一个匹配每一行的虚拟模式。Norm允许您运行下面的普通模式命令。I//表示进入插入模式,同时将光标跳转到行首,然后插入下面的文本(两个斜杠)。
:g通常用于在多行上做一些复杂的事情,在那里你可能想在多个模式之间跳转,删除或添加行,移动光标,运行一堆宏,等等。你可以告诉它只对匹配模式的行进行操作。