- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Vimscript 更多Operator-Pending映射
Vimscript 更多Operator-Pending映射
Operators和movements所包含的理念是Vim 中的⼀个⾮常重要的概念,也是Vim之所以
这么⾼效的最⼤原因所在。在这⼀章 们会在这⼀块做更多的实践,这会让Vim变得
更强⼤。
假设你现在在往Markdown 中写⼊⼀些⽂字。如果你没有⽤过Markdown ,不要紧,对
于 们现在要做的事情⽽⾔,它很简单。把下⾯的⽂字输⼊到⼀个⽂件中:
Topic One
=========
This is some text about topic one.
It has multiple paragraphs.
Topic Two
=========
This is some text about topic two. It has only one paragraph.
使⽤=作为“下划线”的⾏会被Markdown当作标题。 们现在创建⼀些映射,这些映射
可以让 们通过movements定位到标题。运⾏下⾯的命令:
:onoremap ih :c-uexecute normal! ^==\\+$\r:nohlsearch\rkvg_c
这个映射有些复杂。现在把你的光标放到⽂本中的某个位置 (不要放到标题上),然后
敲击cih。Vim会删除光标所在章节的标题,然后保持在插⼊模式,这可以称为修改
所在的标题(change inside heading)。
这⾥使⽤了⼀些 们之前从来没有见过的东西,所以 们有必要单独分析下每⼀部分
的含义。这个映射的第⼀部分,:onoremap ih是映射命令,这个 们很熟悉了,⽆
需多⾔。c-u上⼀章讲过, 们现在也不深究。
接着看看剩下的部分:
:execute normal! ^==\\+$\r:nohlsearch\rkvg_cr
Normal
:normal命令的后⾯会跟着⼀串字符,⽆论这些字符表⽰什么含义,:normal命令
都会执⾏它们,就像是在常⽤模式下敲击这些字符⼀样。 们会在后⾯的章节中谈论
关于:normal的更多细节,由于这个它已经出现多次,所以 觉得有必要现在做⼀个
简单的说明,算是浅尝辄⽌吧。执⾏下⾯的命令:
:normal gg
Vim会将光标跳转到⽂件的顶部。现在执⾏下⾯的命令:
:normal
Vim将缩进当前⾏。
那normal后⾯的!是⼲啥的呢?先别管,以后再说。
Execute
execute命令后⾯会跟着⼀个Vim脚本字符串 (以后会深究它的细节),然后把这个
字符串当作⼀个命令执⾏。执⾏下⾯的命令:
:execute write
Vim会写⽂件,就像你已经输⼊了:writecr⼀样。现在执⾏下⾯的命令:
:execute normal! gg
Vim会执⾏:normal! gg,这个会将光标跳转到⽂件的顶部,跟之前⼀样。现在问
题来了, 们为什么要搞得这么蛋疼,又是execute,又是normal!,直接执
⾏normal!不就可以搞定么?
看看下⾯的命令,猜猜它会⼲啥:
:normal! gg/acr
这个命令似乎会做下⾯的⼀些事情:
将光标跳转到⽂件的顶部。
准备搜索。
把“a”当作⽬标字符串进⾏搜索。
按下return键执⾏搜索。
你⾃⼰执⾏⼀下,Vim会将光标跳转到了⽂件顶部,然后。。没有然后了 !
之所以会这样是由于normal!的⼀个问题,这问题是normal!不能识别“特殊字符” ,
例如这⾥的cr。这个问题有很多办法可以搞定,最简单的就是使⽤execute,另
外使⽤execute也会让脚本更易读。
当execute碰到任何你想让它执⾏的字符串的时候。它会先替换这个字符串中的所有
特殊字符。在这个⽰例中,\r是⼀个转义字符,它表⽰的是回车符 (carriage
return )。两个反斜线也是⼀个转义字符,它会将⼀个反斜线当作⼀般字符放到字符
串中。
如果 们按照上⾯的分析替换这个映射中的特殊字符,然后就可以搞清楚这个映射会
怎么执⾏:
:normal! ^==\+$cr:nohlsearchcrkvg_
^^^^ ^^^^
|| ||
这⾥的cr实际上是⼀个回⻋符,⽽不是由4个字符——“左尖括号”,“c“,”r“和“右尖括
所以现在normal!会执⾏这些字符,如同 们是在常⽤模式下敲击了它们⼀样。 们
以回车符对这些字符进⾏拆分,然后看看它们
原创力文档


文档评论(0)