Obtener información del editor (vim/nano/emacs/textmate?)

Obtener información del editor (vim/nano/emacs/textmate?)

Solo tenía curiosidad por saber si hay una manera de obtener información no de StdInsino de $EDITOR, ya sea vim, nano, emacs o incluso un editor que no sea de línea de comandos (MacVim/TextMate). ¿Cuáles son las opciones/soluciones/mejores prácticas?

Básicamente, desearía un flujo de trabajo como heredocel de $editor.

$ sort -nr << FOO | uniq -c 
pipe heredoc> foo 
pipe heredoc> bar
pipe heredoc> baz
pipe heredoc> foo
pipe heredoc> FOO
   2 foo
   1 baz
   1 bar

Respuesta1

El comando vipeen el paquete.másutilsle permite iniciar $EDITOR en medio de una canalización.
Puede obtener el comportamiento deseado de esta manera:

$ </dev/null vipe |sort -nr | uniq -c 

Respuesta2

Supongo que tu única posibilidad de hacerlo funcionar con cualquier tipo de editor es utilizar archivos temporales:

FILE=$(mktemp); $EDITOR "$FILE"; <"$FILE" …command… ; rm "$FILE"

(Sin embargo, esto no permite iniciar el comando antes de que se proporcione una entrada completa).

También puedes usarlo echo "# please insert your input bellow" >"$FILE"antes de la llamada para $EDITORinsertar un comentario que aparecerá dentro del editor. Asegúrese de que no afecte el comportamiento del comando (o solicite al usuario que lo elimine explícitamente).

Respuesta3

Emacs tiene la posibilidad de ejecutar el shell en uno de sus búfer (use el shell MX). Pero los procesos iniciados aún recibirían su entrada de la entrada estándar, su entrada estándar sería simplemente una pseudoterminal cuyo otro extremo sería emacs.

Respuesta4

En Emacs puede ejecutar cualquier comando y proporcionar el contenido de uno de los buffers de Emacs (región seleccionada para ser exactos) como entrada estándar para la aplicación.

Por ejemplo, si el contenido de su búfer de Emacs será lsy lo marca como región (usando C-SPC), ejecute shell-command-on-region( M-|) y escriba como comando bash(combinación completa M-| command RET:) allí se ejecutará lsy bashla salida se abrirá como un nuevo búfer.

Si usa C-u M-| command RETuna región, la salida reemplazará el comando marcado en su búfer actual.

información relacionada