操作符实务

操作符复习

上次我们讲了操作符与文本对象的组合这样一个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!就可以正确运行了。

最新文章

  1. BUAA_OVERWATCH第一次行动前战略部署
  2. ZeroMQ接口函数之 :zmq_msg_init - 初始化一个空的ZMQ消息结构
  3. [转]javascript eval函数解析json数据时为什加上圆括号eval(&quot;(&quot;+data+&quot;)&quot;)
  4. python学习八皇后问题
  5. 寻找下一款Prisma APP:深度学习在图像处理中的应用探讨(阅读小结)
  6. css做三角形
  7. mysql修改definer方法
  8. oracle 自定义函数
  9. [Everyday Mathematics]20150115
  10. G-sensor驱动分析
  11. Scala-循环
  12. mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别
  13. swoole使用 常用案例
  14. OracleSql语句学习(一)
  15. spark-MLlib之协同过滤ALS
  16. 排查 Maxwell can not find database 并且使用 MySQL binlog 解决相关问题
  17. windows后门
  18. 推荐7个GitHub上不错的Python机器学习项目
  19. kong API gateway
  20. Python 名称空间和作用域

热门文章

  1. 20145331 《Java程序设计》第7周学习总结
  2. Oracle SQL Developer 编辑区不能删除,后退,空格,复制粘贴等功能都失效的解决办法
  3. 使用vs的时候,遇到这个:当前不会命中断点 还没有为该文档加载任何符号
  4. Permission denied: mod_fcgid
  5. 连续取模-function
  6. IIS服务器管理学习
  7. Generator 函数的异步应用
  8. [洛谷P3811]【模板】乘法逆元
  9. 1030: [JSOI2007]文本生成器 ac自动机+dp
  10. Codeforces Round #428 (Div. 2)E. Mother of Dragons