0

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

在代码中的某些地方,似乎是随机的,emacs 代码中的选项卡相当于两个选项卡(在 emacs 和 python 中都是可视的)。但是,在 vim 中,这些制表符仅显示为一个制表符。

当我 :set list 时,几行示例将显示为:

    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 字符。另外,为什么会这样?

谢谢。

4

2 回答 2

2

简单(并且推荐)的答案是将每个选项卡替换为 4 个空格,并将emacs 和 vim 设置为按下选项卡时使用 4 个空格。

于 2013-09-03T18:06:26.940 回答
1

当我运行 :retab 时,它会将每个 ^I 替换为一个选项卡,而不是它应该使用的两个选项卡。

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

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

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

于 2013-09-03T18:28:22.587 回答