Vim中如何仅撤销指定操作而不影响后续其他操作
Vim 特定操作标记与独立撤销解决方案
通用操作隔离与独立撤销方法
- 插入模式操作隔离
如果你是在插入模式下执行需要单独标记的操作,在开始操作前按下Ctrl+G u即可拆分撤销块,后续这部分插入操作会被归为独立的撤销单元,后续按u撤销时只会回退这部分内容,不会影响拆分前的其他操作。 - 批量命令操作隔离
如果你要执行的是普通模式命令、ex 命令(比如替换、格式化类批量操作),可以在操作前通过:wundo ~/vim_undo_tmp命令把当前的撤销树状态保存到临时文件,后续需要回退到该操作前的状态时,执行:rundo ~/vim_undo_tmp即可直接恢复,不需要回退中间的所有操作。 - 撤销树分支回溯
Vim 默认支持多分支撤销树,你可以通过:undolist命令查看所有历史撤销节点的编号和时间,通过:undo <节点编号>即可直接跳转到对应节点的状态,不需要按顺序回退中间操作。
textwidth 自动换行移除专属方案
针对你提到的移除 textwidth 自动插入的换行的需求,不需要依赖操作标记即可快速实现:
- 先执行
:set tw=0关闭自动换行规则 - 选中需要处理的段落,按下
gq即可自动合并之前由 textwidth 插入的换行,恢复成长文本状态;如果需要处理整个文件,直接执行gggqG即可。 - 如果你需要保留手动插入的分段空行,只合并自动换行产生的连续行,执行替换命令
:%s/\n\(\S\)/ \1/g即可实现。
内容的提问来源于stack exchange,提问作者theta0
相关产品推荐
相关产品推荐

