Vim中最具破坏性的“忘记进入插入模式”序列


10

假设您有一个任意的文本文件(可以选择)。

如果打算将其插入到文本中,但以正常模式输入(即未按下i/ ),则给出最具破坏性的击键顺序(* a)。您可能没有进入可视模式并且没有退出Vim。

破坏性定义如下:更改/删除的字符与必要击键次数的比率。
如果您的更改无法被固定数量的undos 撤消,则您将获得奖励积分。


示例:没有换行符的输入文件。输入顺序:dfs


[code-golf]标签表示获胜的字符最少。您所面临的挑战比这还要复杂,因此我更改了标签。
dmckee ---前主持人小猫,

Answers:


3
: 0,0 w 
:r

一切都毁了


1
我不明白它如何毁了一切!当我运行此脚本时,它会复制文件的内容,并且撤消工作正常!你能解释一下吗?谢谢:)
saeedn

@saeedn :0,0 w应该将0到0行写进去,:r然后再读回它(现在为空),尽管我真的没有vim来测试它
棘手的怪胎

1
好吧,首先,: 0,0 w写一个局部缓冲区,所以(我)Vim拒绝保存它,我不得不说w!代替w。到目前为止一切正常,现在:r不会重新打开文件。相反,您必须说:e哪个将从文件系统读取文件。但是,尽管进行了此修改,但确实会更改缓冲区,但缓冲区远不是空的。它包含第一行(因为您保存了“ 0,0”)。至少undoing不起作用。
bitmask

3
:set ul=-1
ggdG
:w

这将清除文件内容并保存。撤消是不可能的,因为undolevel设置为负数将禁用撤消操作。

编辑:最好写:g/^/d而不是ggdG,因为在后一种情况下,您可以使用p(put)回滚更改。


ggdG可以替换为:%d
kenorb 2015年

@kenorb是的,它更短了,但是它也有问题ggdG,可以通过放(p)来反转,因此:g/^/d似乎仍然是一个更好的选择:)
saeedn15年

@saeedn :%d_比它短:g/^/d,也可以解决put问题。
Rich

另外,在编写此答案的可能范围之外,我不确定是否有人会意外地以键入模式键入这些击键。;)
Rich

2
:set ul=-1
:%s///g
:r!head -c1G</dev/urandom
:w
  1. 禁用撤消
  2. 删除字符
  3. 从/ dev / urandom读取1G数据
  4. 节省

弯曲规则,因为我要添加字符(一个不存在且现在存在的字符意味着一个字符已更改)。我可以添加任意数量的字符,因此从理论上讲该分数是无限的。


0

5个字节:

:bd!

然后按Enter键。

从内存中丢弃正在编辑的文件的当前状态,因此该文件中所有未保存的更改都将丢失。如果您打开了其他文件,则它们不会受到影响。即使您只打开一个文件,这也不会退出vim。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.