在Sublime Text 2中,我如何缩进一个在参差不齐的边缘上有多个光标的直列?


33

假设我沿几行有多个游标,如下所示:

foo|
barr|
foobar|
baz|

我如何像这样自动将每行末尾的空白推到平坦边缘?:

foo    |
barr   |
foobar |
baz    |

(在这些示例中,|应该是我的游标。)

当您只是TabSpace从初始安排中得到以下信息时:

foo    |
barr    |
foobar    |
baz    |

这很有用,但不是我想要的。我正在寻找某种键盘快捷键,该快捷键将使我从参差不齐的多光标插入直列缩进。


只需插入一个或两个标签即可吗?
达斯Android

不,但是我可能听不懂。我已进行编辑以澄清我的问题。
GladstoneKeep 2012年

您的编辑描述了Space的功能,并且如果行之间的差异很大,Tab在一定程度上将执行此操作,但是如果它们都非常接近,则在两个选项卡之后,您的光标都应该位于一个制表符上。您可能需要进行一些调整才能使它们全部位于同一制表位上,但这比尝试使用空格进行调整要少。
达斯Android

有点奇怪。按下Tab每行的末尾会使衣衫multi的多光标插入到直列中,但是使用正则表达式无法实现相同的效果。我搜索了尾随空格:\s*$并将其替换为制表符:\t-但\t无法达到与Tab手动按下相同的效果。
amiregelz 2012年

1
仅供参考,我将此作为功能请求发布在Sublime Text 2请求板上。
GladstoneKeep 2012年

Answers:


10

您可以使用wbond的Sublime Alignment

可能需要您将此添加到设置文件(“首选项”>“软件包设置”>“路线”>“设置用户”:

// The mid-line characters to align in a multi-line selection, changing
// this to an empty array will disable mid-line alignment
"alignment_chars": ["=", "|"],
// If the following character is matched for alignment, insert a space
// before it in the final alignment
"alignment_space_chars": ["=", "|"]

替换“ |” 与您要对齐的任何字符。

编辑: 正如mtoast所发现的,添加"\n"到“ alignment_chars”可以达到预期的效果。 可能不需要在“ alignment_space_chars”中添加换行符,并且可能会删除文本。但是,通过有限的测试,我没有发现任何区别。

按住control并单击每一行的末尾。然后按对齐热键(对于linux,默认为ctrl+ alt+ a)。您会发现光标与最远的光标位置对齐。

Edit2:"alignment_space_chars"如果突出显示文本块并且Sublime Alignment无法找到其他要在行上对齐的内容(如等号),则向其中添加换行符将删除文本。

另外,如果Sublime Alignment无法找到其他要对齐的内容,则添加换行符"alignment_chars"将在行尾填充空格(或制表符,具体取决于您的设置),以匹配突出显示的最长行。


1
哇,太好了!我安装了Sublime Alignment软件包,将添加了"\n"(换行符)到我的"alignment_chars",并得到了预期的结果。(注意:我没有将其添加到中"alignment_space_chars",这导致行被删除。)如果您将特定建议("n")添加到您的答案中,我会接受。
GladstoneKeep

真好!对于像我这样的完美主义者来说非常有用的软件包:)
amiregelz 2012年

3
还有一个类似的包:Align Tabular,它稍微灵活一些(您可以在多个字符上对齐)。
d_rail

使用d_rail上面提到的AlignTab时,请记住|由单个`\` 进行转义
用户

我无法相信这没有一百万票。
查尔斯

44

您也可以在不使用外部程序包的情况下使用较小的hack来完成此任务,而只需付出一点点努力即可。这是如何做:

| 代表这些指令中的光标。

  1. 使用Ctrl+点击或选择一个文本块并按Ctrl+ Shift+,在所有需要的行上创建光标L。(选择文档

  2. 在每个单词的末尾添加额外的空格,直到每个光标到达或超过您想要的列的位置为止(与过去的距离无关):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. 可选1)键入任何字符,后跟一个空格;让我们使用c

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. 按下Home可使光标移至各行的开头:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. → (right arrow) 直到光标位于您想要的列的位置:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Ctrl+ Shift+ 选择以下所有空白c,然后按Delete

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. 可选1Delete再次按清除我们在可选步骤中添加的多余空格字符。


1c仅当要保留的行上还有其他内容时,才使用字符后跟空格。没有它,Ctrl+ Shift+ 会选择的线路上的任何附加内容的第一个字,使删除棘手。


2
乍一看这有点扭曲,但这是一个巧妙的技巧。适用于粘贴具有适当对齐方式的列。可以使用text pastry插件粘贴下一列。
用户

1
我使用这种技术已经有一段时间了,但是要小心ctrl+shift+right不能始终如一地对待所有字符,因此最终可能会选择不止空白。
SpareBytes

1
我同意,这是一个非常巧妙的技巧。但是我只是试了一下,最后没有一个字符,然后使用Shift-End Delete它就可以了。它在某些情况下是否起作用,但在其他情况下不起作用?
Septagram 2015年

这就是我一直在做的事情:)
Domino

如果c一行上的单词在另一单词上的结尾之前,则此方法不起作用。这是我现在遇到的问题。某些行没有足够的字符向右滚动,因此当您执行此操作时,它会换行到下一行,仅保留此hack。这是hack,不是有用的万能替代品。
leetNightshade

0

对于那些想缩进除=和以外的字符的人|,我能够安装Alignment包并在其中修改文件,Sublime Text > Preferences > Package Settings > Alignment > Settings - User使其看起来像以下内容:

{
  "alignment_chars": [
    "{create",
   ]
}

然后,我选择以下代码:

  let!(:admin_user) {create(:admin_user, :admin)}
  let!(:another_admin_user) {create(:admin_user, :admin)}
  let!(:superadmin_user1) {create(:admin_user, :superadmin)}
  let!(:superadmin_user2) {create(:admin_user, :superadmin)}
  let!(:nonadmin_user) {create(:admin_user)}

并按Command + Ctrl + A以使其对齐。

  let!(:admin_user)        {create(:admin_user, :admin)}
  let!(:another_admin_user){create(:admin_user, :admin)}
  let!(:superadmin_user1)  {create(:admin_user, :superadmin)}
  let!(:superadmin_user2)  {create(:admin_user, :superadmin)}
  let!(:nonadmin_user)     {create(:admin_user)}

一切都移到了{create文本仍然可以对齐时可以占据的最左列。

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.