Vim技能修炼教程(5) - 操作符实务
操作符实务
操作符复习
上次我们讲了操作符与文本对象的组合这样一个vim的强大功能。但是上节的知识点过于密集,可读性可能差了一点。不过没关系,重要的知识点在后面用到的时候我们可以先复习一下。
我们还是先复习操作符。上节说过了,vi的方式是{操作符}{次数}{移动命令},代表例子就是d2w,删除两个单词。
vim将其扩展成了文本对象,有aw, iw, as, is, ap, ip, a], a[, i[, i]等一系列。
我们举几个小例子说明文本对象的用法:
比如有这样一段代码:
void main(int argc,char* agrv[])
光标在括号内,我们输入”yi(“,得到的是”int argc,char* agrv[]”, 如果是”ya(“,复制的将是”(int argc,char* agrv[])”
“i(“与”a(“的区别是,”a(“会包含括号本身,而”i(“不含括号内容。
再举个例子,我们用下搜索来定位:
return 0;
我们要复制不带分号的”return 0”,可以这么写『^yt;』
定制操作符
既然操作符这么有用,我们可以尝试来定制它。这个定制功能,叫做Operator-pending mapping.
首先我们可以定制文本对象,也就是移动的命令。
我们看一个简单的例子,比如用p来代表刚才我们用的”i(“,因为”i(“是两个字符,而且括号还是个组合键。
:onoremap p i(
使用onoremap而不是omap的原因,是为了防止map产生递归定义。
我们看一下官方文档中的例子:
onoremap <silent> F :<C-U>normal! 0f(hviw<CR>
F是按键。我们可以将其换成 F或者直接是”ah(“之类的。
我们照抄就好,是为了防止Vim自动给我们自动添加些私货。
normal!后面我们还会学习,它是用于执行正常模式下的命令。
前面的都是例行公事,后面才是真正需要我们开发的命令组合:0f(hviw
0是移动到行首,还记得吧,如果要是移到行首非空字符是^。
“f(“是向后搜索到第一个左括号,h是左移一个字符,viw是在visual模式下选中一个单词,会退出visual模式
综上,上面的命令就是选中一个左括号左边的一个完整单词。
但是,还有一个问题,normal!命令没法处理转义字符和特殊字符。如果遇到这种情况,我们需要用execute命令再把normal包装一下。
最简单的情况就是对于的处理。在搜索中,是经常需要的输入。但是,在normal命令中是不会处理为回车的,而是当成四个字符。
我们只好再加点料,把特殊字符字符串先传给execute命令:
onoremap <silent> F :<C-U>execute "normal! 0f(hviw<CR>"
execute命令是会处理特殊字符和转义的,当它执行 normal!的时候,后面的已经正确转义了。normal!就可以正确运行了。
最新文章
- BUAA_OVERWATCH第一次行动前战略部署
- ZeroMQ接口函数之 :zmq_msg_init - 初始化一个空的ZMQ消息结构
- [转]javascript eval函数解析json数据时为什加上圆括号eval(";(";+data+";)";)
- python学习八皇后问题
- 寻找下一款Prisma APP:深度学习在图像处理中的应用探讨(阅读小结)
- css做三角形
- mysql修改definer方法
- oracle 自定义函数
- [Everyday Mathematics]20150115
- G-sensor驱动分析
- Scala-循环
- mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别
- swoole使用 常用案例
- OracleSql语句学习(一)
- spark-MLlib之协同过滤ALS
- 排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题
- windows后门
- 推荐7个GitHub上不错的Python机器学习项目
- kong API gateway
- Python 名称空间和作用域
热门文章
- 20145331 《Java程序设计》第7周学习总结
- Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法
- 使用vs的时候,遇到这个:当前不会命中断点 还没有为该文档加载任何符号
- Permission denied: mod_fcgid
- 连续取模-function
- IIS服务器管理学习
- Generator 函数的异步应用
- [洛谷P3811]【模板】乘法逆元
- 1030: [JSOI2007]文本生成器 ac自动机+dp
- Codeforces Round #428 (Div. 2)E. Mother of Dragons