Al usar Vim para leer desde stdin, imprime un mensaje informativo:
$ echo foo | vim -
Vim: Reading from stdin...
$
Esto es solo un ejemplo. El uso real no permite construcciones de shell. vim <(echo foo)
no es una opinión.
¿Puedo suprimir eso usando solo las opciones de Vim y / o la configuración de vimrc?
En caso de que necesite saber para qué sirve, estoy tratando de usar Vim para leer páginas de manual (conector descarado). GNU man no permite construcciones de shell MANPAGER
, y al usar ftplugin/man.vim
y otras cosas, he logrado tener una experiencia cómoda usando solo MANPAGER="vim -"
. La última molestia restante es el mensaje desagradable impreso después de cada página de manual que vi.
export MANPAGER='vim -c "%! col -b" -c "set ft=man nomod nolist ignorecase" -'
oexport MANPAGER="vim -"
no veo ningún problema?man ls
abre la página de manual como se esperaba.echo foo | vim -Nu NONE -
: help less
da información para usarlo como buscapersonas.Respuestas:
A partir de Vim 8.0.1308 (noviembre de 2017), puede usar la
--not-a-term
opción para suprimir este mensaje; por ejemplo conquit
:O con
exit
:fuente
cat
, pero aún puede ser útil para aplicar Vimscript a la entrada, por ejemplo,+'runtime! syntax/2html.vim'
para exportar texto resaltado como HTML con estilo (suponiendo un tipo de archivo deducido o especificado). Hay algunas opciones diferentes a las mencionadas hasta ahora; lo primero que viene a la mente es usarmktemp
para almacenar la salida del comando y usar esto como entrada de Vim. Puede agregar los comandos de redirección y shell de Vim para 'pegar' el resultado del comando en el búfer, pero esto requiere más trabajo. (Los archivos de secuencia de comandos de Vim pueden automatizar largas invocaciones en lugar de usar alias.)--not-a-term
en Vim 7.4.1689 en Ubuntu 16.04 (pero no 7.4.8056 en una Mac), pero no suprime el mensaje.:help version8.txt
.--not-a-term
opción sí se añadió en7.4.1419
y su comportamiento se cambió a suprimir también la lectura de la entrada estándar ... mensaje en8.0.1308
. (Por cierto, también se suprimen los N archivos para editar el mensaje8.1.1258
)La respuesta a tu pregunta exacta :
es: no, es que no es posible por lo siguiente parte del código
lo que significa que si le das un
-
argumento a vim, entonces mostrará mecánicamente ese mensaje.sin embargo, como solución alternativa, si usa una redirección de archivo en lugar del
-
argumento, se deshará del mensaje:y aquí hay un ejemplo de
MANPAGE
configuración que simplemente funciona ™ (tomado de los intertubos):fuente
ALWAYS_USE_GUI
define, ¿sabes?echo "foo" | vim < /dev/tty
trabajo de solución . Hacerlo da[2]+ Stopped echo "foo" | vim < /dev/tty
.echo "foo" | gvim /dev/stdin
(aunque el vim no GUI todavía emitirá una queja al respecto:)Vim: Warning: Input is not from a terminal
.<(col -b)
parte. Esa es esencialmente una versión sofisticadacat
para imprimir páginas man, y finalmente puede deshacerse del mensaje de vim conecho test | vim < /dev/tty <(cat>
En Vim, este problema se ha solucionado en
234d162
commit (> = v8.0.1387).Por lo tanto, el mensaje solo se muestra cuando el usuario no ha redirigido el stdin.
Se ha abordado un problema similar en la versión reciente de Neovim ( > = v0.2.2-dev ) que podría usar en lugar de Vim.
Una vez que se lanza NVim v0.2.2, debería poder ejecutar:
sin tener el mensaje
fuente
Con vim de la versión 8.0.1387 y posteriores, puede usar la
--not-a-term
opción.Para una versión anterior usa el siguiente truco:
$ echo foo | bash -c 'vim < /dev/tty <(cat)'
El primer argumento de
/dev/tty
alguna manera engaña a Vim para pensar que la entrada proviene del teclado. Supongo que es porque isatty (3) devuelve True para ese archivo. Y el segundo argumento simplemente pasa de todo, desde su entrada estándar a la entrada estándar de Vim. Finalmente,bash -c
se requiere un prefijo para que la construcción especial<(...)
funcione si el shell no lo admite. En bash, la solución original se puede simplificar a$ echo foo | vim < /dev/tty <(cat)
fuente