2011-08-11 12 views
19

El objetivo es utilizar la línea actual como una tarea pendiente y enviarla a algún programa externo. Algo como esto:enviar la línea actual al comando externo en vim (sin captura)

:! /usr/bin/todo "content of current line" 

Sé el comando de filtrado, pero esto implica que quiero editar el búfer en el que no quiero (:.! Actúa como un filtro). Sé cómo obtener el archivo actual con '%', pero ¿hay alguna forma de obtener otro contenido? Tal vez mediante el uso de: ejecutar ...

Respuesta

28

:.! funciona como un filtro, pero :.w ! (¡tenga en cuenta el espacio!) Acaba de pasar la salida. Ver :help :w_c. Es decir.

:.w !/usr/bin/todo - 
+0

Esto es exactamente lo que busqué. Terminé con un mapa como este ta: silent .w! Todo para crear un tarea desde la línea actual. Gracias ! – gaspard

+1

miré y voté a favor esta respuesta porque estaba interesado en hacer algo similar. para ejecutar un comando externo en el archivo comenzando desde la posición del cursor, utilicé:., $ w! command & – magnetar

+0

No funciona por mi cuenta. : .w! Ls ls: no se puede acceder a:: Ningún archivo o directorio shell ha devuelto 2 – ka3ak

3

Puede insertar contenido de los registros en línea de comandos, así que hacer algo como:

"1y$ //yank current row to register 1 
: CTRL-R 1 //CTRL-R followed by register id pastes register to command line 

debe hacer el truco.

0

Es posible que como algo parecido a estas asignaciones (es decir, guardados en su .vimrc o pegados en el símbolo del :):

cmap <C-R>'   <C-R>=shellescape(getline('.'))<CR> 
cmap <C-R><C-R>' <C-R><C-R>=shellescape(getline('.'))<CR> 

Una vez instalado, los utiliza como esto:

:!/usr/bin/todo ^R' 

(Tipo un control real - R donde el ejemplo anterior muestra ^R).

Puede pensar en ellos como versiones en modo de línea de comandos de control-R y basada en registere Control-R Control-R (véase :help c_CTRL-R y :help c_CTRL-R_CTRL-R) donde la “imaginaria” registro ' siempre contiene la cáscara-citado contenido de la línea actual.

Debido a estas asignaciones utilizan el mismo prefijo que las asignaciones incorporados (ver :help temas mencionados anteriormente), debe introducir la comilla simple final dentro de timeoutlen milisegundos (ver :set timeoutlen?), o se pondrá por defecto a la incorporada en el mapeo (ver :help map-typing).

Cuestiones relacionadas