Как вы можете использовать Python в Vim? - PullRequest
51 голосов
/ 02 февраля 2009

Я трачу много времени между Vim и Python. Я считаю слишком медленным копировать и вставлять вручную из Python в Vim и наоборот. Хороший сломанный пример:

%! Python для i в xrange (25); печать 6 * я \ n

Как вы можете сделать такие изменения прямо в Vim? [Решено]

[Уточнение] Мне нужны вещи для Vim, такие как последовательности печати, арифметика ... - вещи, которые я не могу сделать в Vim.

[?] Может кто-нибудь уточнить этот момент: msgstr "ваш скрипт может читать из stdin, чтобы работать непосредственно со строками, заданными (.,%, ...). "

[Дальнейшее уточнение]

Если я хочу вывести «Hello» в строки 4,5, 6 и 7, что не так:

: 4-7! Python -c "print 'hello'"

Точка. изменяет текущую строку Можно ли печатать на нескольких строках 7, 32 и 99:

: 7,32,99! Python -c "print 'hello'"

Очевидно, не работает. Как?

Ответы [ 12 ]

164 голосов
/ 02 февраля 2009

В любом из ваших окон vim введите что-то вроде этого:

for x in range(1,10):
    print '-> %d' % x

Визуально выберите обе эти строки (V для запуска визуального режима) и введите следующее:

:!python

Поскольку вы нажали ':' в визуальном режиме, в итоге это будет выглядеть так:

:'<,'>!python

Нажмите ввод, и выбор заменяется выводом операторов print. Вы можете легко превратить его в отображение:

:vnoremap <f5> :!python<CR>
6 голосов
/ 02 февраля 2009

Может кто-нибудь уточнить этот пункт: «Ваш скрипт может читать из стандартного ввода, чтобы работать непосредственно с данными строками (.,%, ...).»

Одним из распространенных применений является сортировка строк текста с помощью команды «sort», доступной в вашей оболочке. Например, вы можете отсортировать весь файл с помощью этой команды:

:%!sort

Или вы можете отсортировать всего несколько строк, выделив их в визуальном режиме и набрав:

:!sort

Вы можете отсортировать строки 5-10, используя эту команду:

:5,10!sort

Вы можете написать свой собственный скрипт командной строки (предположим, вы знаете, как это сделать), который переворачивает строки текста. Это работает так:

bash$ myreverse 'hello world!'
!dlrow olleh

Вы можете применить его к одному из ваших открытых файлов в vim точно так же, как вы использовали sort:

:%!myreverse      <- all lines in your file are reversed
5 голосов
/ 02 февраля 2009

В вашем примере это выглядит так, как будто вы хотите выполнить скрипт Python, и вывод этого скрипта должен отображаться в текущем буфере Vim. Если это правильно, вы можете сделать следующее в командной строке Vim:

%!python -c "for i in xrange(25): print 6*i"

Параметр -c для python позволяет запустить скрипт. Однако вы можете найти эту технику полезной только в очень коротких случаях, потому что в отличие от некоторых других языков, Python плохо подходит для написания законченных программ в одну строку.

1 голос
/ 09 декабря 2016

если вы написали свой скрипт на python в новом буфере [No Name], тогда вы можете использовать следующее:

:0,$!python

когда у вас нет буфера имен, вы не можете использовать '%', поэтому необходимо 0, $, что означает все строки в буфере, начиная со строки ноль до последней строки

вывод будет записан в буфер и, к сожалению, не в конце

1 голос
/ 18 марта 2013

Я только что написал следующий модуль, который позволяет вам редактировать временный буфер в vim прямо в интерпретаторе Python.

http://philipbjorge.github.com/EditREPL/

1 голос
/ 11 января 2011

Вы можете выполнить код, прочитать вывод на курсоре и закончить с u, предполагая, что вы выполняете код Python. Просто и быстро.

:r !python %

u

Мне это нравится по сравнению с режимом отображения и выбора в визуальном режиме, как с too-much-php , потому что это делает базу простой!

1 голос
/ 02 февраля 2009

Я думаю, вы просто не пропустили флаг -c. Например:

:.!python -c "print 'hello'"

Вы не должны указывать, что предоставленный вами скрипт действует как фильтр при выборе строки. То есть ваш скрипт может читать из stdin, чтобы работать непосредственно с указанными строками (., %, ...). Однако, это не просто простейшие задачи, и вам лучше было бы поместить команды python в собственный файл сценария.

0 голосов
/ 09 августа 2013

В Windows, если вы редактируете скрипт python, просто выполните:

!start python my...

и нажимайте tab для циклического перебора доступных имен файлов, пока не найдете совпадение:

!start python myscript.py

Он запустится в новом cmd окне. Лично я предпочитаю делать !start cmd и оттуда запускать Python, поскольку его легче отлаживать из возможных сообщений об ошибках.

0 голосов
/ 05 февраля 2009

Я думаю, что вы действительно хотите, объяснено здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...