3 votes

Vim envoie un tampon vide à l'interpréteur de commandes

Je suis novice en Vim. J'essaie de comprendre le comportement de cette fonction documentée :

                                                    *:w_c* *:write_c*
:[range]w[rite] [++opt] !{cmd}
                        Execute {cmd} with [range] lines as standard input
                        (note the space in front of the '!').  {cmd} is
                        executed like with ":!{cmd}", any '!' is replaced with
                        the previous command |:!|.

J'ai essayé ce qui suit :

  • Ouvrir vim
  • passez en mode insertion et tapez le texte 'foo'.
  • Entrez la commande ex :w ! touch

Je m'attendais à ce que cela crée un fichier nommé 'foo', comme le fait de taper 'touch foo' dans le shell. Au lieu de cela, j'obtiens cette erreur :

:write ! touch
usage:
touch [-A [-][[hh]mm]SS] [-acfhm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...

shell returned 1

C'est comme s'il envoyait un tampon vide à touch . J'ai essayé d'enregistrer le fichier pour voir si cela faisait une différence, mais ce n'est pas le cas. Je suis en train de lire le livre "Practical Vim" qui donne cet exemple :

:write ! sh

exécutera le contenu du tampon comme des commandes shell. Si je change foo a echo foo et exécuter cette commande, j'obtiens le comportement attendu :

:w ! sh
foo

Merci d'avance pour toute aide.

2voto

Matt Points 2656

La commande "bang" transmet le contenu du tampon par stdin. Mais "touch" attend son argument sur la ligne de commande.

Pour "connecter" les deux choses, utilisez l'utilitaire xargs.

:w !xargs touch

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X