Я хочу заменить несколько строк одновременно с помощью команды VIM Editor

1
104116001|PRODUCT|511|RAMP||2016-03-18|2016-03-23|060.00|1||R|012
104116001|PRODUCT|512|RAMP||2016-03-18|2016-03-23|060.00|1||R|012
104116001|PRODUCT|514|RAMP||2016-03-18|2016-03-23|060.00|1||R|012
104116001|PRODUCT|515|RAMP||2016-03-18|2016-03-23|060.00|1||R|012

Выше я хочу заменить |511|с |211|таким же образом , все |512|- |212| |514|- |214| и самое главное здесь, я не хочу заменить 515- 215(я хочу, чтобы это было то же самое).

И я использовал команду, которую вы упомянули:

:map <leader>fq :%s/a/b/ge <Bar> %s/c/d/ge <Bar> %s/e/f/ge<CR>  

который не работал в моем случае, и любая помощь в этом заметна, спасибо!

saradhi
источник

Ответы:

2

Вам нужно регулярное выражение, которое начинается с 51, а его 3-й символ может быть любым из 1,2 или 4. Затем вы хотите заменить строку, которая соответствует регулярному выражению, следующим образом: первым символом будет 21, а третьим следует быть любым символом, совпадающим с 3-м символом, указанным в регулярном выражении (то есть: без изменений).

%s/51\([124]\)/21\1/g

Здесь [124] означает любое из 1,2 или 4, а \ ([124] \) означает «давайте вспомним символ, который соответствует [124]». В строке замены \ 1 означает «символ, который мы запомнили как первую запоминаемую подстроку» (точнее: подстрока, которая соответствует фрагменту регулярного выражения между первой парой \ (\)).

Гомбай Шандор
источник
1
Это было потрясающе! и я хочу сделать то же самое для 52 серий, таких как 521, 522 .. и 53, 54 серии, а также в одной команде, и, пожалуйста, помогите в этом тоже
saradhi
Вы можете, вероятно, обойтись без /gв конце. Поисковый термин отображается не более одного раза в строке.
Роб Шумлаковски