【问题标题】:How to replace a sentence如何替换一个句子
【发布时间】:2026-01-17 21:55:02
【问题描述】:

如何替换文字

输入: 这个玻璃杯含有 1.5 升牛奶。但我不喜欢牛奶

输出: Replace_text 但我不喜欢牛奶

我需要将文本从开头替换到下一个完整点。但我不知道那句话是什么。

【问题讨论】:

  • 你想用第二句替换整行吗?
  • 不,只是举个例子。
  • 那么规则是什么?米什给出了答案,你用其他例子评论
  • 你必须用:s命令来做吗?或其他 vim 编辑器命令也可以接受?例如普通模式命令?
  • 如果我附带其他文字“这个玻璃杯含有 1.5 升牛奶。但我不喜欢牛奶。这是一个例子”。如果它在一行中,那么它将占用最后一个点。 (我认为,需要使用非贪婪)

标签: regex vim regex-greedy


【解决方案1】:

vim 对 sentence 有自己的定义。这个你可以阅读:h sentence

对于您的示例,我会这样做(假设您的光标位于 BOL):

c)WAHTEVER

c) 将删除第一句并进入 INSERT 模式。

批量替换,可以录制宏或者使用normal命令。

【讨论】:

    【解决方案2】:

    这个替换命令怎么样?

    :%s/\(.\{1,}\)\.\(\w*\)/Replace_text\2/g
    

    或使用字符类(您可能需要添加特殊字符等):

    ([\w\s]+\.\S[\w\s]+)\.(.*)
    

    http://regexr.com/3cc0r

    【讨论】:

    • 更多。如果文字是“这个杯子里有 1.5 升牛奶。但我不喜欢牛奶。请检查。”然后它失败了。
    【解决方案3】:

    您可以执行以下操作

    ^cf.

    它会跳转到第一个非空白字符,删除包括. 在内的文本并将您置于插入模式,以便您可以输入Repace_text

    如果要更改直到.,请将 f 更改为 t

    您还可以使用文本对象。 cis 会让你改句。

    【讨论】: