Найбільш руйнівна послідовність «режим забутого для введення-вставки» у Vim


10

Притворіть, що у вас є довільний текстовий файл (який ви можете обрати).

Наведіть послідовність натискань клавіш, яка є найбільш руйнівною (*), якщо вона мала бути вставлена ​​в текст, але замість цього була введена у звичайному режимі (тобто i/ aне була натиснута). Ви можете не входити у візуальний режим і не виходити з Vim.

Деструктивне визначається так: Відношення змінених / видалених символів до кількості необхідних натискань клавіш.
Ви отримуєте бонусні бали, якщо ваші зміни не можуть бути скасовані фіксованою кількістю undos.


Приклад: вхідний файл без розривів рядків. Вхідна послідовність: dfs.


Тег [code-golf] означає, що виграє найменше символів. Ви викликаєте складніше, ніж це, тому я змінив теги.
dmckee --- кошеня колишнього модератора

Відповіді:


3
: 0,0 w 
:r

руйнує все, що не скасовується


1
Я не розумію, як це все руйнує! коли я запускаю цей сценарій, він дублює вміст мого файлу, а скасування працює добре! ви могли б пояснити? Дякую :)
saeedn

@saeedn :0,0 wповинен написати рядки від 0 до 0, а :rпотім прочитав би їх (тепер порожньо), у мене справді немає вім, щоб перевірити це, хоча
грохот freak

1
Ну, по-перше, : 0,0 wпише частковий буфер, тому (мій) Vim відмовляється його зберегти, я мушу сказати w!замість цього w. Поки що добре, тепер :rфайл не відновлюється. Натомість ви повинні сказати, :eщо буде читати у файлі з файлової системи. Однак, хоча ці зміни змінюють буфер, але буфер далеко не порожній. Він містить перший рядок (тому що ви зберегли "0,0"). Принаймні, uщось не спрацює.
бітмаска

3
:set ul=-1
ggdG
:w

Це очищає вміст файлу і зберігає його. Скасування неможливо, оскільки undolevelвстановлено від'ємне число, що відключає роботу.

Редагувати: краще писати :g/^/dзамість ggdG, тому що в останньому випадку ви можете використовувати p(поставити) для відкату змін.


ggdGможе бути замінений на:%d
kenorb

@kenorb Так, це коротше, але у нього також є проблема ggdG, яку можна перевернути, поставивши ( p), тому :g/^/dздається, що все-таки кращий варіант :)
saeedn

@saeedn :%d_коротше, :g/^/dа також вирішує putпроблему.
Багатий

Крім того, поза можливим контекстом написання цієї відповіді, я не впевнений, чи хтось випадково набере ці натискання клавіш, думаючи, що вони перебувають у режимі вставки. ;)
Багатий

2
:set ul=-1
:%s///g
:r!head -c1G</dev/urandom
:w
  1. Відключає скасування
  2. Видаляє символи
  3. Читає 1G даних з / dev / urandom
  4. Економить

Згинання правил, оскільки я додаю символи (символ, якого немає там і зараз є, означає, що символ був змінений). Я можу додати стільки символів, скільки хочу, щоб ця оцінка була теоретично нескінченною.


0

5 байт:

:bd!

з подальшим натисканням клавіші enter.

Викидає з пам'яті поточний стан файлу, який ви редагуєте, тому всі збережені зміни у цьому файлі втрачаються. Якщо у вас відкриті інші файли, на них це не впливає. Це не закриває vim, навіть якщо у вас відкритий лише один файл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.