The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"vi replace"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на рабочей станции (Консоль)
Изначальное сообщение [ Отслеживать ]

"vi replace"  +/
Сообщение от oklas (ok) on 19-Апр-13, 00:29 
Очень частая операция при редактировании кода - замена некоторых кусков текста другим.
Интересует кто как делает replace, в первую очередь в чистом vi но и в vim тоже.
Тот vi что у меня, по "<reg>d<move> делает то же что и d<move> (в основной буфер, перезаписывая то что там есть) поэтому вставка возможна только как "<reg>P, в качестве регистра используем p
Сравним, заменить слово, dw"pP против ctrl-shift-[->] shift-ins в notepad.
предварительно подготовить буфер тоже проигрывает, собственно не порядок :(
Важно что замена по regexp подходит не всегда, бывает удобно использовать удаление именно с командой перемещения затем вставить из буфера.
Тоесть хочется аналог виндового cut-and-paste, кто как пользуется если такая необходимость возникает?
Ответить | Правка | Cообщить модератору

Оглавление

  • vi replace, pavlinux, 00:47 , 19-Апр-13, (1)  
    • vi replace, oklas, 01:13 , 23-Апр-13, (2)  
      • vi replace, pavlinux, 04:09 , 23-Апр-13, (3)  
        • vi replace, oklas, 01:00 , 24-Апр-13, (4)  
  • vi replace, oklas, 01:02 , 24-Апр-13, (5) +1  
    • vi replace, pavlinux, 02:45 , 26-Апр-13, (6)  

Сообщения по теме [Сортировка по времени | RSS]


1. "vi replace"  +/
Сообщение от pavlinux (ok) on 19-Апр-13, 00:47 
> Тоесть хочется аналог виндового cut-and-paste,

<Esc>v<Down/Up>dp - (v)выделить, (d)удалить, (p)вставить.

кто как пользуется если такая необходимость
> возникает?

http://vimdoc.sourceforge.net/htmldoc/usr_toc.html

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "vi replace"  +/
Сообщение от oklas (ok) on 23-Апр-13, 01:13 
>> Тоесть хочется аналог виндового cut-and-paste,
> <Esc>v<Down/Up>dp - (v)выделить, (d)удалить, (p)вставить.

Спасибо за ответ, но проблему replace к сожалению не решает. :(
то что Вы предложили позволяет размножить некий кусок, добавляя
его по тексту, но не замещая некие куски, в том то и дело
что эти куски приходится еще раз обходить или до вставки или после
и удалять. А хочется замену.
Тоесть в блокноте:
1. взял в буфер текст1    # ctrl-c
2. выделил текст2         # shift-[->]
3. вставил текст1         # shift-Ins или ctrl-v
4. выделил текст3         # shift-[->]
5. вставил текст1         # shift-Ins или ctrl-v

Для vi(vim) невозможен этап 2. там нет понятия выделить,
хотя можно какбы выделить с переходом в режим вставки -
(например заменить юзера в мыле можно так [esc]ct@ ),
надо бы ввести команду перемещения и вставки из буфера
поверх текста указанного этим перемещением, не теряя содержимого
буфера, (см команды из первого поста)
Такая простая и очень часто используемая операция легко реализуемая
в блокноте, хочется верить есть и в vi.
Даже команда-<c> удаляет в буфер, даже такой изврат: [esc]ct@[space][backspace][esc]p
не делает того что надо так как в буфере будет хлам вырезанный команой <c>
приходится юзать именованные буферы (см первый пост),  

Уважаемые профессионалы - пользователи vi(vim), буду одинаково рад решению или
подтверждению что по Вашему мнению нормального решения для описанной задачи нет.
( [esc]:%s///gc не подходит )

Просто выскажите свое мнение, и кто что использует в таких случаях.
( Просьба не упоминать eclipse/emacs/msvs и т.п. речь только о vi/vim )

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "vi replace"  +/
Сообщение от pavlinux (ok) on 23-Апр-13, 04:09 
> Просто выскажите свое мнение

Не нужен те vi. Юзай nano/joe/mcedit ...

> Тоесть в блокноте:

То есть мануал читать не хотим?!

> 1. взял в буфер текст1    # ctrl-c

"Ayy
> 2. выделил текст2         # shift-[->]

"B v -> y
> 3. вставил текст1         # shift-Ins или ctrl-v

"Ar
> 4. выделил текст3         # shift-[->]

v ->
> 5. вставил текст1         # shift-Ins или ctrl-v

"Ap

" - это именнованый буфер, можешь ремапнуть клавиши на комбинацию Shift-Ins/Del

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "vi replace"  +/
Сообщение от oklas (ok) on 24-Апр-13, 01:00 
> Не нужен те vi. Юзай nano/joe/mcedit ...

без комментариев

> То есть мануал читать не хотим?!

без комментариев

именованный буфер уже предлагался, в первом посте
>>>> dw"pP против ctrl-shift-[->] shift-ins

     ^^^^^ - много нажатий - 5, для замены слова

проблема в том что и vi и vim неудаляют/замещают в именованный буфер
без затирания основного безымянного буфера,

> можешь ремапнуть клавиши на комбинацию Shift-Ins/Del

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "vi replace"  +1 +/
Сообщение от oklas (ok) on 24-Апр-13, 01:02 
Да, решение полностью такое:
Будем использовать именованый буфер h
переопределяем например [ins] как "hP это сокращает выбор буфера на одно нажатие
и заодно вставляеь итого два нажатия.
если редактировать много то можно написать еще ремап
или если часто юзаемый комп то прописать в конфиг vi
еще один длинный ремап переноса неименованного буфера
в именованный с именем h например на [del]
( использует метки с именами h и g )

макросы:
[ins] "hP
[del] mhGo!!^[PmgG$"hd`gdd`h
    где ^[ это [esc] вводить так ctrl-v,[esc]
    [ins] и [del] тоже через ctrl-v

пользуемся так:
<copy><move>[del] - подготавливаем то что надо.
<del><move>[ins]<paste> - удаляем и вставляем то что надо

напримере того, что было в исходном топике:

выделение размножаемого слова (cut/copy):
notepad:  ctrl-shift-[->] ctrl-ins   нажатий: 2 клавиш: 5
vi без макросов: "hyw    нажатий: 5 клавиш: 5
vi с макросами: yw[del]    нажатий: 3 клавиш: 3

собственно замена например четырех слов (paste/replace)
notepad:  ctrl-shift-[->] [->] [->] [->] shift-ins   нажатий: 5 клавиш: ~8
vi без макросов: d4w"hP    нажатий: 6 клавиш: 6
vi с макросами: d4w[ins]    нажатий: 4 клавиш: 4

Ага теперь он не отстает и при replace, и это в простых командах перемещения
А с учетом того арсенала команд перемещения включая перемещения
по опорным сиволам и по регулярным выражениям, и использование повторителей
количество нажатий уменьшается в разы и десятки раз по сравнению
с большинством других редакторов

предлагаемые макросы протестированы в vi и в vim
кому понравилось приятного использования

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "vi replace"  +/
Сообщение от pavlinux (ok) on 26-Апр-13, 02:45 
Есть такая клавиатура - Sun Keyboard Type 6, там есть левая доп. раскладка с нужными кнопками :)

http://xahlee.info/kbd/i/kb/sun_keyboard_left.jpg

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру