Die destruktivste Sequenz in Vim, bei der vergessen wurde, den Einfügemodus zu betreten


10

Stellen Sie sich vor, Sie hätten eine beliebige Textdatei (die Sie auswählen können).

Geben Sie die Tastenfolge an, die am destruktivsten ist (*), wenn sie in den Text eingefügt werden soll, aber stattdessen im normalen Modus eingegeben wurde (dh i/ anicht gedrückt wurde). Sie dürfen den visuellen Modus nicht aufrufen und Vim nicht beenden.

Destruktiv ist wie folgt definiert: Das Verhältnis von geänderten / gelöschten Zeichen zur Anzahl der erforderlichen Tastenanschläge.
Sie erhalten Bonuspunkte, wenn Ihre Änderungen nicht durch eine feste Anzahl von undos rückgängig gemacht werden können.


Beispiel: Eingabedatei ohne Zeilenumbrüche. Eingabesequenz : dfs.


Das [Code-Golf] -Tag bedeutet, dass die wenigsten Charaktere gewinnen. Ihre Herausforderung ist komplizierter, deshalb habe ich das Tagging geändert.
dmckee --- Ex-Moderator Kätzchen

Antworten:


3
: 0,0 w 
:r

ruiniert alles nicht rückgängig machen


1
Ich verstehe nicht, wie es alles ruiniert! Wenn ich dieses Skript ausführe, wird der Inhalt meiner Datei dupliziert und das Rückgängigmachen funktioniert einwandfrei! könntest du erklären? Danke :)
saeedn

@saeedn :0,0 wsollte Zeilen 0 bis 0 schreiben und :rwürde es dann (jetzt leer) wieder einlesen, ich habe aber nicht wirklich ein vim, um es zu testen
Ratschenfreak

1
Nun, zuerst : 0,0 wschreibt er einen Teilpuffer, also weigert sich (mein) Vim, ihn zu speichern, muss ich w!stattdessen sagen w. So weit so gut, jetzt :rwird die Datei nicht wieder geöffnet. Stattdessen müssen Sie angeben, :ewelche Datei aus dem Dateisystem eingelesen wird. Obwohl mit diesen Änderungen der Puffer geändert wird, ist der Puffer bei weitem nicht leer. Es enthält die erste Zeile (weil Sie "0,0" gespeichert haben). Zumindest ufunktioniert ndoing nicht.
Bitmaske

3
:set ul=-1
ggdG
:w

Dadurch wird der Inhalt der Datei gelöscht und gespeichert. Ein Rückgängigmachen ist nicht möglich, da undoleveles auf eine negative Zahl gesetzt ist, wodurch der Rückgängig-Vorgang deaktiviert wird.

Edit: Es ist besser , zu schreiben , :g/^/dstatt ggdG, weil in diesem Fall die Sie verwenden können p(Put) zum Roll-back die Änderungen.


ggdGkönnte ersetzt werden durch:%d
Kenorb

@kenorb Ja, das ist kürzer, aber es hat auch das Problem ggdG, dass es durch Setzen von ( p) invertiert werden kann , :g/^/dscheint also immer noch eine bessere Option zu sein :)
saeedn

@saeedn :%d_ist kürzer als :g/^/dund löst auch das putProblem.
Rich

Außerhalb des möglichen Kontextes beim Schreiben dieser Antwort bin ich mir nicht sicher, ob jemand diese Tastenanschläge jemals versehentlich eingeben würde, weil er glaubt, sich im Einfügemodus zu befinden. ;)
Rich

2
:set ul=-1
:%s///g
:r!head -c1G</dev/urandom
:w
  1. Deaktiviert das Rückgängigmachen
  2. Löscht Zeichen
  3. Liest 1G Daten aus / dev / urandom
  4. Speichert

Biegen Sie die Regeln, weil ich Zeichen hinzufüge (ein Zeichen, das nicht vorhanden ist und jetzt vorhanden ist, bedeutet, dass ein Zeichen geändert wurde). Ich kann so viele Zeichen hinzufügen, wie ich möchte, so dass diese Punktzahl theoretisch unendlich ist.


0

5 Bytes:

:bd!

gefolgt von einer Eingabetaste.

Wirft den aktuellen Status der Datei, die Sie bearbeiten, aus dem Speicher weg, sodass alle nicht gespeicherten Änderungen in dieser Datei verloren gehen. Wenn Sie andere Dateien geöffnet haben, sind diese nicht betroffen. Dies beendet vim nicht, selbst wenn nur eine Datei geöffnet ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.