题 Sublime Text 3,将空格转换为制表符


我知道有很多关于此的帖子,但我无法让它发挥作用。
我用标签进行编码。有没有办法,将空格始终转换为制表符?即在打开和保存文件?有人有个主意吗?

//编辑:
我的愿望是做到这一点 自动! - >打开,保存或动态
有谁知道怎么办?


我试过了 这个

import sublime, sublime_plugin, os

class ExpandTabsOnSave(sublime_plugin.EventListener):
  # Run ST's 'expand_tabs' command when saving a file
  def on_pre_save(self, view):
    if view.settings().get('expand_tabs_on_save') == 1:
      view.window().run_command('expand_tabs')

这是我的用户设置:

{
    "auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",
    "auto_indent": true,
    "detect_indentation": true,
    "draw_white_space": "all",
    "ensure_newline_at_eof_on_save": true,
    "expand_tabs_on_save": true,
    "font_face": "SourceCodePro-Regular",
    "font_size": 10,
    "format_on_save": true,
    "ignored_packages":
    [
        "Vintage"
    ],
    "indent_to_bracket": true,
    "open_files_in_new_window": false,
    "smart_indent": true,
    "tab_size": 4,
    "translate_tabs_to_spaces": false,
    "trim_automatic_white_space": true,
    "trim_trailing_white_space_on_save": true,
    "use_tab_stops": false,
    "word_wrap": false
}

114
2018-03-20 09:57


起源


您发布的插件实际上对我来说在ST3上工作正常,构建3059.你可以打开控制台 Ctrl + ~ 并看看它是否给你任何插件错误?如果你安装了Package Control,你能看到吗? ExpandTabsOnSave 被列为已安装的插件? - Protractor Ninja
疯狂的一个,似乎安装(列在列表包下)和在控制台我找不到任何错误:-( - chris
尝试添加 print("debug") 或类似于插件,以查看它是否正在执行保存。 - Protractor Ninja
omg,它的作品!是Windows机器上的错误目录,软件包列在用户/.../ AppData / Roaming / SublimeText3 / Packages非常感谢! - chris
在运行命令之前,请确保将该视图设置为窗口的活动视图。可能不太可能,但是当您发布它时,它可能会扩展与您尝试保存的页面不同的页面的选项卡。即使使用焦点视图,我认为它有可能存储到错误的文件中,但至少可以将风险降至最低。 - skuroda


答案:


在Sublime Text窗口的右下角,您会看到一个看起来很像这样的缩进指示符:

Indentation options menu

单击它将打开一个菜单,其中包含用于调整缩进首选项的选项,更重要的是,将空格转换为制表符,反之亦然。

下面列出了相同的菜单 View -> Indentation


226
2018-03-20 13:58



是的我知道。我的愿望是自动制作......任何想法? - chris
@chrisツ啊。你可以重新格式化你的问题,使其更明确吗?我错过了你的意思,所以其他人也可能。 - Protractor Ninja
我底部没有状态栏 - 我如何获得它? - geoidesic
这对整个文件都有效,并且可以 不 只在选择上完成。 - not2qubit


在Sublime窗口的底部,您将看到代表您的标签/空间设置的内容。

然后,您将获得一系列选项的下拉列表。您关心的选项是:

  • 将缩进转换为空格
  • 将缩进转换为制表符

将所需的设置应用于整个文档。

希望这可以帮助。


89
2017-11-03 22:27



我希望这可以在线上完成并自动...对于我打开的所有文件。我的意思是:将缩进空间转换为制表符。它将在负载下自动运行:-) - Filip OvertoneSinger Rydlo
我听到你了。我更喜欢标签但是我理解为什么许多代码都是用空格写的。对于空格,IDE之间不会有任何不一致 - 空间是空间是空间。选项卡可以在IDE之间占用可变数量的空格,并使代码看起来很奇怪。 - erier
你好@Green - 什么不起作用?让我们解决这个问题...... - erier


您可能已经知道,您可以自定义缩进设置 Preferences.sublime-settings, 例如:

"detect_indentation": true,
"tab_size": 4,
"translate_tabs_to_spaces": false

这将设置您的编辑器使用4个空格宽的选项卡,并将覆盖导致Sublime与您正在编辑的任何文件的缩进相匹配的默认行为。使用这些设置,重新缩进文件将导致任何空格被替换为制表符。

至于在打开文件时自动重新缩进,这并不是那么容易(但可能不是一个好主意,因为空白更改会对文件差异造成严重破坏)。什么可能是更好的行动方案:你可以 映射重新缩进的快捷方式 并在您打开需要修复的新文件时触发。


57
2018-03-28 04:36





这是一个解决方案,只要您打开文件,它就会自动转换为标签。

创建此文件: .../Packages/User/on_file_load.py

import sublime
import sublime_plugin

class OnFileLoadEventListener(sublime_plugin.EventListener):

    def on_load_async(self, view):
        view.run_command("unexpand_tabs")

注意。它打开后会导致文件处于未保存状态,即使没有发生实际的空格到标签转换...也许有些人可以帮助修复它...


2
2018-05-06 21:24



我想你的意思 .../Packages/User/on_file_load.py不是 .php - Pranav Nutalapati
@PranavNutalapati感谢您的关注。 - TheStoryCoder
好,当然。没问题。 - Pranav Nutalapati
尝试 on_load 代替 on_load_async。 - Pedro Góes


就我而言,这条线解决了我的问题:

"translate_tabs_to_spaces": false

0
2018-03-26 17:08





以下是保存时自动执行的操作方法: https://coderwall.com/p/zvyg7a/convert-tabs-to-spaces-on-file-save

不幸的是,从软件包管理器安装软件包时,软件包无法运行。


-1
2018-02-03 17:25



这恰恰相反。它将标签转换为空格。 - Illya Moskvin