__author__ - ¿Cómo se puede usar Python en Vim?
python mode vim (12)
¿Puede alguien elaborar este punto: "su secuencia de comandos puede leer de stdin para operar directamente en las líneas dadas (.,%, ...)".
Un uso común es ordenar las líneas de texto usando el comando ''ordenar'' disponible en su caparazón. Por ejemplo, puede ordenar el archivo completo con este comando:
:%!sort
O bien, puede ordenar solo algunas líneas seleccionándolas en modo visual y luego escribiendo:
:!sort
Puedes ordenar las líneas 5-10 usando este comando:
:5,10!sort
Puede escribir su propia secuencia de comandos (suponiendo que sepa cómo hacerlo) que invierte las líneas de texto. Funciona así:
bash$ myreverse ''hello world!''
!dlrow olleh
Puede aplicarlo a uno de sus archivos abiertos en vim exactamente de la misma manera que utilizó sort
:
:%!myreverse <- all lines in your file are reversed
Pierdo mucho tiempo entre Vim y Python. Me parece demasiado lento para copiar y pegar manualmente de Python a Vim y viceversa. Un buen ejemplo roto es:
%! python para i en xrange (25); imprimir 6 * i / n
¿Cómo puedes hacer tales ajustes directamente en Vim? [Resuelto]
[Aclaración] Necesito cosas para Vim, como secuencias de impresión, aritmética ... - cosas que no puedo hacer en Vim.
[?] ¿Puede alguien elaborar este punto: "su secuencia de comandos puede leer de stdin para operar directamente en las líneas dadas (.,%, ...) " .
[Más aclaraciones]
Si quiero imprimir ''Hola'' a las líneas 4,5, 6 y 7, ¿qué pasa?
: 4-7! Python -c "imprimir ''hola''"
El punto . modifica la línea actual. ¿Puedo imprimir en múltiples líneas 7, 32 y 99?
: 7,32,99! Python -c "imprimir ''hola''"
Claramente no funciona. ¿Cómo?
Si quiero imprimir ''Hola'' a las líneas 4,5, 6 y 7, ¿qué pasa?
Si desea hacer algo en lugares elegidos al azar a lo largo de su archivo, es mejor que grabe las teclas y las repita. Vaya a la primera línea que desee cambiar, y qz
para comenzar a registrar en el registro z
. Haz las ediciones que quieras para esa línea y pulsa q
nuevamente cuando hayas terminado. Vaya a la siguiente línea que desea cambiar y presione @z
para reproducir la macro.
Acabo de escribir el siguiente módulo que le permite editar un búfer temporal en vim directamente en el intérprete de Python.
Creo que lo que realmente quieres se explica here .
Creo que solo te falta la bandera -c
. Por ejemplo:
:.!python -c "print ''hello''"
No deberías pensar que el script que proporcionas actúa como un filtro en la selección de línea. Es decir, su script puede leer de stdin
para operar directamente en las líneas dadas ( .
, %
, ...). Algo más que las tareas más simples, sin embargo, y sería mejor que pusieras los comandos de python en un archivo de script propio.
En Windows, si está editando el script de python, solo haga lo siguiente:
!start python my...
y presione tab
para desplazarse por los nombres de archivo disponibles, hasta que encuentre su coincidencia:
!start python myscript.py
Se ejecutará en una nueva ventana de cmd
. Personalmente, prefiero hacerlo !start cmd
y desde allí ejecute Python, ya que es más fácil depurar los eventuales mensajes de error.
En cualquiera de sus ventanas vim, escriba algo como esto:
for x in range(1,10):
print ''-> %d'' % x
Seleccione visualmente ambas líneas (V para iniciar el modo visual) y escriba lo siguiente:
:!python
Debido a que presionó '':'' en modo visual, eso terminará pareciéndose a:
:''<,''>!python
Presiona enter y la selección se reemplaza por el resultado de las instrucciones de print
. Podría convertirlo fácilmente en un mapeo:
:vnoremap <f5> :!python<CR>
No estoy seguro de su utilidad, tal vez para una lectura adicional:
Puede ejecutar el código, leer la salida del cursor y terminar con u
, suponiendo que está ejecutando el código python. Simple y rápido.
:r !python %
u
Me gusta más el mapeo y la selección en modo visual, como con too-much-php , ¡porque mantiene la base simple!
Según su ejemplo, parece que desea ejecutar un script de Python y hacer que el resultado del script aparezca en el búfer de Vim actual. Si eso es correcto, entonces puedes hacer lo siguiente en la línea de comando en Vim:
%!python -c "for i in xrange(25): print 6*i"
La opción -c
a python
le da una secuencia de comandos para ejecutar. Sin embargo, puede encontrar esta técnica útil solo en casos muy breves, porque a diferencia de otros lenguajes, Python no se presta bien para escribir programas completos, todo en una línea.
Si desea hacer algunas llamadas a python sin compilar vim con el intérprete de python (que le permitiría escribir complementos en Python, y también es necesario para Omnicomplete de todos modos) puede intentarlo así:
:.!python -c "import os; print os.getcwd()"
Eso te diría dónde estás en el disco (ruta actual).
Ahora vamos a enumerar algunas líneas, empezando por un archivo vacío para que podamos ver el resultado fácilmente:
:.!python -c "for i in range(1,101): print i"
(vim numera las líneas de 1 no 0) Ahora tenemos solo el número de cada línea en cada línea hasta la línea 100.
Pongamos ahora un pequeño script en su ruta actual (como se muestra arriba) y ejecútelo, vea cómo funciona. Vamos a copiar pegar este tonto. En realidad, le resultará más útil hacer un script que muestre una línea por línea, pero no tiene que hacer eso ya que este script muestra:
print "hi"
try:
while True:
i=raw_input()
print "this was:",i
except EOFError:
print "bye"
Para que pueda llamar, por ejemplo (imagine que lo llamó "what.py"):
: 10,20! Python what.py
(Tenga en cuenta que la finalización de tabulación de los nombres de archivo funciona, por lo que puede verificar que esté realmente en la ruta)
Como puede ver, cada línea se alimenta al script como entrada estándar. Primero se emite "hola", al final "bye" y en el medio, para cada línea se muestra "this was:" más la línea. De esta forma puede procesar línea por línea. Observe que puede hacer cosas más complejas que procesar línea por línea, realmente puede considerar las líneas anteriores. Para tales cosas prefiero importar sys y hacerlo así:
import sys
print "hello"
for i in sys.stdin.readlines():
i = i.rstrip("/n") # you can also prevent print from doing /n instead
print "here lyeth",i
print "see you"
Espero que ayude.
si ha escrito su secuencia de comandos python en un nuevo búfer [No Name], puede usar lo siguiente:
:0,$!python
cuando tiene un búfer sin nombre, entonces no puede usar ''%'', de ahí la necesidad de 0, $ lo que significa que todas las líneas en el búfer comienzan con la línea cero hasta la última línea
la salida se escribirá en buffer y desafortunadamente no en el final