我想在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)可能在yank缓冲区中不要包含\
2)使pyhon脚本在VI中全局可见。现在,它必须与VI文件位于同一文件夹中,否则需要绝对路径
可以通过将脚本放入python网站包并将其导入来适当地完成后一个操作,但是我想,知识渊博的人可能会有更好的主意。我记得通过将python脚本放在特殊的Vi文件夹中看到了这一点。
python代码:
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)
答案 0 :(得分:1)
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。魔法。通过shell命令行传输文本没有麻烦。
或者,您可以从Quickly calculate the total of a column of numbers中选择一种策略。