对新手问题表示歉意,但我已阅读手册this问题,并尝试了几次,但均未获得预期的结果。

因此,我使用vim编辑文件(附加)。但是在运行时,我得到了TabError:缩进错误中的制表符和空格不一致使用。

这是我尝试过的:

  • 用Vim打开文件。键入: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)
    
  • 最佳答案

    只需在Vim中键入:help retab并阅读即可。我认为我无法比帮助更好地解释它。也许您缺少可选的范围部分;使用%前缀应用于整个文件。 :set list也可以向您显示每个字符,它也很有用;这将向您显示制表符和行尾(使用:set nolist禁用)和:set <name>,而没有值可以查看当前值,ex : set tabstop或后面要设置的值。

    通过显示所有字符,使用:set expandtab:set noexpandtab启用和禁用制表符扩展为空格,设置tabstop并用于ex。 :retab! 4,您可以随意移动并从仅制表符和仅空格切换,并更改制表符列的宽度。

    这个链接vim settings for python可能也有用

    关于python - 使用Vim Retab解决TabError : inconsistent use of tabs and spaces in indentation?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48735671/

    10-11 11:51