Cuando invoca un programa a través de xargs
, el stdin del programa (entrada estándar) apunta a /dev/null
. (Dado que xargs no conoce el stdin original , hace lo siguiente mejor).
$ verdadero | xargs Filan -s
0 chrdev / dev / null
1 tty / dev / pts / 1
2 tty / dev / pts / 1
$ verdadero | xargs ls -l / dev / fd /
Vim espera que su stdin sea el mismo que su terminal de control y realiza varios ioctl relacionados con el terminal en stdin directamente. Cuando se hace en /dev/null
(o cualquier descriptor de archivo que no sea tty), esos ioctls no tienen sentido y devuelven ENOTTY, que se ignora en silencio.
Mi suposición es una causa más específica: en el inicio, Vim lee y recuerda la configuración anterior del terminal, y la restaura de nuevo al salir. En nuestra situación, cuando se solicitan las "configuraciones antiguas" para un fd (descriptor de archivo) no tty, Vim recibe todos los valores vacíos y todas las opciones deshabilitadas, y descuidadamente establece lo mismo en su terminal.
Puede ver esto ejecutando vim < /dev/null
, saliendo de él, luego ejecutando stty
, lo que generará una gran cantidad de <undef>
s. En Linux, la ejecución stty sane
hará que el terminal se pueda volver a usar (aunque habrá perdido opciones tales como iutf8
, posiblemente, causando molestias menores más adelante).
Podría considerar esto un error en Vim, ya que puede abrirse /dev/tty
para el control del terminal, pero no lo hace. (En algún momento durante el inicio, Vim duplica su stderr a stdin, lo que le permite leer sus comandos de entrada, desde un fd abierto para escribir, pero incluso eso no se hace lo suficientemente temprano).
find
oxargs
en absoluto. Abra vim sin argumentos, luego ejecútelo:args **/*.txt<CR>
para configurar los argumentos de vim desde el interior del editor.