【问题标题】:Vi substitution commandvi 替换命令
【发布时间】:2009-02-23 20:04:28
【问题描述】:

使用 vi,如何将当前行号替换为当前行?例如,如果光标在第 10 行,我想将数字 10 放在该行的某处。

【问题讨论】:

    标签: editor command vi substitution


    【解决方案1】:

    您想实际插入行号,而不仅仅是在页边空白处显示?如果是这样-

    :s/$/\=line(".")/
    

    这会将它附加到行尾。将 $ 替换为 ^ 以添加到该行的前面。

    【讨论】:

      【解决方案2】:

      首先:以下假设您使用的是 vim,而不是 vi 或类似的工作或 Heirloom 项目 vi。

      这里有几个选项:

      首先,如果您要使用:s,请将光标放在您选择的行上,然后:

      :s/texttoreplace/<C-R>=line(".")<CR>/
      

      &lt;C-R&gt;= 表示实际点击 Ctrl-R 然后输入等号。提示 会改变,你可以输入:

      line(".")
      

      然后按回车键,如&lt;CR&gt; 所示。此时您将回到您的:s 插入行号的命令。您可以在插入模式下执行相同的技巧 以及 (&lt;C-R&gt;=line(".")&lt;CR&gt;)。

      其次,可以使用\=在正则表达式中插入行号 同样的方法,但这在插入模式或其他地方不起作用。

      最后,如果您希望 Ctrl-A 在插入和命令行模式下插入当前行号,这些很有用:

      :imap <silent> <C-A> <C-R>=line(".")<CR>
      :cmap <C-A> <C-R>=line(".")<CR>
      

      不要将静默属性添加到cmap 行:它会禁止将该行输出到您正在输入的命令中,直到您退格为止。

      【讨论】:

        【解决方案3】:

        我试过了

        :s/texttoreplace/<C-R>=line(".")<CR>/
        

        但这将文本替换为我在每一行上发出命令 (1) 时所在的行号,而不是为每一行使用不同的数字。

        以下内容对我有用。

        g/^/exec "s/texttoreplace/(".line(".")."/"
        

        g/^/exec 在与正则表达式 /^/ 匹配的每一行(即每一行)上执行给定的命令。表达式line(".") 然后在正在处理的行的范围内进行评估,而不是在键入命令时在范围内的行。

        【讨论】:

          猜你喜欢
          • 2016-12-12
          • 2013-02-05
          • 2018-08-04
          • 2023-03-30
          • 2019-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多