Sublime Text 3 - 结束键切换行尾和注释开始

时间:2016-01-08 17:41:50

标签: sublimetext3 sublimetext

如果我没记错的话,在Eclipse IDE中,您可以按 End 键并转到行尾,然后再转到代码行的末尾,然后再开始评论。以下是以|作为光标的示例:

          var str = 'press end to move the cursor here:'| // then here:|

这与按 Home 的方式非常类似,它会一直到行的开头,然后另一个按下将光标移动到代码的开头,如下所示:

|        |var str = 'press home to toggle cursor position';

任何人都知道如何在Sublime Text 3中实现此功能吗?

2 个答案:

答案 0 :(得分:1)

Sublime Text的本地movemove_to命令不支持作为参数的作用域或注释,因此有必要在Python中创建一个插件来实现此行为,并将 End 键绑定到它。

在Sublime Text的Tools菜单中,点击New Plugin。 用以下内容替换内容:

import sublime, sublime_plugin

class MoveToEndOfLineOrStartOfCommentCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        new_cursors = []
        for cursor in self.view.sel():
            cursor_end_pos = cursor.end()
            line_end_pos = self.view.line(cursor_end_pos).end()
            if line_end_pos == cursor_end_pos and self.view.match_selector(line_end_pos, 'comment'): # if the cursor is already at the end of the line and there is a comment at the end of the line
                # move the cursor to the start of the comment
                new_cursors.append(sublime.Region(self.view.extract_scope(line_end_pos).begin()))
            else:
                new_cursors.append(sublime.Region(line_end_pos)) # use default end of line behavior

        self.view.sel().clear()
        self.view.sel().add_all(new_cursors)
        self.view.show(new_cursors[0]) # scroll to show the first cursor, if it is not already visible

保存。 转到Preferences菜单 - > Key Bindings - User并插入以下内容:

{ "keys": ["end"], "command": "move_to_end_of_line_or_start_of_comment" }

当按下 End 键时,它会像往常一样移动到行尾,除非它已经在行的末尾,并且有一个注释,在这种情况下它会转到评论的开头。

请注意,这与您的示例略有不同:

var str = 'press end to move the cursor here:'| // then here:|

因为它会将光标移动到代码末尾的空白之后,如下所示:

var str = 'press end to move the cursor here:' |// then here:|

但它应该为您提供一个工作框架。您可以使用substr的{​​{1}}方法获取特定区域中的字符,这样您就可以非常轻松地检查空格。

答案 1 :(得分:0)

几年后,我偶然发现了这个软件包:https://github.com/SublimeText/GoToEndOfLineOrScope

文档不是很好,因此需要花一些时间进行挖掘和反复试验,但是这里有一个关键的绑定使它可以很好地工作:

{
    "keys": ["end"],
    "command": "move_to_end_of_line_or_before_specified_scope",
    "args": {
        "scope": "comment.line",
        "before_whitespace": true,
        "eol_first": false
    }
},

这将使End键在行尾和注释定界符左侧之间切换,该空格在任何尾随代码的空格之前。它还将先移至代码末尾,然后移至行末,将按键保存在预期的行为所在的位置。显然,调整非常容易。

comment范围(如以上在Keith Hall的回答中所使用的)也有效,但是我不喜欢块/多行注释中的切换行为,因此comment.line是一个不错的发现。