image.png **text object 文本对象 **

如果你学过主流的编程语言,一定知道面向对象编程 Vim里文本也有对象的概念,比如一个单词,一段句子,一个段落 很多其他编辑器经常只能操作单个字符来修改文本,比较低效 通过操作文本对象来修改要比只操作单个字符高效 例如 使用dw 删除一个单词 [number]<command>[text object] number 表示次数command 是命令,d(elete),c(hange),y(yank) text object 是要操作的文本对象,比如单词w,句子 s,段落p

image.png image.png

Vim复制粘贴与寄存器的使用

Vim Normal模式复制粘贴

初学者会感觉Vim 复制粘贴比较奇怪,先从normal模式学习 normal模式下复制粘贴分别使用 y (yank)和 p(put),剪贴 d和p 我们可以使用v(visual)命令选中所要复制的地方,然后使用p粘贴 配合文本对象:比如使用yiw 复制一个单词yy 复制一行 Vim里的剪贴(cut)复制(copy)粘贴(paste)分别是delete/yank/put

Insert 模式下的复制粘贴 很多人会使用鼠标进行选中,然后使用 ctrl+v 或者 cmd+v粘贴

这个和其他的文本编辑器差不多,但是粘贴代码有个坑 很多人在vimrc中设置了 autoindent,粘贴 Python 代码缩进错乱 这个时候需要使用:set paste 和 :set nopaste 解决

什么是vim的寄存器

你有没有好奇?Vim在normal 模式下复制/剪贴的内容去了哪? Vim里操作的是寄存器而不是系统剪贴板,这和其他编辑器不同 默认我们使用d删除或者y复制的内容都放到了“无名寄存器 用x删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符

**深入寄存器(register) Vim不使用单一剪贴板进行剪贴、复制与粘贴,而是多组寄存器 通过“{register)前缀可以指定寄存器,不指定默认用无名寄存器 比如使用“ayiw 复制一个单词到寄存器 a 中“bdd 删除当前行到寄存器b中 Vim中““表示无名寄存器,缺省使用 p其实就等同p 其他常见寄存器 出了有名寄存器a-z,Vim 中还有一些其他常见寄存器 复制专用寄存器“0使用y复制文本同时会被拷到复制寄存器0 系统剪贴板“+可以在复制前加上“+ 复制到系统剪贴板 其他一些寄存器比如“% 当前文件名.上次插入的文本

强大的vim宏(macro) image.png

什么是 Vim 宏(macro) 很多使用Vim很久的 Vimer 都没用过宏 宏可以看成是一系列命令的集合 我们可以使用宏[录制]一系列操作,然后用于[回放J 宏可以非常方便地把一系列命令用在多行文本上

使用宏 宏的使用分为录制和回放,是不是有种拍电影的感觉 Vim 使用q来录制,同时也是q 结束录制 使用q{register} 选择要保存的寄存器,把录制的命令保存其中 使用@{register)回放寄存器中保存的一系列命令

用宏解决刚才的问题 现在你知道宏怎么用了,如何解决刚才的问题呢? 先给一行加上双引号,然后再回放到其他所有行 我们先使用q开始录制,给一行加上双引号,之后使用q 退出 在剩下的所有行中回放录制的宏