You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Vim命令在指定文本首尾添加删除线并避免插入模式问题?

这个问题我太熟悉啦!你遇到的是Vim里:normal命令执行插入操作后没法自动退出插入模式的坑,给你几个更顺畅的解决方案:

1. 改进你的:normal命令,一步到位

原来的命令因为用i进入插入模式后没退出,导致后续命令都变成了输入内容。你可以把两个步骤合并成一条:normal命令,并且加入退出插入模式的操作——在命令行里输入<Esc>的话,需要按Ctrl+V再按Esc,会显示成^[:

:normal 02wi~~^[A~~

拆解一下逻辑:

  • 0:跳到行首
  • 2w:跳到列表项文本的第一个字符(跳过- 和空格)
  • i~~:在文本开头插入~~
  • ^[:退出插入模式(就是Esc的命令行表示)
  • A~~:跳到行尾插入~~

2. 用替换命令更高效(推荐)

如果只是给当前行的列表项加删除线,或者要批量处理,直接用正则替换命令更省心:

:s/^\s*-\s*\(.*\)/- ~~\1~~/

这个命令会自动匹配行首的- (包括前面可能有的空格),把后面的文本用~~包裹起来。要是想处理所有行,就加个%前缀::%s/^\s*-\s*\(.*\)/- ~~\1~~/g

3. 可视化操作的命令版

如果你习惯用可视化选中的思路,也可以用这条命令模拟手动选中文本再包裹:

:normal 0f lv$h"ayA~~^[0f lP

不过这个相对复杂,不如前面两个方法直接,适合好奇原理的同学~

内容的提问来源于stack exchange,提问作者Mastermind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:23:54