如何在vi / Vim的多行select开始处插入文本?

在Vim中 ,我将如何去select在每行的开头插入字符?

例如,假设我想通过在每行的开头加上“//”来注释掉一段代码(假设我的语言评论系统不允许像/ * * /那样的块注释)。 我将如何做到这一点?

  • Esc进入“命令模式”
  • 使用Ctrl + V进入可视块模式
  • 向上 / 向下移动以select您要评论的行中的文本列。
  • 然后按下Shift + i键入要插入的文本。
  • 然后按Esc ,等待1秒钟,插入的文本将出现在每一行。

这将用“//”replace每一行的开头:

 :%s!^!//! 

这将用“//”replace每个选定行的开头(使用可视模式来select):

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

请注意gv (在正常模式下)会恢复最后的视觉select,这个时候会派上用场。

search和replace的一般模式是:

 :s/search/replace/ 

将当前行的“replace”replace为“search”的第一个匹配项

 :s/search/replace/g 

用当前行的“replace”replace所有出现的“search”,“g”是“全局”

此命令将仅replace当前行的每个“search”与“replace”。 %用于search整个文件。 要确认每个replace交互式附加一个'c'确认:

 :%s/search/replace/c 

交互式确认,用整个文件的“replace”replace“search”

可以使用行号范围来代替%字符(注意'^'字符是行首的特殊search字符)

 :14,20s/^/#/ 

在第14-20行的开头插入一个“#”字符

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

 :14,20s!^!//! 

在14-20行的开头插入一个“//”字符序列

或者你总是可以逃避//字符:

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

在14-20行的开头插入一个“//”字符序列

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

 :set nu 

新手可能更容易的另一种方式:

  some█ code here 

将光标放在第一行,例如

1 input

并input以下内容进入插入模式并添加您的文本:

/ / 空间

  // █some code here 

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

j j

  // some // code //█here 

j是一个动作命令,沿着一条线向下 重复您所做的最后编辑命令。

而另一种方式:

  • 移到一行的开头
  • 进入可视块模式( CTRLv
  • select你想要的行(用j / k向上/向下移动,或者用[ G ]行跳到一行)
  • (这是资本我)
  • 键入注释字符(s)
  • ESC

这在每行的开头添加#

 :%s/^/#/ 

人们会停止抱怨你缺乏正确的评论脚本。

如果你想获得超级喜欢,把它放在你的.vimrc中:

 vmap \c :s!^!//!<CR> vmap \u :s!^//!!<CR> 

然后,无论何时在视觉模式下,您都可以点击\c来拼出拼图,并\u u注释拼图。 当然,你可以把这些快捷键改成任何东西。

另一种方式:

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

/^/只是一个虚拟模式来匹配每一行。 norm让你运行后面的正常模式命令。 I//说,进入插入模式,同时将光标跳到行的开始,然后插入以下文本(两个斜线)。

:g在多行上执行复杂的操作通常比较方便,在多个模式之间跳转,删除或添加行,移动光标,运行一堆macros等等。符合模式的线条。

为了评论代码块,我喜欢NERD Commenter插件。

select一些文字:

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

评论:

 ,cc 

取消注释:

 ,cu 

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

 ,c<space> 

我可以推荐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'来注释/取消注释(select)行,

将区域标记为可视块( <CV

并做c#<ESC>p

  1. 把它改为“#”
  2. 把它放回去

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

 :vmap \qc#<ESC>p