Как вы можете использовать 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 ]

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

Если вы хотите сделать некоторые вызовы 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"

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

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

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

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

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