Vim的语法:删除、复制、粘贴,像说话一样自然

你是不是已经能熟练用hjkl在Vim里移动光标了,
但一到删除、复制、粘贴的时候,手还是忍不住去摸鼠标?

如果是,恭喜你------这篇文章就是为你写的。

问题不在你,在 " 习惯 "

鼠标操作的方式是:先选中,再操作。

你的大脑要经历:定位光标 → 伸手摸鼠标 → 瞄准起点 → 按住拖动 → 松手 → 手回键盘 → 按删除或复制。这一套下来,少说两三秒,思路早就断成渣了。

Vim的方式完全不同:先说什么动作,再说针对谁

这就好比你跟编辑器说:

"删掉这个词"
"复制这一行"
"把括号里的内容全部换掉"

不需要"选中"这个中间步骤。你说什么,它做什么。

核心语法:动词 + 名词

Vim只有三个最常用的动词,先记住它们就够了:

  • d = delete(删除)
  • y = yank(复制,Vim里叫"猛拉")
  • p = paste(粘贴)

名词就是你已经掌握的移动命令:w(到下一个词开头)、j(向下一行)、$(到行尾)等等。

把它们组合起来:动词**+** 名词

"删掉这个词" → d + w = dw
"复制这一行" → y + y = yy(两个y表示"这一行"这个特殊名词)
"删到行尾" → d + = d

你不需要额外学习什么,只是把你已经在用的移动命令,前面加一个动作而已。

最实用的几个组合,背下来就能用

删掉一个词 :dw
光标在词的任意位置,敲dw,这个词从光标位置开始被删掉。注意它会保留空格,删完后光标停在下一个词的开头。

删掉一整行 :dd
不管你光标在这行的哪个位置,敲dd,整行消失,下面的行往上顶。

复制一整行 :yy
和dd同理,复制整行到剪贴板(Vim的寄存器),不会删掉原内容。

删到行尾 :d$
光标之后的所有字符,从当前位置一直到行尾,一次性清空。行首位置用这个,效果等于删掉整行内容但保留空行。

复制光标下的整个单词 :yiw
这个看起来有点怪,拆开就懂了:y(复制)+ i(inner/内部的)+ w(word)。"复制这个单词的内部"------不管光标在单词的第一个字母、中间还是最后一个字母,结果都是复制整个单词。不需要精确定位到词首,省了大事。

替换光标下的整个单词 :ciw
c是"修改"(删除并自动进入插入模式),加上iw就是"删掉整个单词,然后直接开始打新的内容"。比dw再按i省一步,是高频操作里的王者。

加上数字,威力翻倍

Vim支持"数量词",就像自然语言里的"三个"、"五下"。

删掉三行 :3dd
从当前行开始,向下数三行,一起删掉。不用一行一行删,也不用算行号。

删掉三个词 :d3w
删掉当前光标位置开始的三个词。注意3w本身是"向右移动三个词",前面加d就是"一边移动一边删"。

往下复制三行 :y3j
3j是"向下移动三行",前面加y就是"把经过的这些行全部复制"。结果是复制了包括当前行在内的四行(当前行 + 下面三行)。

读起来就是:
"删三个词" → d 3 w
"往下复制三行" → y 3 j

数字放在动词后面、名词前面。这个顺序刚好和英语一致:delete 3 words。

进阶语法:文本对象 ------Vim 最被低估的设计

上面的iw你已经见过了。它就是"文本对象"的一种。

文本对象不是"光标往哪走",而是"这一段文本是什么类型"。你不需要告诉Vim从哪里开始到哪里结束,只需要说"对这个类型的东西动手"。

