百科

shell在vi中怎么大范围删除

时间:2010-12-5 17:23:32  作者:热点   来源:百科  查看:  评论:0
内容摘要: 删错行是vi新手最痛的记忆。光标停在某行,按dd删一行,再按5dd删五行,可当你面对一个三百行的函数体,手指按到发酸还漏掉中间几行时,就该换个思路了。 真正的大范围删除核心就一句话:先划定区域,再交

删错行是大范vi新手最痛的记忆。光标停在某行,围删按dd删一行,大范再按5dd删五行,围删可当你面对一个三百行的大范函数体,手指按到发酸还漏掉中间几行时,围删就该换个思路了。大范

真正的围删大范围删除核心就一句话:先划定区域,再交给命令处理。大范别跟行号较劲,围删也别指望肉眼数行。大范vi的围删设计哲学是“用眼睛选,用命令删”。大范

最粗暴也最实用的围删办法是可视模式。把光标移到要删内容的大范开头,按V(大写,逐行选中)或Ctrl+v(块状选中),然后直接按G跳到文件末尾,或者输入行号加G跳到指定行。整个区域高亮后,按d键,瞬间清空。我见过有人删两万行的日志文件,就靠这一招,三秒搞定。

另一种思路是直接用地址范围。如果你知道要删第50行到第120行,命令模式输:50,120d,回车,干净利落。这方法适合“精确打击”,比如你只想保留第1到49行,后面全不要,那就:50,$d——美元符号代表文件末尾。别怕记不住,用一次就刻进肌肉记忆了。

但真正的高手会告诉你,行号是脆弱的。你刚插入几行,原本的第80行就变成了第85行。这时候就该用模式匹配。比如删除所有包含DEBUG的行,敲:g/DEBUG/d。这个g是全局命令,它会遍历文件,找到每个匹配“DEBUG”的行并删掉。要是你想删从某个函数开始到另一个函数结束的整段,可以这样::/^def old_func/,/^def new_func/d——从“def old_func”开头那行,删到“def new_func”开头那行的前一行。这招在重构Python代码时特别顶用。

还有个容易踩的坑:d命令会把删除内容存进寄存器,如果你删完马上按p,内容会重新冒出来。想彻底不保留,用"_d(黑洞寄存器),或者干脆删完立刻保存退出,别乱按。

说个我自己的糗事。有次改配置文件,本想删第10到第20行,手一抖输成:10,200d,回车后整个文件只剩前9行和最后几行孤零零的代码。当时没开撤销,差点重写。后来学乖了,大范围删除前先按u撤销测试一遍,或者用:10,20d之后立刻:w,再想反悔就晚了——所以重要文件先备份,或者开个set undofile持久化撤销记录。

最后说个偏方,适合删超大文件里的某段。你可以在普通模式按ma标记当前位置,然后滚动到要删的终点按mb,再输:'a,'bd。这比行号靠谱,因为标记不会因为插入删除而漂移。我处理几十万行的数据导出文件时,全靠标记+范围删除,从没翻过车。

工具这东西,用熟了就是肌肉记忆。vi的删除命令看着多,核心逻辑就两条:要么用眼睛框选,要么用条件定位。框选靠可视模式,定位靠行号或模式。剩下的,就是多练几次肌肉记忆。下次再遇到大段要删的内容,别急着按dd了,先想想该框选还是该定位。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap