如何在vi / Vim中的多行选择开头插入文本?

时间:2008-10-31 12:55:19

标签: vim editing viemu

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

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

14 个答案:

答案 0 :(得分:650)

  • Esc 进入“命令模式”
  • 使用 Ctrl + V 进入视觉区块模式
  • 移动向上 / 向下选择您想要的行中的文本列 评价。
  • 然后点击 Shift + i 并输入要插入的文字。
  • 然后按 Esc ,等待1秒钟,插入的文字将出现在每一行。

如需了解更多信息和阅读,请查看this related article on the vim wiki

答案 1 :(得分:168)

这将每一行的开头替换为“//”:

:%s!^!//!

这将用“//”替换每个选定行的开头(使用可视模式选择):

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

注意 gv(在正常模式下)恢复最后一个视觉选择,这会不时派上用场。

答案 2 :(得分:74)

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

:s/search/replace/

用当前行的“替换”替换第一次出现的'search'

:s/search/replace/g

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

此命令将仅针对当前行替换每次出现的'search'和'replace'。 %用于搜索整个文件。要以交互方式确认每个替换,请附加“c”以进行确认:

:%s/search/replace/c

交互式确认将“搜索”替换为整个文件的“替换”

您可以使用行号范围代替%字符(请注意,'^'字符是行首的特殊搜索字符)

:14,20s/^/#/

在第14-20行的

开头插入一个'#'字符

如果要使用其他注释字符(如//),请更改命令分隔符:

:14,20s!^!//!

在第14-20行的

开头插入一个'//'字符序列

或者你可以随时逃脱//字符:

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

在第14-20行的

开头插入一个'//'字符序列

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

即可
:set nu

答案 3 :(得分:33)

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

 some█
 code
 here

将光标放在第一行,例如由

1 输入

并键入以下内容以进入插入模式并添加文本:

I / / Space

 // █some
 code
 here

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

j j

 // some
 // code
 //█here

j 是一个向下移动一行的动作命令,重复上一次编辑命令。

答案 4 :(得分:23)

还有另一种方式:

  • 移至行的开头
  • 进入视觉阻止模式( CTRL - v
  • 选择你想要的线条(用 j / k 向上/向下移动,或者跳到[line] G 的一条线)
  • I (即首都i)
  • 输入评论字符
  • ESC

答案 5 :(得分:17)

这会在每行的开头添加#

:%s/^/#/

人们会停止抱怨你没有正确评论剧本。

答案 6 :(得分:14)

如果你想对它非常了解,请把它放在你的.vimrc中:

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

然后,无论何时处于视觉模式,您都可以点击\c c 省略该块,并\u u 注释它。当然,您可以将这些快捷键击更改为任何内容。

答案 7 :(得分:9)

另一种方式:

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

/^/只是一个匹配每一行的虚拟模式。 norm允许您运行后面的正常模式命令。 I//表示在将光标跳到行的开头时进入插入模式,然后插入以下文本(两个斜杠)。

:g通常可以方便地在多行上执行复杂操作,您可能希望在多种模式之间跳转,删除或添加行,移动光标,运行一堆宏等等。您可以告诉它只能在匹配模式的行上运行。

答案 8 :(得分:3)

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

选择一些文字:

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

注释:

,cc

取消注释:

,cu

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

,c<space>

答案 9 :(得分:2)

我可以推荐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'

对(选定的)行进行注释/取消注释

答案 10 :(得分:1)

将要评论的区域标记为可视区块(<C-V

并执行c#<ESC>p

  1. c将其改为&#34;#&#34;
  2. 把它放回去
  3. 如果您经常这样做,请在.vimrc中定义一个快捷方式(例如\q

    :vmap \q c#<ESC>p
    

答案 11 :(得分:0)

要在每行的开头插入“ ABC”:

1)进入命令模式

2):%规范I ABC

答案 12 :(得分:0)

如果某人的多行选择实际上是一个段落,则无需手动选择行。 vim可以为您做到这一点:

  1. vip:选择并标记整个段落
  2. shift-i:在行首插入文本
  3. escape:保留插入模式/进入普通模式[仍选择行首]
  4. escape:取消选择行的开头

答案 13 :(得分:0)

投票最多的答案的映射:

第一个视觉选择所需的行,然后执行<leader>zzz,其值:

vnoremap <leader>zzz <C-V>^I-<Space><Esc>
  • <C-V> 进入可视模式
  • ^ 转到行首(或使用“0”到第一个非空白处)
  • I 以块模式插入
  • -<Space> 插入“-”(例如,根据需要进行编辑)
  • <Esc> 对所有可视块行应用相同的插入

或从正常模式选择的最后一个视觉选项:

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