bash - Vim envía un buffer vacío al shell

CorePress2023-11-30  1

Vim novato aquí. Estoy tratando de entender el comportamiento de esta función documentada:

                                                    *: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 |:!|.

Probé lo siguiente:

  • Abrir vim
  • vaya al modo de inserción y escriba el texto 'foo'
  • Ingrese el comando ex :w ! tocar

Esperaba que esto creara un archivo llamado 'foo', como lo hace escribir 'touch foo' en el shell. En lugar de eso me sale este error:

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

shell returned 1

Es como si enviara un buffer vacío al tacto. Intenté guardar el archivo para ver si eso hacía la diferencia pero no fue así. Estoy leyendo el libro 'Practical Vim' que da este ejemplo:

:write ! sh

ejecutará el contenido del buffer como comandos de shell. Si cambio foo a echo foo y ejecuto este comando obtengo el comportamiento esperado:

:w ! sh
foo

Gracias de antemano por cualquier ayuda.



------------------------

El comando "bang" pasa el contenido del búfer a través de la entrada estándar. Pero "touch" espera su argumento en la línea de comando.

Para "conectar" las dos cosas, utilice la utilidad xargs.

:w !xargs touch
Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare