2013-04-15 4 views
13

В Vim есть действительно хорошая возможность найти/заменить первое вхождение в каждой строке. Это фактически поведение по умолчанию. Как я могу получить такое же поведение в возвышенном тексте?возвышенный текст выберите сначала в каждой строке

Мне нужно иметь возможность отмечать/находить символ FIRST (и только первый!), Например. '=' в каждой строке, так что я легко могу отметить/скопировать/вырезать то, что было раньше, и что после этого конкретного символа. Имейте в виду, что в каждой строке может быть много этого конкретного символа.

Конкретный пример:

У меня есть длинный список свойств ява в виде:

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 

ответ

16

Предположив у вас есть следующий текст:

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 (или нажмите Find-> Найти)

Позволить регулярные выражения

Введите в поле поиска : ^.*?(?==)

Preess Alt + Введите (или нажмите Найти все)

Теперь выбран весь текст, прежде чем =, нужно просто скопировать его.

+0

Превосходно! Это работает именно так, как я хотел! :) – Hoof

3

Пробовал это и это похоже на работу:

Regex найти с помощью^(. *) (STRING_TO_MATCH)

\ 1 даст все перед матчем, \ 2 дает сам матч.

Вы также можете использовать^(. *) (STRING_TO_MATCH) (. *), А затем \ 3 будет всем после.

Edit - если вы хотите, чтобы выбрать и скопировать, я попытался это: ^[^CHAR]*

Найдет все от начала строки до и не включая свой характер. Оттуда вы можете щелкнуть правой кнопкой мыши, чтобы скопировать. Я не нашел последовательность клавиш, чтобы сделать это, так как панель поиска имеет фокус, может быть, вы можете понять это.

+0

Я не могу заставить работать. Загадайте, что мне нужно сделать выбор после поиска ... – Hoof

+0

видеть мое редактирование выше – NTyler

0

Предположив у вас есть следующий текст:

AAAABBBCCCC 
ABC 
BBBAAACCC 
ABCABCABC 

..и вы хотите заменить каждое первое вхождение А в каждой строке X:

Нажмите Ctrl +H (или нажмите Find-> Заменить)

Найти что: A(.*)

Заменить на: X\1

Затем нажмите, чтобы заменить все.

+0

Это было бы в конечном итоге с: 'X X BBBX x' Вы, вероятно, хотите заменить С: X \ 1 – NTyler

+0

@NTyler Это правда, я забыл о \ 1 ... спасибо ! –

+0

Это работает - когда вы заменяете определенный текст. Тем не менее, я хочу отметить весь текст, предшествующий совпадению, чтобы копировать/вставлять в другой документ ... – Hoof

26

Я на самом деле написал возвышенный плагин называется SelectUntil, что адресует эту точную проблему: https://github.com/xavi-/sublime-selectuntil

После того, как это установка вы можете сделать следующий

  • Выберите все строки вы хотите редактировать или частично копировать
  • Нажмите Cmd/Ctrl +сдвиг + L - это дает каждую строку его собственный курсор.
  • Принесите каждый курсор на начало это линии, нажав Главная или Ctrl + если вы используете OSX
  • Нажмите Ctrl/Alt + Shift, + S для активации SelectUntil
  • Скажите SelectUntil выбрать до тех пор, пока знак равенства, набрав = + Введите
  • Хит сдвиг + , чтобы отменить знак равенства
  • На данный момент имена всех свойств должны быть выбраны таким образом Вы можете копировать/вставить, как вы хотите

Опыт должен выглядеть примерно так:

enter image description here

+2

Это действительно полезный инструмент –

+0

Я согласен, мне жаль, что у меня не было терпения (или уверенности), чтобы писать плагины для возвышенного каждый раз, когда я сталкиваюсь с ситуацией, когда они будут полезны. –

0

Выбрать все с Ctrl + A затем нажмите Ctrl + Shift + L и, наконец, пойти т o «Выбор-> Инвертировать выбор», как изображение et Voila !: Invert Selection

Смежные вопросы