自动检测 Atom 中的 Tab 宽度?

Auto-Detect Tab Width in Atom?

我知道我可以为 所有 文档指定制表符宽度,并且我可以让 Atom 自动检测制表符与 spaces 的用法,但是是否存在自动检测 tab-width?

我正在处理同时使用 2-space 宽度和 4-space 宽度的文件。结合 Atom 与制表符的交互方式(当我换行时自动在前面加上四的倍数并将四个连续的 space 视为单个字符),这会带来非常令人沮丧的体验。

有没有什么简单的方法可以让 Atom 在 4 和 2 宽度的标签之间自动切换?

我编写了一个脚本,用于将文件从一种制表符宽度转换为另一种制表符宽度。 (假设 "tabs" 是空格。)

我认为前几行很好地描述了它的用法,但以防万一;第一个参数必须指定文件的当前制表符宽度。 (您必须自己检查一下。)第二个参数指定所需的制表符宽度。第三个参数是文件名,最后一个参数是修改文件的目标。

例如从 2 宽度更改为 4。 chtabwidth 2 4 "./file.py" "./moddedFile.py"

注意:不要将文件保存到自身。它附加到它正在读取的文件的末尾,并将永远 运行 。 (这是我做的第一件事,在我意识到它挂起的原因之前我制作了一个 20MB 的文件。)实际上,你知道吗,我将添加一个条件以确保它永远不会发生。好了,完成了。

#!/bin/bash

old_width=""
new_width=""
file=""
newfile=""

if [[ "$file" == "$newfile" ]]; then
  echo "Don't save to the same file!!"
  exit
fi

IFS=

while read -r p || [[ -n $p ]]; do
  indent_len=$(echo "$p" | egrep -o "^ *" | tr -d '25' | wc -m)
  tab_num=$(( indent_len / old_width ))
  new_indent_len=$(( tab_num * new_width ))
  new_indent=$(printf '%*s' $new_indent_len '')
  revised=$(echo ${new_indent}$(echo "$p" | egrep -o "[^ ].*$"))
  echo "$revised" >> "$newfile"
done <"$file"

PS。我讨厌 bash 编程。

PPS。零保修;如果您从 Internet 下载的随机代码让您的午餐着火了,请不要怪我。