为新手问题道歉,但我已经阅读了手册this问题,并尝试了几次没有我预期的结果。
所以我使用vim编辑文件(附件)。但是在运行时,我得到了TabError:在缩进错误中不一致地使用制表符和空格。
以下是我的尝试:
:retab
和:x
。再次运行该文件。仍然有TabError消息。:retab!
和:x
。再次运行该文件。仍然有TabError消息。:retab! 4
和:x
。再次运行该文件。这次它有效,但我不明白为什么?另外,在文件中缩进似乎过长。 (我读here编辑器可能会为选项卡显示8个空格)我的问题是:
:retab
,:retab!
和:retab! 4
是什么意思?
为什么:retab
不能处理我的文件?
#!/usr/bin/env python
#Reduce function for computing matrix multiply A*B
#Input arguments:
#variable n should be set to the inner dimension of the matrix product (i.e., the number of columns of A/rows of B)
import sys
import string
import numpy
#number of columns of A/rows of B
n = int(sys.argv[1])
#Create data structures to hold the current row/column values (if needed; your code goes here)
currentkey = None
alist = [] # list for elelents in A
blist = [] # list for elements in B
# input comes from STDIN (stream data that goes to the program)
for line in sys.stdin:
#Remove leading and trailing whitespace
line = line.strip()
#Get key/value
key, value = line.split('\t',1)
print(key, value)
#Parse key/value input (your code goes here)
key = (key.split(',', 1)[0], key.split(',',1)[1])
value = (value.split(',', 1)[0], value.split(',',1)[1], value.split(',',1)[2])
#If we are still on the same key...
if key==currentkey:
#Process key/value pair (your code goes here)
# store all values in a lisl
if value[0]=='A':
alist.append([value[1], value[2]])
else:
blist.append([value[1], value[2]])
#Otherwise, if this is a new key...
else:
#If this is a new key and not the first key we've seen, i.e. currentkey!=None
if currentkey:
#compute/output result to STDOUT (your code goes here)
alist = sorted(alist)
blist = sorted(blist)
newlist = [a[1]*b[1] for a,b in zip(alist, blist)]
res = newlist.sum()
print(currentkey, res)
currentkey = key
#Process input for new key (your code goes here)
答案 0 :(得分:4)
只需在Vim中输入:help retab
即可阅读。我想我无法解释它比帮助更好。也许你错过了可选范围部分;使用%
前缀应用于整个文件。同样有用的是:set list
向你展示每个字符;这将显示标签和行结尾(已:set nolist
}和:set <name>
禁用,没有值可查看当前值,前: set tabstop
或后跟一些要设置的值。
通过显示所有字符,启用和禁用标签扩展到:set expandtab
和:set noexpandtab
的空格,设置tabstop并使用for ex。 :retab! 4
您可以自由选择并仅切换标签和空格,并更改标签列宽度。
此链接vim settings for python也可能有用
答案 1 :(得分:2)
Esc
:%s/\t/ /g
意思是用4个空格替换tab。按回车键 退出
:wq
答案 2 :(得分:1)
如果您复制粘贴的代码并开始编辑它,那么仅尝试运行 :retab
可能不起作用。
您可以先尝试设置 vim/vi 设置:
sudo mkdir ~/.vim && sudo touch ~/.vim/vimrc
来创建设置文件vimrc
以添加以下代码段 set softtabstop=4
set tabstop=4
set shiftwidth=4
set expandtab
:retab