常见的文本对象:

  • iw = inner word(一个完整的单词)
  • ip = inner paragraph(一个段落,以空行分隔)
  • i" = inner double quote(双引号里面的所有内容,不包括引号本身)
  • i' = inner single quote(单引号里面的内容)
  • i( 或 ib = inner parentheses(小括号里面的内容)
  • i{ 或 iB = inner braces(花括号里面的内容)
  • it = inner tag(HTML/XML标签内的内容)

用法极其简单:动词**+ i +** 文本对象

di" :光标在某个双引号字符串的任意位置,敲di",引号里面的内容全部删除,引号本身留下。用来清空字符串参数、JSON值,一把好手。

yi( :复制括号里的所有内容。函数调用的参数想复制一份改一改?光标放括号里任意位置,yi(,然后找个地方p粘贴,完美。

cip :删除当前整个段落,然后进入插入模式让你重写。重构一段文字时,不用一行一行删,一次搞定。

ci" :修改引号里的内容。最常见场景:改一个字符串的值,先删掉旧的,光标停在引号之间等你写新的。省了di"再i两步。

文本对象的好处是:你完全不需要关心光标在这个对象的具体哪个位置。只要在里面,结果都一样。

实战一:修改一个 HTML 标签内的所有内容

场景:光标在<div>...</div>里面的某个位置,可能是第一行、中间、最后一行。

你想把div里的所有内容全部换掉。

不用鼠标选中,不用反复按l或w一点点挪,甚至不用关心这个div有多少行。

只需要:

text

cit

拆解:

  • c = 修改(删除内容并自动进入插入模式)
  • i = inner(内部的)
  • t = tag(HTML标签)

Vim会自动识别光标当前所在的HTML标签,找到它的开标签和闭标签,删除中间的全部内容,然后把光标放在开标签后面,让你直接开始写新的内容。

这就是"像说话一样"的真实体验------你说"改标签里的内容",它就照做。不管div里有几十行代码、嵌套了多少其他标签,一次搞定。

实战二:删除函数的所有参数

场景:你有一个函数调用 calculateTotal(price, quantity, taxRate, discount),光标在括号里任意位置。

你想删掉所有参数,重新写。

用鼠标?你需要选中price, quantity, taxRate, discount这一整段,中间可能因为逗号和空格点不中。

用Vim:

text

di(

d + i + ( = 删除括号内的所有内容。括号本身保留,光标停在括号之间。然后你可以直接开始写新参数。

实战三:复制整个段落并在下方粘贴一份

场景:你写了一段文字,想复制一份放在下面修改。

用鼠标?选中一个段落经常拖过头或者没选全。

用Vim:光标放在这个段落的任意位置。

text

yip

复制整个段落(不会删除原内容)。然后:

text

p

粘贴到光标下方。如果你用的是p(小写),粘贴到当前行的下一行;P(大写)粘贴到当前行的上一行。

一个小建议:从这 5 个动作开始练

不用一下子记住所有组合。先练这5个,覆盖日常80%的操作:

dd -- 删一行。最常用的删除操作,没有之一。

yy -- 复制一行。配合p使用,行级复制粘贴的基础。

p -- 粘贴。小写贴在后面,大写贴在前面。

dw -- 删一个词。比按着x一个个删快十倍。

ciw -- 替换一个词。比dw再i少按一个键,养成习惯后改变量名、改文案都靠它。

练到手指不经过大脑就能按出来,再往后加这几个:

d$ -- 删到行尾。写了一半想删掉后面内容时用。

yiw -- 复制光标下的单词。复制配置项、变量名时高频使用。

cit -- 改HTML标签内容。前端开发必备。

3dd -- 批量删多行。处理日志、数据时非常爽。

di" -- 清空引号内的内容。改配置、改字符串时天天用。

总结一句话

Vim不是编辑器,是一门编辑语言

语法是:动词 + 名词,前面可以加数字。

名词可以是移动命令(w、j、$),也可以是文本对象(iw、ip、it、i")。

你想做什么,就说什么。

当你不再"选中 → 操作",
而是直接"删掉这个词 / 复制这整段 / 改掉引号里的内容 / 清空标签内部"时------
你会第一次感觉到,手速跟上了脑子

那时候再看鼠标,就像看算盘。

一件趁手的工具,不是让你更努力,而是让你更少打断、更多沉浸。

Vim的语法,就是那把趁手的工具。

相关推荐
刘延林.2 小时前
Visual Studio Code+PlatformIO + ESP32-S3 + Arduino 框架点亮一个小的led灯-测试
ide·vscode·编辑器
Pentane.3 小时前
【数据分析 | 农业项目】蔬菜类商品的自动定价与补货决策 | Tableau & Excel
数据挖掘·数据分析·excel·tableau
happy_baymax6 小时前
Simulink 端口自动生成工具 (v2.1)(EXCEL+m语言)
服务器·matlab·excel·simulink
SunnyDays10116 小时前
如何使用 C# 高效实现 Excel 与 CSV 的互相转换
c#·excel·csv
热爱生活的五柒7 小时前
excel的使用教程
excel
包子源7 小时前
从零到一:一套免费在线简历编辑器的前后端设计与实现思路
编辑器
城数派7 小时前
2025年我国省市县三级的平均坡度数据(Excel\Shp格式)
arcgis·信息可视化·数据分析·excel
Webgiserin1 天前
nvm+vscode配置安装暂记
ide·vscode·编辑器
大佬,救命!!!1 天前
etp中未运行用例顺序的定位及补齐脚本自动化生成
python·学习笔记·excel·自动化脚本·用例整理清洗