热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

Vim问题,在选定的行上应用了粘贴粘贴宏

如何解决《Vim问题,在选定的行上应用了粘贴粘贴宏》经验,为你挑选了1个好方法。

我已经在Vim 8.1和Neovim(nvr 2.1.10)中使用和/或不使用〜/ .vimrc(后者检查vimrc条目是否具有因果关系-无效)进行了尝试。

给出这个例子

apple
banana
carrot
dates

我可以记录一个宏(@a)

yy
p

拉动并粘贴(即复制)一条线。当我将该宏(@a)应用于单独的行,并在单独的行上重复该宏(@@)时,它将复制该行。

但是,当我直观地选择这些行并尝试应用宏时,尝试其中的任何一条

:'<,>'norm @a    ## :'<,>'norm @a on single line works
:'<,>'normal @a
:'<,>'norm! @a

:'<,>':norm @a
:'<,>':normal @a
:'<,>':norm! @a

:1,4norm! @a    ## /sf/ask/17360801/

等等。宏会复制(每行一次)所选文本的第一行:

apple
apple
apple
apple
apple
banana
carrot
dates

这是什么问题?



1> 小智..:

您看到此问题的原因是因为范围在ex命令上的工作方式。

指定范围时,在进行任何操作之前,该范围将被评估为行号。在这种情况下,因为这些是线性操作,所以将其'<评估为1,并将'>其评估为4。当您第一次在第1行运行宏时,将使用“ apple”创建新行。当宏在第2行上运行时,该行包含“ apple”,因此该单词被复制,依此类推。使用该命令执行时该行上的内容。如果使用%(对于所有行)或2,4选择“香蕉”及以下,您将看到相同的行为。

但是,POSIX为:g命令指定了不同的行为:

全局和v命令在逻辑上是两次通过操作。首先,在指定行中标记除终止符以外的行匹配(全局)或不匹配(v或全局!)指定模式的行。其次,执行命令给定的ex命令,并将当前行('。')设置为每个标记行。

这就是:g/^/norm yyp在这里工作的原因:因为要修改的行在执行之前就被标记了,只有被标记的行才执行命令。不考虑事实之后插入的行。:g正如您所指出的,它确实接受范围,因此您可以将操作限制为要处理的一组行。


推荐阅读
author-avatar
lenpre2017
林频仪器(http://www.linpin.com/)主营产品:盐雾试验箱、高低温试验箱、恒温恒湿试验箱,林频仪器是中国环境试验设备行业中唯一的股份制高新技术企业,是中国领先的环境试验设备制造商和可靠性环境试验解决方案综合服务商,拥有中国最大的环境试验设备生产基地,客户遍布全球40多个国家和地区。林频仪器现已发展成为环境试验设备领域的龙头企业。 ■ 凭借创新的产品、高效的供应链和强大的战略执行力,林频仪器锐意为全球用户打造优质、安全、环保的产品及专业高效的服务。 ■ 林频仪器产品系列包括:温
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有