2008-11-05 20 views

Respuesta

11

Si desea pasar el número de línea actual a un comando shell, se puede hacer

:exe "!echo " . line(".") 
+1

Hola, Esa es una respuesta increíble. Exactamente lo que estaba buscando. – akshat

+0

Gracias por el ingrediente que falta para mi línea e incluir la salida ': exe" r! " . getline (".") ' – bsb

13

. (punto) representa la línea actual.

Para aclarar: Esto es para cosas como :1,.s/foo/bar/g que transformará cada foo a bar desde el principio del archivo hasta la línea actual.

No sé sabe de una manera de obtener el número de línea actual ampliado para un comando shell, que es lo que está tratando de hacer por hacer :!echo .

Usted puede encontrar información sobre las ampliaciones que se hacen (como % y # por ejemplo) en :he cmdline-special.

+0

Este No funciona. Cuando doy un comando :! Echo. El resultado es solo un "." en lugar del número de línea esperado. – akshat

+0

No, esto no funciona, ver mi aclaración. Tal vez si haces otra pregunta para explicar en detalle tu atajo planificado, podemos ayudarte con otra forma de lograr lo que pretendes. – WMR

+0

gracias WMR. mirando hacia atrás en mi pregunta, me doy cuenta de que no explicaba correctamente mi requerimiento. PD: había mirado cmdline-especial pero no encontré esto. Esperaba que haya algo no mencionado. – akshat

1

Comandos en vim obras en la línea actual para:

:s/foo/bar/g 

transformará cada foo en la barra de en la línea que se encuentra actualmente.

+0

Creo que la 'g' hará que sustituya globalmente todo el archivo. –

+0

No, en este caso, la 'g' hará que la expresión regular se aplique globalmente a la línea actual. – Tomalak

+1

Para hacerlo globalmente, debe poner:% s/foo/bar/g OR: 1, $ s/foo/bar/g –

2

para devolver el número de línea de la línea actual en la parte inferior de la pantalla, utilice:

:.=  
Cuestiones relacionadas