我在我的文件顶部有这个:
var server = require('http'); var watchr = require('watchr'); var io = require('socket.io'); var fs = require('fs');
我想将这个垃圾转换为适当的var列表:
var server = require('http'),watchr = require('watchr'),io = require('socket.io')(server),fs = require('fs');
所以我的第一步是找到除了第一个之外的本段中的所有var声明并缩进它们.所以我搜索前一行上另一个var之前的每个单词varthat.
这是由于某种原因起作用的正则表达式:
\vvar\_.{-}\zs<(var)@>
说明:
\v Very magic mode (make all special characters special) var The word var \_ Spanning multiple lines . Any charaacter {-} Non greedy \zs Actually start higlighting our search here < A word boundary (var) The second occurance of the word var @> Treat the prevIoUs thing (var) as the whole match. Otherwise Vim is too stupid to match consecutive lines and only matches every other line
现在,当我在我的文件中点击n时,Vim正确地跳转到除第一个之外的每个var语句.好极了!
现在让我们使用我们的trusty:g命令在匹配我们的最后一个正则表达式的所有行上运行一个命令(除了第一个正则表达式之外的所有行,因为n跳过第一个正则表达式)
vip然后:
'<,'>g//norm>>
现在我得到:
var server = require('http'); var watchr = require('watchr'); var io = require('socket.io'); var fs = require('fs');
是什么赋予了?为什么它缩进我的第一行?如何使用zs或@>使g很好玩?或者我必须弄清楚任何可怕的Vim正则表达式的东西?
解决方法
:global只会占用多行匹配的第一行,除非您为执行的命令赋予偏移量:
:g/^var/+norm >>
结果:
var server = require('http'); var watchr = require('watchr'); var io = require('socket.io'); var fs = require('fs');
无论如何,我建议这个更简单的方法:
>将该段加入一行:
vipJ or :'{,'}j<CR>
结果:
var server = require('http'); var watchr = require('watchr'); var io = require('socket.io'); var fs = require('fs');
>使用正确的字符串在正确的位置拆分该行:
:s/; var /,\r /g
结果:
var server = require('http'),io = require('socket.io'),fs = require('fs');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。