在Vim中,如何在选择中的每一行的开头插入字符?

例如,假设我的语言的注释系统不允许像/* */这样的块注释,我想通过在每一行的开头预先添加//来注释掉一个代码块。我该怎么做呢?


当前回答

对于代码块的注释,我喜欢NERD的Commenter插件。

选择一些文本:

Shift-V
...select the lines of text you want to comment....

备注:

,cc

取消:

,cu

或者只是切换一行或块的注释状态:

,c<space>

其他回答

它将每一行的开头替换为"//":

:%s!^!//!

它将每一行的开头(使用可视模式选择)替换为"//":

:'<,'>s!^!//!

注意,gv(在正常模式下)恢复最后的可视选择,这有时很方便。

我可以推荐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'注释/取消注释(选定的)行

投票最多的答案映射:

首先可视化地选择所需的行,然后执行<leader>zzz,其值为:

vnoremap <leader>zzz <C-V>^I-<Space><Esc>

<C-V>进入可视模式 ^到行首(或使用'0'到第一个非空白) I以块模式插入 -<空格>插入'- '(例如,根据需要编辑) <Esc>应用相同的插入到所有可视块行

或上次正常模式下的视觉选择:

nnoremap <leader>zzz gv<C-V>^I-<Space><Esc>

按Esc进入“命令模式” 使用Ctrl+V进入可视块模式 向上/向下移动以选择所需行的文本列 发表评论。 然后按Shift+i,输入你想要插入的文本。 然后按Esc键,等待1秒,插入的文本将出现在每行。

欲了解更多信息和阅读,请查看Vim Tips Wiki中的“多行插入文本”。

另一种方法对新人来说可能更容易:

 some█
 code
 here

把光标放在第一行上,例如by

gg

然后输入以下命令进入插入模式并添加文本:

I / /空间

 // █some
 code
 here

按Esc返回命令模式并使用有向图:

j。j。

 // some
 // code
 //█here

J是一个运动命令,向下走一行。重复您所执行的最后一个编辑命令。