Подскажите, а как можно осуществить замену текста на другой в vim?
Например, вот у меня есть код:
var = somefunc(x + y * z);
doSomethingWithVar(2 + var);
И я хочу подставить присваиваимое var значение ( somefunc(x+y*z) ) на место использования, чтобы был такой код:
doSomethingWithVar(2 + somefunc(x + y * z));
Чую, есть простой способ, но я не смог найти. Пока приходится переходить к выражению, копировать его, переходить к var, вставлять буфер, удалять var
быстрая замена в тексте
Модератор: /dev/random
Re: быстрая замена в тексте
malphunction писал(а): ↑25.11.2008 08:32Подскажите, а как можно осуществить замену текста на другой в vim?
Например, вот у меня есть код:
var = somefunc(x + y * z);
doSomethingWithVar(2 + var);
И я хочу подставить присваиваимое var значение ( somefunc(x+y*z) ) на место использования, чтобы был такой код:
doSomethingWithVar(2 + somefunc(x + y * z));
Чую, есть простой способ, но я не смог найти. Пока приходится переходить к выражению, копировать его, переходить к var, вставлять буфер, удалять var
Например так можно во всем документе заменить var на вызов функции:
:%s/\<var\>/somefunc(x\ +\ y\ \*\ z)/g
Впринципе можно и без слэшей:
:%s/\<var\>/somefunc(x + y * z)/g
-
- Сообщения: 3
- ОС: Gentoo Linux
Re: быстрая замена в тексте
Luinnar писал(а): ↑25.11.2008 13:58malphunction писал(а): ↑25.11.2008 08:32
Подскажите, а как можно осуществить замену текста на другой в vim?
Например так можно во всем документе заменить var на вызов функции:
:%s/\<var\>/somefunc(x\ +\ y\ \*\ z)/g
Впринципе можно и без слэшей:
:%s/\<var\>/somefunc(x + y * z)/g
Спасибо, но это не совсем то.
Во-первых, как в командный режим поместить somefunc(x + y * z) -- только разве что набрать всю эту строку? Или есть какой-то способ выделение в команду поместить? Я могу только вручную...
Во-вторых, мне нужно эта замена локально, буквально для пары строк и двух-трех вхождений var.
Например, в том же виндовом нотепаде можно так:
1. выделить (Shift + Ctrl + <стрелка влево>) и скопировать somefunc... в буфер (Ctrl+Ins)
2. перейти к var (ещё 3-4 нажатия)
3. выделить var (Shift+Ctrl+<стрелка влево>)
4. вставить с заменой: Shift+Ins -- при этом выделение заменится на содержимое буфера.
То есть мне нужно именно вот эта возможность из 4-го пункта: замена выделения на содержимое буфера.
Я порылся ещё раз в справке (:h registers), оказывается, можно так сделать:
1-ый вариант: удалить заменяемый фрагмент: dw, вставить ранее скопированное: "0P, при этом удаленный фрагмент будет в ""
2-ой вариант: удалить заменяемый фрагмент без порчи регистров: "_dw, вставить ранее выделенное: P. Замененное будет потеряно.
Но, может, есть непосредственный способ?
Хотя, может, есть более простой способ замены?
Re: быстрая замена в тексте
Если заменять нужно в нескольких местах, я бы всё равно воспользовался командной заменой. Для того, чтобы замена происходила не во всём документе нужно выделить тот блок, в котором вы хотите производить замену (либо мышкой, либо используя клавишу v).
Итак все действия по порядку:
1. Копируем в буфер вторую строчку, т.к. она длиннее первой и набирать её дольше: somefunc(x + y * z).
2. Выделяем фрагмент текста в котором нужно выполнить замену.
3. Не снимая выделения нажимаем двоеточие.
4. Вводим команду замены:
s/\<var\>/somefunc(x + y * z)/g
В последнем пункте вместо набора "somefunc(x + y * z)" вручную нужно вставить эту строку из буфера.
Итак все действия по порядку:
1. Копируем в буфер вторую строчку, т.к. она длиннее первой и набирать её дольше: somefunc(x + y * z).
2. Выделяем фрагмент текста в котором нужно выполнить замену.
3. Не снимая выделения нажимаем двоеточие.
4. Вводим команду замены:
s/\<var\>/somefunc(x + y * z)/g
В последнем пункте вместо набора "somefunc(x + y * z)" вручную нужно вставить эту строку из буфера.
-
- Сообщения: 3
- ОС: Gentoo Linux
Re: быстрая замена в тексте
А, ну так, пожалуй, быстрее. Единственно, что я хотел узнать (но уже узнал из ":h :" ), это как буфер вставлять. Оказалось, вот так: Ctrl+R ". Т.е., чтобы сделать 4-ый шаг, нужно написать: :s/\<var\>/ Ctrl+R " / g . Тогда да, быстро получается. Аналогично, можно и var, если она длинная, вставить.
Re: быстрая замена в тексте
malphunction писал(а): ↑26.11.2008 11:33А, ну так, пожалуй, быстрее. Единственно, что я хотел узнать (но уже узнал из ":h :" ), это как буфер вставлять. Оказалось, вот так: Ctrl+R ". Т.е., чтобы сделать 4-ый шаг, нужно написать: :s/\<var\>/ Ctrl+R " / g . Тогда да, быстро получается. Аналогично, можно и var, если она длинная, вставить.
А ещё, если интересно, то вот несколько строк из моего .vimrc для упрощения работы с буфером:
Код: Выделить всё
set clipboard=unnamed
map <S-Insert> p
imap <S-Insert> <Esc>pa
cmap <S-Insert> <MiddleMouse>
vmap <C-Insert> y
С этими настройками можно копировать клавишей y, вставлять клавишей p, причем используется для этого общий системный буфер, а не чисто vim'овский (за это отвечает set clipboard=unnamed).
А всё остальное, как, наверное, и так понятно, - это <Ctrl>+<Insert>, <Shift>+<Insert> ну и средняя кнопка мышки.