Подстановка всего от = до конца строки в VIM

Скажем, у меня есть несколько строк, например:

$repeat_on =  $_REQUEST['repeat_on'];    
$opt_days = $_REQUEST['opt_day'];  
$opt_days = explode(",", $opt_days);

... и так далее.

Допустим, я использую визуальный режим для выбора всех строк: как я могу заменить все от = до конца строки, чтобы это выглядело так:

$repeat_on = NULL;    
$opt_days =  NULL;
$opt_days =  NULL;

person CodeCrack    schedule 11.10.2012    source источник


Ответы (2)


С выбранным блоком используйте эту замену:

s/=.*$/= NULL;

Регулярное выражение замены изменяет каждую строку, заменяя все, что находится между = и концом строки, включая =, на = NULL;.

Первая часть команды — это регулярное выражение, соответствующее тому, что должно быть заменено: =.*$.

  • = понимается буквально.
  • Точка . означает любой символ.
  • Таким образом, .* означает: 0 или более любых символов.
  • Это заканчивается $ для конца строки, но на самом деле здесь это не обязательно: попробуйте также без $.

Таким образом, регулярное выражение будет соответствовать региону после первого = в каждой строке и заменит этот регион заменой, то есть = NULL;. Нам нужно включить = в замену, чтобы добавить ее обратно, так как это часть соответствия, которое нужно заменить.

Когда у вас выбран блок и вы нажимаете : для ввода команды, командная строка будет автоматически иметь префикс диапазона для визуального выбора, который выглядит следующим образом:

:'<,'>

Продолжайте вводить приведенную выше команду, и ваша командная строка будет выглядеть так:

:'<,'>s/=.*$/= NULL;

Который применит замену к выбранному визуальному блоку.

Если вам нужно иметь несколько замен в одной строке, вам нужно добавить флаг g:

:'<,'>s/=.*$/= NULL;/g
person pb2q    schedule 11.10.2012
comment
Доп спасибо. Можете ли вы объяснить фактический шаблон reg и как он работает? - person CodeCrack; 11.10.2012

Некоторые альтернативы:

Визуальный блок (быстро)

В первой строке/символе сделайте... Wl<C-v>jjCNULL;<Esc>bi<Space><Esc>

Макро (быстрее)

В первой строке/символе сделайте... qqWllCNULL;<esc>+q2@q

:норм (самый быстрый)

В первой строке сделайте... 3:no<S-tab> WllCNULL;<Enter>

Или, если вы визуально выделили строки, оставьте 3 с начала.

person Conner    schedule 11.10.2012