升华文字3,将空格转换为制表符


192

我知道有很多关于此的文章,但是我无法使它起作用。
我使用标签进行编码。有没有办法将总是空格转换为制表符?即在打开和保存文件?有人知道吗?

//编辑:
我的愿望是自动执行此操作!->打开,保存或即时运行
有人知道怎么做吗?


我尝试了这个

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
}

您发布的插件实际上在ST3(版本3059)上对我来说工作正常。您可以使用打开控制台,Ctrl + ~看看它是否给您带来任何插件错误吗?并且,如果您安装了Package Control,是否可以查看是否ExpandTabsOnSave列出为已安装的插件?
angerson 2014年

疯狂的一个,似乎已安装(在列表包下列出),并且在控制台中我找不到任何错误:-(
chris

尝试添加print("debug")或类似于插件,以查看插件是否正在执行。
桑格森2014年

天哪,它的作品!是Windows机器上的错误目录,软件包在user /.../ AppData / Roaming / SublimeText3 / Packages中列出。非常感谢!
克里斯

在运行命令之前,请确保将该视图设置为窗口的活动视图。可能不太可能,但是在您发布时,它可能会展开与您要保存的页面不同的页面的选项卡。即使使用焦点视图,我想也有可能将其保存到错误的文件中,但至少可以将风险降到最低。
skuroda 2014年

Answers:


376

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

缩进选项菜单

单击它会打开一个菜单,其中包含用于调整缩进首选项的选项,更重要的是,Convert Indentation to Tabs/Spaces

在此处输入图片说明

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


42
是的我知道。我的愿望是自动执行此操作...有什么想法吗?
克里斯

2
@chrisツ啊。您可以重新格式化您的问题以使其更明显吗?我想念你的意思,其他人也可能想。
angerson 2014年

我的底部没有状态栏-如何获取?
geoidesic

1
这会在整个文件上执行,而不能仅对所选内容执行。
not2qubit

非常好。我还做了'command-a'选择全部,'command- ['取消缩进,然后'edit> line> reindent'修复了文件。我确定这可以内置到宏中。
Brooks DuBois

130

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

然后,您将获得带有多个选项的下拉菜单。您关心的选项是:

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

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

希望这可以帮助。


2
我希望这可以在加载时自动完成...对于我打开的所有文件。我的意思是:将缩进空间转换为制表符。它会自动在加载时运行:-)
Filip OvertoneSinger Rydlo

1
我听到你的声音。我更喜欢使用制表符,但我理解为什么很多代码都用空格编写。有了空格,IDE之间就不会出现不一致的地方-一个空格就是一个空格就是一个空格。制表符可以占用IDE之间可变数量的空格,并使代码看起来很奇怪。
erier 2016年

您好@Green-什么不起作用?让我们解决这个问题吧
erier 2016年

80

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

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

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

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


13

您可以使用命令面板来解决此问题。

步骤1 :(Ctrl + Shift + P激活命令选项板)

第2步:输入“缩进”,选择 "Indentation: Convert to Tabs"


1
优秀的。谢谢。
RJ

最佳解决方案。谢谢!
马修·K

7

就我而言,此行解决了问题:

"translate_tabs_to_spaces": false

4

这是一个解决方案,当您打开文件时,该解决方案将自动转换为选项卡。

创建此文件.../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")

注意。即使没有发生实际的空格到制表符转换,它也会在打开文件后使文件处于未保存状态……也许有些人可以帮助解决该问题……


我认为您的意思.../Packages/User/on_file_load.py不是.php
Pranav Nutalapati

@PranavNutalapati感谢您抓住这一点。
TheStoryCoder

当然可以。没问题。
Pranav Nutalapati

尝试on_load代替on_load_async
PedroGóes18年

3

在保存时自动将空格转换为选项卡,请将以下Python脚本添加到“ $ SUBLIME_HOME $ \ Packages \”中名为“ UnexpandTabsOnSave”的新创建的子文件夹中:

import sublime, sublime_plugin, os

class ConvertSpacesToTabsOnSave( sublime_plugin.EventListener ):
  # Run Sublime's 'unexpand_tabs' command when saving any file
  def on_pre_save( self, view ):
    view.window().run_command( 'unexpand_tabs' )

谢谢您的初始资源。


0

您可以通过以下方式用所有项目文件中的空格替换选项卡:

  1. 全部替换 Ctrl+Shif+F
  2. 设置正则表达式搜索 ^\A(.*)$
  3. 将目录设置为 Your dir
  4. 替换为 \1

    在此处输入图片说明

  5. 这将导致所有项目文件打开,其缓冲区标记为脏。这样,您现在可以选择启用这些下一个Sublime Text设置,以修剪所有尾随空白的文件,并确保每个文件末尾都有新行。

    您可以通过以下菜单启用这些设置:将Preferences -> Settings这些内容添加到设置文件中:

    1. "ensure_newline_at_eof_on_save": true,
    2. "trim_trailing_white_space_on_save": true,
  6. 通过在菜单上打开Sublime Text控制台View -> Show Console (Ctrl+`)并运行以下命令: import threading; threading.Thread( args=(set(),), target=lambda counterset: [ (view.run_command( "expand_tabs", {"set_translate_tabs": True} ), print( "Processing {:>5} view of {:>5}, view id {} {}".format( len( counterset ) + 1, len( window.views() ), view.id(), ( "Finished converting!" if len( counterset ) > len( window.views() ) - 2 else "" ) ) ), counterset.add( len( counterset ) ) ) for view in window.views() ] ).start()
  7. 现在,通过菜单保存所有更改的文件 File -> Save All

0

如果您使用Mac,则只需使用帮助选项(通常是Mac菜单栏上的最后一个选项),然后键入:“制表符缩进”并选择制表符缩进宽度

但通常,您可以遵循以下路径:view-> indentation



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.