如何在 Sublime Text 3 中切换第一列的注释

如何在 Sublime Text 3 中切换第一列的注释

在 Sublime Text 3 中,Edit->Comment->Toggle Comment(在 Mac 上为command- /)将注释掉当前选择(或当前行),或取消注释,具体取决于其当前状态。它通过在当前行的开头(当前行开始的列中)插入空格和注释起始字符来实现此目的,并保留前导空格。例如,注释掉此行的第四行:

#***************************************************************************
sub invoke
{
    my($self) = @_;

结果是:

#***************************************************************************
sub invoke
{
    # my($self) = @_;

如果它可以将注释字符左对齐,我会非常喜欢它,就像这样:

#***************************************************************************
sub invoke
{
#   my($self) = @_;

有办法吗?谢谢!

答案1

警告:

执行此操作会涉及 Sublime 的核心文件之一。如果您对此感到不舒服,请不要继续。


话虽如此,您要做的变化并不大,而且很容易逆转。别担心,我会让它变得简单。

你需要做的第一件事是安装包控制如果你还没有安装。然后,安装PackageResourceViewer. 打开命令面板,输入prv调出PackageResourceViewer:选项,然后选择PackageResourceViewer: Open Resource。向下滚动一点,选择Default,然后再滚动一点,选择comment.py在 Sublime 中打开文件。现在您可以点击Esc关闭命令面板。前两个函数定义如下所示:

import sublime, sublime_plugin

def advance_to_first_non_white_space_on_line(view, pt):
    while True:
        c = view.substr(pt)
        if c == " " or c == "\t":
            pt += 1
        else:
            break

    return pt

def has_non_white_space_on_line(view, pt):
    while True:
        c = view.substr(pt)
        if c == " " or c == "\t":
            pt += 1
        else:
            return c != "\n"

advance_to_first_non_white_space_on_line()首先,注释掉除最后一条语句之外的所有行return

def advance_to_first_non_white_space_on_line(view, pt):
    # while True:
    #     c = view.substr(pt)
    #     if c == " " or c == "\t":
    #         pt += 1
    #     else:
    #         break

    return pt

继续has_non_white_space_on_line(),注释掉全部以下行:

def has_non_white_space_on_line(view, pt):
    # while True:
    #     c = view.substr(pt)
    #     if c == " " or c == "\t":
    #         pt += 1
    #     else:
    #         return c != "\n"

然后,在语句后创建一个新行return,缩进 4 个空格,并粘贴以下内容:

return view.substr(pt) != "\n"

使整个事情看起来如下:

def has_non_white_space_on_line(view, pt):
    # while True:
    #     c = view.substr(pt)
    #     if c == " " or c == "\t":
    #         pt += 1
    #     else:
    #         return c != "\n"
    return view.substr(pt) != "\n"

就这样!保存文件,然后试着注释掉其中的一些行 - 您将看到所有#注释字符都在第 1 列中。

现在,这显然会改变全部语言,而不仅仅是 Python,所以要做好准备。要撤消更改,只需将两个函数定义替换为上面第一个代码块中的函数定义。哦,要再次访问该文件,您不需要通过 PackageResourceViewer。而是选择Preferences -> Browse Packages...(或者Sublime Text -> Preferences -> Browse Packages...如果您使用的是 OS X)Packages在操作系统的文件管理器(Windows 资源管理器、Finder、Nautilus 等)中打开文件夹。Packages/Default您将在 中找到comment.py,就像您更改的那样。如果您想恢复到以前的状态,只需删除该文件即可(原始文件存储在其他地方,但当 中存在同名文件时,它将被覆盖Packages)。

如果你是真的如果你喜欢冒险,你可以克隆文件,重命名它,并修改它以包含仅使用某些语言进行缩进的逻辑,但这超出了本答案的范围。堆栈溢出如果你想知道如何做到这一点。

答案2

为了实现所有语言而不覆盖任何核心命令,您只需在您的文件夹disable_comment_indent.tmPreferences中创建一个名为(只有文件扩展名很重要,基本名称本身并不重要) (即,其中指的是当您转到“首选项”菜单->浏览包时打开的文件夹)的文件,内容如下:Packages/User/Packages

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>scope</key>
  <string>source</string>
  <key>settings</key>
  <dict>
    <key>shellVariables</key>
    <array>
      <dict>
          <key>name</key>
          <string>TM_COMMENT_DISABLE_INDENT</string>
          <key>value</key>
          <string>yes</string>
      </dict>
    </array>
  </dict>
</dict>
</plist>

相关内容