20

在 Vim 中,有一个非常好的功能可以查找/替换每行中的第一个匹配项。这实际上是默认行为。如何在崇高文本中获得相同的行为?

我需要能够在每一行中标记/找到第一个(也是唯一的!)字符,例如“=”,以便我可以轻松地标记/复制/剪切该特定字符之前和之后的内容。请注意,每一行中可能有很多这个特定的字符。

具体例子:

我有一个长长的 java 属性列表,格式如下:

my.property.link1=<a href="asdfs">Link 1</a>
my.property.link22=<a href="asdfs">Link 22</a>
my.property.link333=<a href="asdfs">Link 333</a>
my.property.link4444=<a href="asdfs">Link 4444</a>

我想在每行中标记第一个“=”,以便能够选择所有前面的文本(与“=”之前的文本数量无关)来剪切或复制文本。这种行动的粘贴结果将是:

my.property.link1
my.property.link22
my.property.link333
my.property.link4444
4

7 回答 7

36

我实际上写了一个名为 SelectUntil 的崇高插件来解决这个确切的问题:https ://github.com/xavi-/sublime-selectuntil

安装后,您可以执行以下操作

  • 选择您要编辑或部分复制的所有行
  • Cmd/Ctrl+ Shift+ L-- 这会给每一行它自己的光标。
  • 如果您使用的是 OSX ,请按HomeCtrl+将每个光标移至行首A
  • Ctrl/Alt+ Shift+S激活 SelectUntil
  • =通过键入+告诉 SelectUntil 选择直到等号Enter
  • 点击shift+←</kbd> to deselect the equals sign
  • 此时应选择所有属性的名称,以便您可以随意复制/粘贴

体验应该是这样的:

在此处输入图像描述

于 2014-02-19T07:31:50.243 回答
23

假设您有以下文本:

my.property.link1=<a href="asdfs">Link 1</a>
my.property.link22=<a href="asdfs">Link 22</a>
my.property.link333=<a href="asdfs">Link 333</a>
my.property.link4444=<a href="asdfs">Link 4444</a>

Ctrl+ F(或单击查找->查找)

启用正则表达式

在搜索字段中输入:^.*?(?==)

Alt+ Enter(或单击查找全部)

现在之前的所有文本=都被选中了,你只需要复制它。

于 2013-04-16T19:04:17.890 回答
5

[CTRL + A]; [CTRL + Shift + L] ; [家]

制作一个 AutoItInputMacro.exe 映射到 [Home] 1 按按钮 GG 没有重新匹配。

于 2019-03-20T19:48:11.040 回答
3

试过这个,它似乎工作:

使用 ^(.*)(STRING_TO_MATCH) 查找正则表达式

\1 会在你的比赛之前给出所有的东西,\2 会给出比赛本身。

您也可以使用 ^(.*)(STRING_TO_MATCH)(.*) 然后 \3 将是之后的一切。

编辑 - 如果你想选择和复制,我试过这个:^[^CHAR]*

这将找到从队列开头到不包括您的角色的所有内容。从那里您可以右键单击以复制。由于查找面板有焦点,我还没有找到一个按键序列来完成它,也许你可以弄清楚。

于 2013-04-15T14:47:56.857 回答
2

假设您有以下文本:

AAAABBBCCCC
ABC
BBBAAACCC
ABCABCABC

..并且您想用 X 替换每行中第一次出现的 A:

Ctrl+ H(或单击查找->替换)

找什么:A(.*)

用。。。来代替:X\1

然后点击全部替换。

于 2013-04-15T17:34:45.883 回答
0

全选,Ctrl + A然后按Ctrl + Shift + L,最后转到“选择-> 反转选择”,如图所示! 反转选择

于 2016-12-27T17:27:54.187 回答
0

对于这个问题,您可以使用cc.gbc 1/=/ConyEdit(一个插件)的命令行来获取 regex 匹配的第一列之前的文本。

于 2018-07-15T10:00:13.907 回答