2009-09-27 8 views
12

quiero conseguir el desplazamiento deConsigue desplazamiento de búfer en vim (en particular, a través de secuencias de comandos de Python)

  1. la posición actual del cursor
  2. el rango de selección actual

en vim , comenzando desde el comienzo del archivo. Hago esto en python, así que sugiero cómo hacerlo con vim's python scripting sería muy útil.

He utilizado vim.current .. antes para hacer secuencias de comandos, pero utiliza líneas y columnas en lugar de un desplazamiento general.

¿Tendría que calcular la cantidad de todas las longitudes de línea precedentes + la fila actual, o hay un método más simple?

Respuesta

13

Si su vim se compila con la opción +byte_offset, a continuación, en una secuencia de comandos de Python después de la habitual import vim, se puede utilizar, por ejemplo:

vim.eval('line2byte(line("."))+col(".")') 

para obtener el desplazamiento de bytes desde el comienzo del archivo de la posición del cursor , y de manera similar para otras marcas. De manera más general, si tiene un par línea/columna, esto (asumiendo que +byte_offset es la forma en que se compiló su vim) es la forma de obtener un desplazamiento de bytes (también hay una función byte2line para ir hacia el otro lado).

Mientras que el módulo de vim hace que una gran cantidad de funcionalidad disponible directamente a los scripts de Python en vim, he encontrado que vim.eval y vim.command son a menudo el (y, a veces la única manera de conseguir más práctico ;-) en tan profundo como necesario;-). Ah, y siempre trato de tener un vim compilado con + justabouteverything siempre que puedo ;-).

+0

¡Gracias, eso es muy, muy útil! Sospeché que debe haber una manera tal si la API actual no lo admite :-) –

+3

o directamente: ': echo eval (line2byte (line (". ")) + Col (". "))' – mykhal

11

Es posible que también desee consultar la configuración statusline. Esto añadirá el desplazamiento de la línea de estado bye:

set statusline+=%o 

Ver :h statusline

Sólo tenga cuidado, porque la línea de estado por defecto está en blanco, y añadiendo el% de O a él, usted perderá todos los valores por defecto.

+2

Para mostrar la línea de estado cuando abre tiene una ventana: 'set laststatus = 2' – kizzx2

Cuestiones relacionadas