Обработка буфера vi yank с помощью python - PullRequest
0 голосов
/ 15 февраля 2019

Я хотел бы добавить карту ключей к VI.Идея состоит в том, чтобы набрать текст и передать его в код Python.Впоследствии этот код Python может быть использован для предварительной обработки некоторых манипуляций с дерганным текстом, содержащимся в буфере @"

. Для этого я добавил следующую строку в .vimrc

:map <F2> :echo system("python /tmp/t.py ".shellescape(@")) <Enter>

При нажатии F2 скрипт python запускает код с @" в качестве ввода.Проблема заключается в том, что в восстановленном буфере есть конечная строка \, а в столбце - янк <C-r>V.Буфер выглядит так для ввода столбца

1.233\
1.111\
1.222

Я хотел бы выполнить следующее

1) Не включать \ в буфер янки возможно

2) сделать скрипт pyhon глобально видимым изнутри VI.Прямо сейчас он должен находиться в той же папке, что и файл VI, или необходим абсолютный путь

Последний можно правильно сделать, поместив скрипт в пакеты сайта python и импортировав его, но ядумаю, у более знающих людей могут быть лучшие идеи.Я помню, как сделал это, поместив скрипт python в специальную папку Vi.

код питона:

import sys   

def to_float(v):
   if len(v)>0 and v != "":
      try:
         return float(v)
      except ValueError:
          #print('yanked wrong text 1 "%s" '%v)
          try:
             return float(v[:-1])
          except ValueError:
             #print('yanked wrong text 2 "%s" '%v)
             return 0.
   else :
       return 0.      

def func(v):
  s=0.
  for i in v[1].split():  
    #print('from py >> %s <<'%i) 
    s=s+to_float(i)     
  print(">>>Summ: %17.8E"%s)   

func(sys.argv)

1 Ответ

0 голосов
/ 15 февраля 2019

Python-inside-Vim (при условии, что он правильно настроен).Просто добавьте это в .vimrc (и убедитесь, что вы не добавляете отступ ни к чему между python и EOF):

python << EOF
import vim
def float_or_0(value):
    try:
        return float(value)
    except:
        return 0.0
def sum_column():
    lines = vim.eval('@"').splitlines()
    total = sum(float_or_0(x) for x in lines)
    print(">>>Summ: %17.8E" % total) 
EOF
xmap <F2> y:py sum_column()<Enter>

Выберите столбец и нажмите F2.Магия.Нет проблем с передачей текста через командную строку оболочки.

Или вы можете выбрать одну из стратегий из Быстро рассчитать сумму столбца чисел .

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