2016-10-01 3 views
4

Этой командойВыполнить две команды в одной строке в VI редакторе

%s#^#/* 

и этой команде

%s#$#*/ 

прекрасно работает в VI редакторов на Ubuntu 14.04, когда я исполняю их отдельно друг за другой.

Что мне нужно выполнить их в одной строке, как

%s#^#/* <bar> %s#$#*/ 

Я также попытался | и ; и CR в качестве разделителя и всегда получают ошибка 488 отставая символ

ответ

2

В моей ВИМ 7.4 патч 769 это работает очень хорошо.

:%s/foo/FOO/ | %s/bar/BAR/ 

Похоже, что вы упустили окончательный символ разделителя из ваших замещений. Vim не знает, где заканчивается ваша строка замены, не имея в ней завершающих символов #. При обычной команде одной подстановки vim обрабатывает конец команды в качестве разделителя-разделителя, если его не найти.

Например, он работает, если опустить терминатора в последней подстановки команды:

:%s/foo/FOO/ | %s#bar#BAR 

И, наконец, быстрый наконечник относительно ваших сабвуферов. Вы можете обернуть строку в тексте с помощью одной подстановки с помощью некоторой основной магии группы захвата. Совпадение по всей линии и использование & на замену для повторного использования совпадающего текста:

:s#.*#/* & */ 
+0

Спасибо. Ваш быстрый совет - это то, что я искал. Конечный разделитель позволяет выполнять команды цепочки, но не для косой черты/как вставки. Это:% s/foo/f/o/| :% s/bar/b/r/и это:% s/foo/f/\/o/| :% s/bar/b/\/r/приводит к той же ошибке 488. Как избежать косой черты? – qupear

+1

@ user2661175: должен хорошо работать. Я думаю, что у вас есть опечатка в последнем суб; одна дополнительная косая черта. Это работает для меня: ': s/foo/f \/o/| с/бар/б \/г/' – progo

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