2010-08-17 21 views
5

Hay una función vim Send_to_Screen(text) que envía texto a una sesión de pantalla de la consola. Tengo una asignación¿Cómo obtener el contenido del búfer actual en el modo de comando vim?

vmap <F4> "ry :call Send_to_Screen(@r)<CR> 

que llama a la función con la selección actual. Ahora quiero definir otra asignación que llame a la función con el contenido de todo el búfer, pero no consigo que funcione. Intenté

nmap <F5> maggVG"ry`a :call Send_to_Screen(@r)<CR> 

pero no funciona. Entonces, ¿cómo definir el mapeo con el texto del buffer actual?

Respuesta

13

¿Qué tal:

nmap <F5> :call Send_to_Screen(join(getline(1,'$'), "\n"))<CR> 

La función getline() devuelve una lista de líneas en el rango seleccionado (1 es la primera línea y "$" es el último) y la función join() se une a los contenidos de una lista junto con el separador proporcionado ("\ n" en este caso). Ver:

:help getline() 
:help join() 
+0

Cualquier diferencia entre comillas simples y dobles en vimscript? – qed

+0

Las comillas simples de @qed no interpretarán '\ n' como una línea nueva, sino un literal' \ n' – falstro

Cuestiones relacionadas