如何在nano中将制表符由8个空格修改为4个空格?

217

nano编辑器中按下TAB键时,光标会跳8个空格,如下所示:

def square(x):
        return x * x
def cube(y):
        return y * y * y

如何将制表符宽度设置为4个空格,以显示如下:

def square(x):
    return x * x
def cube(y):
    return y * y * y

Nano是一个相当基本的编辑器。很有可能它不支持这个功能。 - millimoose
不仅在nano中如此,当我在终端中使用Python解释器时,它也会缩进8个空格。 - Fallen Satan
2
这个问题已经在SuperUser上得到了回答,应该被标记为重复:http://superuser.com/questions/110421/tab-character-width-in-terminal - millimoose
9
@millimoose,更改终端中的制表符不会影响nano。这个问题应该明确涉及nano或设置Python制表符,但不要同时涉及两者,也不要涉及使用“tab”命令交互式设置制表符,因为它不会影响所有程序。 - Chris Page
9个回答

345
如果你使用nano编辑器来编辑类似于python这样的语言(就像你的示例一样),最好将制表符转换为空格。
编辑你的~/.nanorc文件(或创建一个新的)并添加以下内容:
set tabsize 4
set tabstospaces

如果您已经有一个包含制表符的文件,想把它们转换成空格,我建议使用 expand 命令(Shell):

expand -4 input.py > output.py

1
@Alex 请再次确认你的文件名以点号 .nanorc 开头而非 nanorc。它必须放置在你的用户主目录下,即 /home/your-username/.nanorc - Sven Rojek
2
谢谢,最终我创建了另一个 .nanorc 文件,与 /etc 中的不同,将其放置在主目录中,这样就可以工作了。以下是我在新的 .nanorc 文件中包含的唯一 3 行内容,供有兴趣的人参考:set nowrap、set tabsize 4 和 set tabstospaces。 - Alex
15
如果这是你的玩具,你可以使此更改在整个系统范围内生效,只需编辑全局文件 /etc/nanorc。那里还有一些其他选项,你可能会喜欢。 - fcm
1
不,将制表符转换为空格在Python中并不是一个好主意。享受阅读别人缩进1个空格的代码...或者13个空格的代码... - Jeyekomon
1
@Jeyekomon 请查看Python的PEP 8风格指南-制表符还是空格。对于Python来说,缩进大小为4是最常见的。您应该避免与使用1个空格或13个空格缩进编写Python代码的人交往。 - Sven Rojek
显示剩余5条评论

123

命令行标记

man nano 中的描述:

-T cols (--tabsize=cols)
    Set the size (width) of a tab to cols columns.
    The value of cols must be greater than 0. The default value is 8.
-E (--tabstospaces)
    Convert typed tabs to spaces.

例如,要将制表符大小设置为4个空格,将制表符替换为空格并编辑文件“foo.txt”,您需要运行以下命令:
nano -ET4 foo.txt

配置文件

根据 man nanorc

set tabsize n
    Use a tab size of n columns. The value of n must be greater than 0.
    The default value is 8.
set/unset tabstospaces
    Convert typed tabs to spaces.

编辑你的~/.nanorc文件(如果不存在则创建),并添加以下命令。例如:

set tabsize 4
set tabstospaces

Nano启动时将默认使用这些设置,但命令行标志将覆盖它们。


1
好的,没事了。我在 /etc 目录下找到了 nanorc。还是谢谢你。 - Fallen Satan
6
一般情况下,除非您需要进行系统级别的自定义,否则应避免编辑 /etc/nanorc。如果不存在,请创建 ~/.nanorc 并在其中添加您的自定义设置。 - Chris Page
1
请注意,在上面的答案中,您需要添加一行“set tabsize 4”,而不是“set tabspace 4”。 - Thomas N
1
我觉得奇怪的是,这个答案在8年后仍然没有被接受。它真的很有信息量,并且提供了很好的描述。 - Sanguinary
1
别名nano='nano -ET4'也是一个好记的替代方案。 - Aydin K.
显示剩余4条评论

15

在nano 2.2.6中,实现此操作的~/.nanorc中的行似乎是

set tabsize 4

设置tab间距时出现错误: '未知的标记"tabspace"'。


6

链接已失效,你有其他的解释吗? - clubby789
cd /etc; nano nanorc;设置 tabsize 为 2... 不幸的是,这不是 Python 所需要的,Python 需要空格。 - thistleknot

4

对于未来的观众,我的/etc/nanorc文件中靠近第153行有一行代码,它说“set tabsize 8”。可能需要将单词更改为tabsize而不是tabspace。在我将8替换为4并取消注释该行后,问题得到了解决。


你是Caleb Curry吗? - Arkajyoti Banerjee

4
在nano中设置制表符大小为4很容易。以下是一些简单的步骤:
  1. 从主目录进入“etc”目录(文件夹)。
cd /etc
  1. 有一个名为 'nanorc' 的文件需要编辑。您可以通过运行 ls -a 查看文件列表。 使用您喜欢的编辑器(如nano或gedit等)打开该文件。
sudo nano nanorc
  1. 你需要找到一行代码set tabsize 8。默认情况下,tab键的大小设置为8个空格。共有大约300行代码。你可以运行以下命令来查找该行代码的位置而无需滚动:退出(nano中ctrl+Z)并运行以下命令:
grep -n "set tabsize" nanorc

在我的情况下,它是第159行。输出如下:

159:# set tabsize 8
  1. 现在再次打开“nanorc”文件(如步骤2所示)。 找到步骤3中找到的行号。 在nano编辑器中查看行号,按alt+shift+3。 你可能会发现一行类似这样:# set tabsize 8

取消注释该行(删除#),将8改为4并保存(ctrl+o,然后按回车键)。 enter image description here

然后就完成了。 -- 如果您使用nano编写Python脚本,设置制表符大小为4是很有帮助的。

如果不完全生效,请取消下一行的注释。 在我的情况下是第162行,它是“# set tabstospaces”。


3

如果有人偶然看到这个古老的问题...

有一件事情我认为需要说明。

~/.nanorc 用于将用户特定的设置应用于nano,所以如果您正在编辑需要使用sudo nano获取权限的文件,则此方法不起作用。

当您使用sudo时,打开程序时不会加载您的自定义用户配置文件,因为您不是从自己的帐户运行程序,因此不会应用~/.nanorc中的配置更改。

如果您处于这种情况(想要运行sudo nano并使用自己的配置设置),则有三个选择:

  • 在运行sudo nano时使用命令行标志
  • 编辑/root/.nanorc文件
  • 编辑全局配置文件/etc/nanorc

请记住,/etc/nanorc 是一个全局配置文件,因此会影响所有用户,这可能是一个问题或不是一个问题,这取决于您是否拥有多用户系统。

此外,用户配置文件将覆盖全局配置文件,因此如果您编辑/etc/nanorc~/.nanorc的设置不同,当您运行nano时,它将从~/.nanorc中加载设置但是如果您运行sudo nano,则它将从/etc/nanorc加载设置。

对于/root/.nanorc也是如此,当您运行sudo nano时它将覆盖/etc/nanorc

除非您有很多选项,否则使用标志可能是最佳选择。


1

对于MAC Nanos来说,你应该编辑"~/nanorc"配置文件而不是"~/.nanorc"配置文件。


0
如果您想为特定的语法类型(例如python)设置制表符大小,独立于tabsize和tabstospaces之外,可以使用tabgives函数。一个nanorc文件已经预设了如下设置:
# extendsyntax python tabgives "  "

只需取消注释并在引号内键入所需的选项卡即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接