如何在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是一个动作命令,沿着一条线向下。 重复您所做的最后编辑命令。
而另一种方式:
- 移到一行的开头
- 进入可视块模式( CTRL – v )
- 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
- 把它改为“#”
- 把它放回去
如果经常这样做,请在.vimrc中定义一个快捷方式(示例\q
)
:vmap \qc#<ESC>p