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

如何避免在Vim中丢失使用x键剪切的文本?

Vim剪切内容被覆盖的解决办法

默认解决方法(无需修改配置)

有几种原生操作可以解决你的问题:

  • 利用删除历史寄存器:Vim的寄存器1到9会保存最近9次删除/剪切的内容,每次新的删除会把旧内容向后挤。你第一次剪切Toast 时,内容存在寄存器1;删除#后,#进入寄存器1,原来的Toast 被移到寄存器2。此时直接输入"2p就能粘贴Toast 。
  • 指定寄存器剪切:选中Toast 后用"ax(a可以换成任意未占用的寄存器),把内容存到寄存器a里,之后不管删除什么,输入"ap就能粘贴Toast 。
  • 先复制再删除(优化操作):选中Toast 按y复制后,输入gv可以快速重新选中刚才的选区,接着按d删除,最后用"0p粘贴寄存器0的内容(寄存器0始终保存最后一次复制的内容,不受后续删除影响)。
  • 撤销后调整顺序:如果已经删了#,先按u撤销删除,然后先粘贴Toast ,再删除#。

优化配置方案

如果不想每次都手动指定寄存器,推荐两种更流畅的配置:

  1. 让默认粘贴使用寄存器0:寄存器0只保存最后一次复制的内容,不会被删除操作覆盖。在~/.vimrc中添加:
nnoremap p "0p
vnoremap p "0p
nnoremap P "0P
vnoremap P "0P

这样按p/P默认粘贴最后一次复制的内容,而删除的内容可以通过"1p等访问。
2. 分离删除与剪切的寄存器:让普通删除(比如删单个字符)不覆盖默认寄存器,只把剪切(比如整词整行剪切)的内容存入默认寄存器。配置如下:

" 单个字符删除放到黑洞寄存器,不影响默认寄存器
nnoremap x "_x
" 可视模式删除/剪切仍存入默认寄存器
vnoremap d "d
vnoremap x "x

这样你用x删单个#时,内容不会进入默认寄存器,之前剪切的Toast 还在""里,直接p就能粘贴。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 18:05:01