En vi [m] está el !
command which lets me pipe text a través de un comando de shell, como ordenar o sangrar, y obtener el texto filtrado de nuevo en el búfer. ¿Hay un equivalente en emacs?Filtrar texto a través de un comando de shell en Emacs
Respuesta
puede seleccione una región y escriba `C-u M- | comando RET ', y reemplaza la región con el resultado del comando en el mismo búfer debido al argumento de prefijo interactivo de shell-command-on-region.
Última edición: Por mucho que aprecio los votos por arriba, la respuesta de Jurta es el camino a seguir. Y el truco de Greg es más limpio que el mío.
dejaré el resto de esto aquí, ya que podría valer algo, pero ...
M-x shell-command-on-region
, que parece estar ligado a por defecto.
Veo que esto no hace exactamente lo que pidió Rohit. El uso de C-h f shell-command-on-region
revela que el comportamiento deseado está disponible en la versión no interactiva del comando (estableciendo el argumento replace
en no nil). Deberíamos poder escribir un contenedor para hacer esto.
Prueba esto (cargarlo en *scratch*
y ejecutar M-x eval-buffer
, si funciona, copiarlo en el fichero .emacs):
(defun shell-command-on-region-replace (start end command)
"Run shell-command-on-region interactivly replacing the region in place"
(interactive (let (string)
(unless (mark)
(error "The mark is not set now, so there is no region"))
;; Do this before calling region-beginning
;; and region-end, in case subprocess output
;; relocates them while we are in the minibuffer.
;; call-interactively recognizes region-beginning and
;; region-end specially, leaving them in the history.
(setq string (read-from-minibuffer "Shell command on region: "
nil nil nil
'shell-command-history))
(list (region-beginning) (region-end)
string)))
(shell-command-on-region start end command t t)
)
y fichas como digo en los comentarios que esto no es una muy emacsy cosas que hacer. Pero creo que funciona
Para aquellos lectores que no saben cómo seleccionar una región:
- Mover el "punto" (posición actual del cursor) a un extremo de la región, y que utilizan para activar el
C-space
"marca" - mover el punto al otro extremo de la región
- su hecho, invoque el comando
Gracias, no sé de eso, sino que me da el texto filtrada en una memoria intermedia separada; no reemplaza el original. – Rohit
Sé el comportamiento vi que desea. Sigue buscando. – dmckee
Interesante que esto no es simplemente una pregunta frecuente. Utilizo esta funcionalidad en vi (o vim) todo el tiempo; un editor sin él se vuelve ... menos interesante. –
de escribir este hace unos años, podría ayudarle a:
(defun generalized-shell-command (command arg)
"Unifies `shell-command' and `shell-command-on-region'. If no region is
selected, run a shell command just like M-x shell-command (M-!). If
no region is selected and an argument is a passed, run a shell command
and place its output after the mark as in C-u M-x `shell-command' (C-u
M-!). If a region is selected pass the text of that region to the
shell and replace the text in that region with the output of the shell
command as in C-u M-x `shell-command-on-region' (C-u M-|). If a region
is selected AND an argument is passed (via C-u) send output to another
buffer instead of replacing the text in region."
(interactive (list (read-from-minibuffer "Shell command: " nil nil nil 'shell-command-history)
current-prefix-arg))
(let ((p (if mark-active (region-beginning) 0))
(m (if mark-active (region-end) 0)))
(if (= p m)
;; No active region
(if (eq arg nil)
(shell-command command)
(shell-command command t))
;; Active region
(if (eq arg nil)
(shell-command-on-region p m command t t)
(shell-command-on-region p m command)))))
que he encontrado esta función a ser muy útil. Si le resulta útil, así, sugiero asociarlos a una determinada tecla de función por conveniencia, en lo personal yo uso F3
:
(global-set-key [f3] 'generalized-shell-command)
Excelente. Esto actúa igual que el conducto "C-k /" de joe a través del comando de shell. –
- 1. ¿qué comando de shell en emacs lisp?
- 2. ssh a través de shell emacs?
- 3. ¿Cómo ejecutar un comando de shell a través de vimscript?
- 4. Cómo ejecutar un comando de shell a través de Python
- 5. Cómo filtrar ListView a través de EditText
- 6. ¿Cómo ejecuto un comando sudo en Emacs?
- 7. Abrir un búfer de Emacs cuando un comando intenta abrir un editor en modo de shell
- 8. ¿Cómo abrir un archivo en Emacs a través de eshell?
- 9. Modo Emacs Shell: ¿cómo enviar la región a la shell?
- 10. ¿Cómo ejecutar un comando de shell a través del código PHP?
- 11. Filtrar a través de un modelo relacionado django
- 12. El comando Puppet exec se ejecuta en shell, pero no a través de puppet
- 13. shell cygwin en Emacs - ¿salida desordenada?
- 14. Abrir shell en emacs con un directorio de trabajo dado
- 15. Historial de comandos en el modo de shell de emacs
- 16. Emacs ido-style shell
- 17. Comandos de Emacs y Shell largos
- 18. Emacs: Terminal vs shell?
- 19. Múltiples comandos a través de Jsch Shell
- 20. Python Shell en Emacs 24?
- 21. Cómo eliminar la base de datos mysql a través del comando de shell
- 22. ¿Cómo aplicar el comando de shell a cada línea de un resultado de comando?
- 23. encuentra varios archivos con un comando en Emacs
- 24. Emacs ... como su shell predeterminado?
- 25. Ejecutando un comando de shell en un programa c
- 26. ¿Varios comandos de shell asíncronos en Emacs-Dired?
- 27. ejecutivo de PHP() no se ejecutará comando shell cuando se ejecuta a través del navegador
- 28. ImageMagick: convertir png fallan a través de PHP y trabaja a través de shell bash
- 29. Comando Emacs para buscar en archivos
- 30. Uso de variables en un comando de shell vim
Jurta por la victoria. Upvote. Juro que cada vez que pienso que estoy empezando a conocer este programa, alguien viene y me muestra que soy un principiante de rango. – dmckee
Normalmente, cuando necesita una función en Emacs, lo más probable es que ya esté implementada hace mucho tiempo. Entonces, lo mejor que puede hacer primero es leer la documentación en lugar de comenzar a reinventar la rueda;) – link0ff
Gracias jurta. Desafortunadamente no pude encontrar ninguna documentación para esta característica. – Rohit