Emacs to vim会导致两个制表符

时间:2013-09-03 17:59:56

标签: python vim emacs tabs

我正在编辑一个最初用emacs编写的文件,而我现在正在使用vim。从一个切换到另一个时,我遇到了一个奇怪的问题:

在代码中的一些位置,看似随机,emacs代码中的选项卡相当于两个选项卡(在emacs和python中都是可视的)。但是,在vim中,这些制表符只显示为一个标签。

当我:设置列表时,一些示例将显示为:

    for i in range(total_pairs):$
^Iwhile 1:$
^I    rint = random.randint(0,total_pairs-1)$
^I    if(trialData[rint].cueDir == FORWARD)$
^I^ItrialData[rint].cueDir=BACKWARD$
^I^Ibreak$

虽然它应该显示为:

    for i in range(total_pairs):$
        while 1:$
            rint = random.randint(0,total_pairs-1)$
            if(trialData[rint].cueDir == FORWARD):$
                trialData[rint].cueDir = BACKWARD$
                break$

代码仍以任何一种方式运行,但阅读起来相当烦人。

当我运行:retab时,它用一个标签替换每个^ I,而不是它应该的两个标签。我该怎么做才能用两个标签而不是一个标签替换每个^ I字符。另外,为什么会发生这种情况?

感谢。

2 个答案:

答案 0 :(得分:2)

简单(和推荐)的答案是用4个空格替换每个标签,并设置两个 emacs和vim,以便在按下标签时使用4个空格。

答案 1 :(得分:1)

  

当我运行:retab时,它会用一个标签替换每个^ I,而不是它应该的两个标签。

:retab^I个空格替换每个标签字符(即tabstop)。在您的情况下,tabstop显然设置为4,因此Vim用4个空格替换文件中的每个^I。如果您希望:retab用8个空格替换每个^I,请在set tabstop=8之前使用:retab

要解决实际问题,请不要在Python中使用混合缩进;设置Emacs和Vim以使用空格作为标签。

有关详细信息,请参阅:h expandtab:h tabstop:h softtabstop:h shiftwidth