Подтвердить что ты не робот

Как вы можете использовать Python в Vim?

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

%! python для я в xrange (25); print 6 * i\n

Как вы можете делать такие трюки в Vim? [решаемые]

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

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

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

Если я хочу напечатать "Hello" до строк 4,5, 6 и 7, что не так:

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

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

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

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

4b9b3361

Ответ 1

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

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

Визуально выберите обе строки (V, чтобы начать визуальный режим), и введите следующее:

:!python

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

:'<,'>!python

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

:vnoremap <f5> :!python<CR>

Ответ 2

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

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

:%!sort

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

:!sort

Вы можете сортировать строки 5-10 с помощью этой команды:

:5,10!sort

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

bash$ myreverse 'hello world!'
!dlrow olleh

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

:%!myreverse      <- all lines in your file are reversed

Ответ 3

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

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

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

Ответ 5

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

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

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

Ответ 6

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

:r !python %

u

Мне нравится преобразование и выбор в визуальном режиме, например слишком-много-php, потому что он упрощает базу!

Ответ 7

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

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

Ответ 8

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

:0,$!python

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

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

Ответ 9

Если я хочу напечатать "Hello" до строк 4,5, 6 и 7, что не так:

Если вы хотите что-то делать в случайно выбранных местах в вашем файле, вам лучше записывать нажатия клавиш и воспроизводить их. Перейдите к первой строке, которую вы хотите изменить, и нажмите qz, чтобы начать запись в регистр z. Сделайте все изменения, которые вы хотите для этой строки, и снова нажмите q, когда закончите. Перейдите к следующей строке, которую вы хотите изменить, и нажмите @z, чтобы воспроизвести макрос.

Ответ 10

Если вы хотите сделать некоторые вызовы python без компиляции vim с помощью интерпретатора python (это позволит вам писать плагины в Python, а также необходимо для Omnicomplete), вы можете попробовать следующее:

:.!python -c "import os; print os.getcwd()"

Это сообщит вам, где вы находитесь на диске (текущий путь).

Теперь пусть число несколько строк, начиная с пустого файла, чтобы мы могли легко увидеть результат:

:.!python -c "for i in range(1,101): print i"

(число номеров vim от 1 не 0) Теперь у нас есть только количество каждой строки в каждой строке до строки 100.

Теперь помещаем небольшой script в ваш текущий путь (как показано выше) и запускаем его, посмотрим, как он работает. Пусть скопируйте эту глупую. В действительности вы найдете наиболее полезным сделать script, который выводит одну строку на строку, но вам не нужно это делать, поскольку в этом script показано:

print "hi"

try:
    while True:
        i=raw_input()
        print "this was:",i
except EOFError:
    print "bye"

Итак, вы можете позвонить, например (представьте, что вы назвали его "what.py" ):

: 10,20! python what.py

(Обратите внимание на то, что вкладка заканчивается именами файлов, поэтому вы можете проверить ее на самом пути)

Как вы можете видеть, каждая строка подается на script в качестве стандартного ввода. Сначала он выводит "привет", в конце "пока" и между ними, для каждой строки вы выводите "это было:" плюс линия. Таким образом, вы можете обрабатывать строки за строкой. Обратите внимание, что вы можете делать более сложные вещи, чем обрабатывать по строкам, вы можете фактически рассмотреть предыдущие строки. Для таких вещей я бы предпочел импортировать sys и сделать это следующим образом:

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"

Надеюсь, что это поможет.

Ответ 11

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

Ответ 12

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

!start python my...

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

!start python myscript.py

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