Как вы можете использовать Python в Vim?
Я трачу много времени между Vim и Python. Я нахожу это слишком медленным, чтобы вручную скопировать-вставить из Python в Vim и наоборот. Хороший сломанный пример:
%!python для i в xrange(25); print 6*i n
Как вы можете делать такие настройки прямо в Vim? [решена]
[пояснение] мне нужны вещи для Vim, такие как последовательности печати, арифметика... - чего я не могу сделать в Напор.
[?] может кто-нибудь уточнить этот момент: "ваш скрипт может читать из stdin, чтобы работать непосредственно на строках, заданных (.,%, ...)."
[Уточнения]
Если я хочу напечатать "привет" в строках 4,5, 6 и 7, что не так:
: 4-7!питон -с "напечатать " привет""
точка . изменяет текущую строку. Могу ли я печатать на нескольких строках 7, 32 и 99:
: 7,32,99!питон -с "напечатать " привет""
явно не работает. Как?
12 ответов:
в любом из ваших окон vim введите что-то вроде этого:
for x in range(1,10): print '-> %d' % x
визуально выберите обе эти строки (V для запуска визуального режима) и введите следующее:
:!python
потому что вы нажали": "в визуальном режиме, что в конечном итоге будет выглядеть так:
:'<,'>!python
нажмите enter и выбор будет заменен на выход
:vnoremap <f5> :!python<CR>
может ли кто-нибудь развить этот момент: "ваш скрипт может читать из stdin, чтобы работать непосредственно на заданных строках (.,%, ...)."
обычно используется для сортировки строк текста с помощью команды "сортировать", доступной в вашей оболочке. Например, вы можете отсортировать весь файл с помощью следующей команды:
:%!sort
или вы можете отсортировать всего несколько строк, выбрав их в визуальном режиме, а затем набрав:
:!sort
вы можете сортировать строки 5-10, используя это команда:
:5,10!sort
вы можете написать свой собственный скрипт командной строки (предполагая, что вы знаете, как это сделать), который меняет строки текста. Это работает следующим образом:
bash$ myreverse 'hello world!' !dlrow olleh
вы можете применить его к одному из ваших открытых файлов в vim точно так же, как вы использовали
sort
::%!myreverse <- all lines in your file are reversed
из вашего примера кажется, что вы хотите выполнить скрипт Python и вывести вывод скрипта в текущем буфере Vim. Если это правильно, то вы можете сделать следующее в командной строке в Vim:
%!python -c "for i in xrange(25): print 6*i"
The до
python
дает ему скрипт для запуска. Однако вы можете найти этот метод полезным только в очень коротких случаях, потому что в отличие от некоторых других языков, Python не очень хорошо подходит для написания полных программ на одном языке линия.
Я думаю, что вы просто не хватает
-c
флаг. Например::.!python -c "print 'hello'"
вы не должны, что сценарий, который вы предоставляете действует как фильтр на выбор строки. То есть, ваш скрипт может читать из
stdin
для работы непосредственно на заданных линиях (.
,%
, ...). Однако что-то большее, чем самые простые задачи, и вам было бы лучше поместить команды python в собственный файл скрипта.
Вы можете выполнить код, читать вывод на курсор и закончить с
u
, предположим, вы выполняете код python. Просто и быстро.:r !python % u
мне нравится это над отображением и выбором-в-визуальном-режиме, как с too-much-php, потому что он держит базы просто!
Я только что написал следующий модуль, который позволяет редактировать временный буфер в vim непосредственно в интерпретаторе Python.
Если вы написали свой скрипт python в новом буфере [без имени], то вы можете использовать следующее:
:0,$!python
когда у вас нет буфера имен, вы не можете использовать"%", следовательно, нужно 0,$ что означает все строки в буфере, начиная с нулевой строки до последней строки
вывод будет записан в буфер и, к сожалению, не в конце
если я хочу напечатать "привет" в строках 4,5, 6 и 7, что не так:
если вы хотите сделать что-то в случайно выбранных местах по всему файлу, вам лучше записывать нажатия клавиш и воспроизводить их. Перейдите к первой строке, которую вы хотите изменить, и нажмите
qz
для начала записи в регистрz
. Делайте все изменения, которые вы хотите для этой строки и нажмитеq
снова, когда вы закончите. Перейдите к следующей строке, которую вы хотите изменить, и нажмите@z
to повторите макрос.
если вы хотите сделать некоторые вызовы 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.
теперь давайте поместим небольшой скрипт в ваш текущий путь (как показано выше) и запустим его, посмотрим, как он работает. Давайте скопируем вставить этот глупый. На самом деле вы найдете наиболее полезным сделать скрипт, который выводит одну строку на строку, но вам не нужно этого делать, как показывает этот скрипт:
print "hi" try: while True: i=raw_input() print "this was:",i except EOFError: print "bye"
так что вы можете позвонить, например (представьте, что вы назвали его "what.py"):
: 10,20!python what.py
(обратите внимание, что вкладка завершение имен файлов работает, так что вы можете проверить это на самом деле в пути)
как вы можете видеть, каждая строка подается в скрипт в качестве стандартного ввода. Сначала он выводит "привет", в конце" пока "и между ними, для каждой строки вы выводите" это было: "плюс строка. Таким образом, вы можете обрабатывать построчно. Обратите внимание, что вы можете делать более сложные вещи, чем обработка строки за строкой, вы можете рассмотреть предыдущие строки. Для таких вещей я бы скорее импортировал 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"
надеюсь, что это поможет.
Я думаю, что вы действительно хотите это объяснить здесь.
в Windows, Если вы редактируете скрипт python, просто сделайте:
!start python my...
и нажать
tab
для циклического перемещения по доступным именам файлов, пока не будет найдено совпадение:!start python myscript.py
Он будет работать в новом
cmd
окно. Лично я предпочитаю делать!start cmd
и оттуда запустить Python, так как это легче отлаживать от возможных сообщений об ошибках.