Sublime Text 3:使用制表符缩进时保持整行选定

3

我有一个令我发疯的Sublime Text 3问题。当我通过点击行侧面并拖动来选择多行时,我会按tab键来更正缩进,但接下来我想要将整行移动到另一个位置,却必须重新选择它,因为第一行只选中了文本开始的位置,而没有选中整个行的开始。

让我们看看我是否能够说明这个问题... 下面是我所拥有的这些行:

Text Line 1
Text Line 2

我选择它们(使用*显示选择)

*Text Line 1
Text Line 2*

我将这些行进行了缩进,现在选定的内容如下所示:
    *Text Line1
    Text Line 2*

注意选择从文本开始。我希望选择保持在行的开头,像这样:

*   Text Line 1
    Text Line 2*

我已经到处搜索了,但显然只有我受到了困扰。我使用过的每个代码编辑器都没有按照我想要的方式进行操作。


你的意思是想把整行剪切并粘贴到另一个位置吗?如果是这样,你可以按 CTRL + L 键来选择整行并剪切。或者你也可以先剪切粘贴,然后进行缩进。 - Sascha Wolf
@Zeeker Ctrl+l不起作用,因为它每次选择一个额外的行,这点很好知道。缩进后是我的一种解决方法,但是不必记住特定的顺序会更好。是的,我指的是剪切和粘贴。谢谢。 - BlueCaret
2个回答

4
你可以使用一个小型的Python插件来实现这个功能:
  1. Tools -> Developer -> New Plugin...
  2. Replace the contents with the following:

    import sublime
    import sublime_plugin
    
    
    class IndentSelectWholeFirstLineEventListener(sublime_plugin.EventListener):
        def on_post_text_command(self, view, command_name, args):
            if command_name == 'indent':
                if all(not sel.empty() for sel in view.sel()):
                    if all(view.line(sel.begin()) != view.line(sel.end()) for sel in view.sel()):
                        new_selections = []
                        for sel in view.sel():
                            new_selections.append(sel.cover(view.line(sel.begin())))
                        view.sel().clear()
                        view.sel().add_all(new_selections)
    
  3. Save it in the folder ST suggests, as fix_selection_after_indent.py

这是如何工作的:

在执行indent命令后,如果所有选择都不为空,并且它们都跨越多行,则将这些选择扩展到覆盖每个选择的第一行。


1

有一个解决方法...

有一个叫做FixSelectionAfterIndent的插件可以解决这个问题。我刚发现它(再次),因为SublimeText4也有同样的问题,而我已经忘记了如何在ST3中修复它。所以任何寻找解决这个(非常烦人)问题的人,这里是解决方法。(您可以通过Package Control安装它,但我喜欢在我的答案中放链接,没有特别的原因。)

https://packagecontrol.io/packages/FixSelectionAfterIndent


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接