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

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


当前回答

将注释区域标记为可视块(<C-V)

然后执行c#<ESC>p

改为“#” 放回去

如果你经常这样做,在你的.vimrc中定义一个快捷方式(例如\q)

:vmap \q c#<ESC>p

其他回答

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

 some█
 code
 here

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

gg

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

I / /空间

 // █some
 code
 here

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

j。j。

 // some
 // code
 //█here

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

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

在每行开头插入“ABC”:

进入命令模式 %定额I ABC

还有另一种方式:

:'<,'>g/^/norm I//

/^/只是一个匹配每一行的虚拟模式。Norm允许您运行下面的普通模式命令。I//表示进入插入模式,同时将光标跳转到行首,然后插入下面的文本(两个斜杠)。

:g通常用于在多行上做一些复杂的事情,在那里你可能想在多个模式之间跳转,删除或添加行,移动光标,运行一堆宏,等等。你可以告诉它只对匹配模式的行进行操作。

搜索和替换的一般模式是:

:s/search/replace/

将当前行中第一次出现的'search'替换为'replace'

:s/search/replace/g

将当前行中所有出现的'search'替换为'replace', 'g'是'global'的缩写

此命令将只替换当前行中出现的'search'。%用于搜索整个文件。要交互式地确认每个替换,需要添加一个'c'来确认:

:%s/search/replace/c

交互式确认替换'搜索'与'替换'为整个文件

你可以使用一个行号范围来代替%字符(注意'^'字符是一个特殊的搜索字符,用于行开始):

:14,20s/^/#/

在第14-20行开始处插入'#'字符

如果你想使用另一个注释字符(比如//),那么改变你的命令分隔符:

:14,20s!^!//!

在第14-20行开始处插入'//'字符序列

或者你可以像这样转义//字符:

:14,20s/^/\/\//

在第14-20行开始处插入'//'字符序列

如果在编辑器中看不到行号,只需键入以下内容

:set nu