2010-10-20 11 views
6

die -w und -W Optionen von vim haben theoretisch folgende Wirkung:die Option -W von vim

-w {scriptout} Alle Zeichen, die Sie in der Datei "scriptout" aufgezeichnet geben, bis du Vim verlässt. Dies ist nützlich, wenn Sie eine Skriptdatei erstellen möchten, die mit "vim -s" oder ": source!" Verwendet werden soll. Wenn die Datei "scriptout" bereits existiert, werden neue Zeichen angehängt. Siehe auch | complex-repeat |. {scriptout} kann nicht mit einer Ziffer beginnen. {nicht in Vi}

-W {scriptout} Wie -w, aber nicht anhängen, eine vorhandene Datei überschreiben. {nicht in Vi}

Aber wenn ich dies tun, wird die {scriptout} Datei immer mit einer hexadezimalen Sequenz wie 80 fd 60 beginnen (manchmal ist es 80 fd 62).

Ich benutze gvimportable.exe 7.3 von portableapps.com. Mit dem -u NONE Schalter geht es genauso.

Wozu dient diese "magische Zahl"? Unter Windows mit gvim.exe kann ich mein Skript nicht wiederholen, bis ich diese drei führenden Bytes entfernt habe ...

Es scheint, dass diese Funktion, die sehr nützlich sein könnte, schlecht dokumentiert ist.

Vielen Dank für Ihre Antworten.

+0

Wenn ich die '-W' Option getestet verwenden, vim zu Beginn der Datei keine zusätzlichen Zeichen nicht hinzugefügt haben. Sie sollten es erneut versuchen, ohne Ihre '.vimrc' mit' vim -u NONE-W somefile' –

+0

Das ist, was ich getan habe ... '' vim -u NONE-W scriptout', ZQ und 'xxd' my_scriptout zeigen' 80fd 605a 51 '(..'ZQ) – Benoit

+0

Ich habe mir das vor ein paar Wochen angeschaut und konnte es unter Linux nicht reproduzieren ... jetzt, da ich weiß, dass du mein gVim Portable verwendest (yay!), Werde ich es erneut unter Windows versuchen und sehen, ob ich es herausfinden kann. (Morgen, heute nicht.) –

Antwort

6

(Diese Antwort ist wahrscheinlich fragmentiert, es hat eine Weile gedauert - ich wollte auch eine Lösung finden, weil sie mich faszinierte - nicht nur das Kopfgeld von 200: P. Es zeigt mehr oder weniger meinen Gedankengang und Experimentieren.)

Ich kann es jetzt mit gvim auf Linux reproduzieren, das ist /usr/bin/vim.gnome -g; Laufen als vim -g tut genau das Gleiche.


in den Code Delving: (vergeblich in diesem Fall, aber Spaß zu tun und zu lernen, wie zu tun)

Ich habe durch den Quellcode geschaut und ich kann es jetzt erklären, etwas (aber nicht sinnvoll!); es wird die outfile FILE (src/globals.h:1004) gesetzt (src/main.h:2275); Dies wird dann in src/getchar.h:1501 geschrieben, in der updatescript Methode, die von gotchars (Linie 1215) verwendet wird, die von vgetorpeek verwendet wird, die von vgetc und vpeekc verwendet wird ... (Nein, ich weiß nicht, wohin das geht!) Dann sind diese an einer Reihe von Orten verwendet.

Wie dem auch sei, nehme ich den Schlüssel irgendwo in src/gui.c ist, aber ich weiß im Moment nicht, wo! Es ist auch möglich, dass einige Tastenfolge „gesendet“ wird (physisch oder virtuell, ich weiß es nicht), sondern als Problem zu sehen, ist die gleiche auf allen Plattformen würde es wahrscheinlicher scheint ein Vim Problem, als es sonst zu sein.


Interessante Situationen was zu einer wahrscheinliche Erklärung:

Es lohnt sich auch während der Feststellung, dass, wenn Sie automatisch beendet, gvim -u NONE -w scriptout -c quit (:quit nach dem Laden) oder gvim -u NONE -w scriptout -c quit (Instant :quit, zeigt nie GUI), die Datei Skript ist leer gelassen.

Wenn Sie darüber hinaus offen gvim und dann schließen sie die X-Taste verwenden, keine Tasten drücken:

0000000: 80fd 6280 fd63 80fd 62     ..b..c..b 

Wenn Sie offen gvim, wegklicken, klicken Sie zurück und verwenden :q:

0000000: 80fd 6280 fd63 80fd 6280 fd2c 80fd 2e3a ..b..c..b..,...: 
0000010: 710d          q. 

Also ich denke, es ist das Fenster Ereignisse werden intern in etwas anderes übersetzt. 80 fd 62 ist die offene Sequenz und 80 fd 63 80 fd 62 ist die Schließsequenz.

Ich habe eine andere Möglichkeit gefunden, 80fd als auch zu triggern, was mich zu der Sache führt, es ist eine Art von "Benutzer hat Zugriff auf das Fenster"; standardmäßig mit GNOME in Ubuntu, Strg + Alt + S macht etwas mit dem Fenster (kann mich nicht erinnern, was es heißt, schiebt sie alle in der Titelleiste auf, App innen verliert Tastatursteuerung etc.). gvim ... (Sie wissen schon, die Argumente!), i<Strg + Alt + S (kontrahiert) Strg + Alt + S (erweitert) >EscZ Q dies erzeugt für me:

0000000: 80fd 6269 3c80 fd63 80fd 623e 1b5a 51 ..bi<..c..b>.ZQ 

Zusammenfassung: so da haben wir, was ich glaube, die Lösung ist; gVim fängt die Fenstermeldungen in irgendeiner Form ab und - ob es sollte oder nicht - setzt sie in seine scriptout. Wenn du denkst, dass es nicht sein sollte (oder wissen möchtest, warum sie dort bleiben oder ob sie überhaupt gemeint sind oder ob du dich überhaupt darum kümmern solltest), frag nach der Vim-Liste, denke ich.

+0

Beachten Sie, dass dieser Test vollständig unter Linux durchgeführt wurde, nachdem ich festgestellt hatte, dass sich das Problem dort und unter Windows manifestierte. Wenn du willst, kann ich auf ähnliche Weise mit Windows herumspielen, oder du kannst. Ich denke, Sie werden ungefähr die gleiche Sache finden: Dinge mit dem Fenster selbst zu tun, bringt Dinge ins Skript. –

1

Meine beste Vermutung ist, dass dies ein Fehler im GUI-Code von gVim ist.

Mit gVim 7.3, wenn ich gvim -u NONE -W scriptout laufen dann sehe ich das Problem, aber wenn ich vim -u NONE -W scriptout ausführen, dann sind die unerwünschten Bytes nicht vorhanden.

ich auch Vim in Linux 7.2 aus der Shell getestet, enthielt die Version von Vim in Snow Leopard (7.2) und die GUI und Terminal-Versionen von MacVim 7.2 (mit mvim -W und /Applications/MacVim/Contents/MacOS/Vim -W, respectively) und sie alle arbeiteten richtig.

+0

danke für deine antwort.Ich bin wahrscheinlich verpflichtet, in den Code zu schauen, um herauszufinden, warum das so ist. Könnten Sie das auch unter Linux versuchen? – Benoit

+0

@Benoit Yup, funktioniert gut unter Linux, und beide vom Terminal und GUI unter OS X. Ich habe meine Antwort bearbeitet, um dies zu zeigen. – Rich

Verwandte Themen