8
votes

Utilisation de l'option -w de VIM

Le -w et -w Options de VIM a théoriquement l'effet suivant:

-w {scriptout} Tous les caractères que vous tapez sont enregistrés dans le fichier "ScriptOut", jusqu'à ce que vous quittiez Vim. Ceci est utile si vous voulez créer Un fichier de script à utiliser avec "vim -s" ou ": source!". Quand le "scriptout" Le fichier existe déjà, de nouveaux personnages sont annexés. Voir également | Répéter complexe |. {scriptout} ne peut pas commencer par un chiffre. {Pas dans VI}

-w {scriptout} comme -w, mais ne pas ajouter, écrasez un fichier existant. {Pas dans VI}

Mais quand je le fais, le fichier {scriptout} commencera toujours par une séquence hexadécimale comme 80 fd 60 (parfois c'est 80 fd 62 ).

J'utilise gvimportable.exe 7.3 de PortaBeApps.com. Avec le commutateur -U non , il fait de même.

Quel est ce "numéro magique"? Sous Windows avec GVIM.EXE, je ne peux pas rejouer mon scriptout avant d'avoir supprimé ces trois premiers octets ...

Il semble que cette fonctionnalité, qui pourrait être très utile, est mal documentée.

Merci pour vos réponses.

vim

4 commentaires

Lorsque j'ai testé l'option -w , VIM n'a pas ajouté de caractères supplémentaires au début du fichier. Vous devriez essayer à nouveau sans votre .vimrc à l'aide de vim -u aucun -wonefile


C'est ce que j'ai fait ... toujours, vim -u non -w scriptout , zq et xxd my_script montrera 80fd 605a 51 (.. " )


J'ai regardé cela il y a quelques semaines et je ne pouvais pas le reproduire sur Linux ... Maintenant que je sais que vous utilisez mon GVIM portable (YAY!) Je vais essayer à nouveau sur Windows et voir si je peux le comprendre . (Demain, pas aujourd'hui.)


Attendez, je a fait la reproduisez avec Linux avec gvim ... IT fait sortie 80fd 60 avec -w ou -w , juste pas avec vim .


3 Réponses :


1
votes

Ma meilleure hypothèse est que ceci est un bogue dans le code d'interface graphique de GVIM.

Utilisation de gvim 7.3, si j'exécute gvim -u non -w scriptout puis je vois le problème, mais si j'exécute vim -u non -w scriptout Les octets indésirables ne sont pas présents.

J'ai également testé Vim 7.2 à partir de la coque de Linux, la version de Vim incluse dans Snow Leopard (7.2) et les versions GUI et Terminal de Macvim 7.2 (avec MVIM -W et et / Applications / Macvim / Contenu / MacOS / Vim -W , respectivement) et ils fonctionnaient tous correctement.


2 commentaires

Merci pour votre réponse. Je suis probablement tenu de regarder le code pour trouver pourquoi cela le fait. Pourriez-vous essayer cela sous Linux aussi?


@Benoit Yup, fonctionne bien sur Linux, et à la fois du terminal et de l'interface graphique sur OS X. J'ai édité ma réponse pour le montrer.



7
votes

(cette réponse est probablement fragmentée de manière significative, il m'a fallu un moment jouant - je voulais trouver une solution aussi parce qu'elle me intriguait - pas seulement la prime de 200: p. Il montre plus ou moins mon train de réflexion et expérimentation.)

Je peux maintenant le reproduire avec gvim code> sur Linux, qui est /usr/bin/vim.gnome -g code>; en cours d'exécution comme vim -g code> fait exactement la même chose. P>


DROPVER dans le code: strong> (inutile dans ce cas, mais amusez-vous à faire et apprendre à faire) p>

J'ai examiné le code source et je peux maintenant l'expliquer quelque peu (mais pas utilement!); Il reçoit le fichier outfile code> ( src / globals.h: 1004 code>) définir ( src / main.h: 2275 code>); Ceci est ensuite écrit dans src / getchar.h: 1501 code>, dans la méthode mises à jour code> utilisé par gotchars code> (ligne 1215) qui est utilisé par vgetorpeek code>, qui est utilisé par vgetc code> et vpeekc code> ... (non, je ne sais pas où cela va!) Celles-ci sont utilisées dans un certain nombre d'endroits. P>

Quoi qu'il en soit, je suppose que la clé est quelque part dans src / gui.c code>, mais je ne sais pas d'où vient le moment! Il est également possible que certaines séquences clés soient "envoyées" (physiquement ou virtuellement, je ne sais pas), mais voyant que la question est la même dans toutes les plateformes, cela semblerait plus susceptible d'être une émission VIM que sinon. P >


situations intéressantes strong> menant à une explication probable: p>

Il vaut également la peine de noter que si vous quittez automatiquement, gvim -u non -w scriptout -c Quitter code> (: Quitt code> après chargement) ou gvim -u non -w script -c Quitter code> (instant : Quitter code>, Ne montre jamais interface graphique), le fichier script est laissé vide. p>

En outre, si vous ouvrez GVIM, puis fermez-le à l'aide de la touche X EM>, appuyez sur NO TOUCHES: P> xxx pré>

Si vous ouvrez GVIM, cliquez à l'écart, cliquez sur Retour et utilisez-l'utiliser : q code>: p> xxx pré>

donc je pense que je pense Ce sont les événements de la fenêtre sont traduits en interne dans quelque chose d'autre. 80 fd 62 code> est la séquence ouverte et 80 fd 63 80 fd 62 code> est la séquence proche. p>

J'ai trouvé une autre façon de déclencher 80fd code> aussi, ce qui me conduit à chose que c'est une sorte d'un "utilisateur a accès à la fenêtre"; Par défaut avec GNOME à Ubuntu, Ctrl + ALT + S KBD> fait quelque chose avec la fenêtre (je ne me souviens pas de ce qu'on appelle; glisse tout dans la barre de titre, l'application à l'intérieur perd le contrôle du clavier, etc.) . gvim ... code> (vous connaissez les arguments!), i kbd> Ctrl + alt + s kbd> (contracté) ctrl + alt + s kbd> (développé) > kbd> ESC kbd> z kbd> q kbd> produit ceci pour ME: P>

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


1 commentaires

Notez que ce test a été entièrement effectué sur Linux une fois que j'ai découvert que la question se manifestait là-bas ainsi que sur Windows. Si vous voulez, je peux jouer avec elle de manière similaire sur Windows, ou vous pouvez. Je pense que vous trouverez à peu près la même chose: faire des choses avec la fenêtre elle-même met les choses dans le scriptout.



0
votes

Quelqu'un a fait le travail acharné pour nous dans le projet de Vimgolf, en particulier ce fichier bien commenté: https://github.com/igrigorik/vimgolf/blob/master/lib/vimgolf/lib/vimgolf/keylog.rb

0x80 dans la séquence d'échappement pour des codes spéciaux de deux octets. Dans ce cas, ils représentent des événements de concentration GVIM. Voir ici : < / p> xxx


0 commentaires