vim команда «со» (для нескольких строк)

и другие vi-подобные редакторы

Модератор: /dev/random

DONBASS
Сообщения: 50
ОС: macOS

vim команда «со»

Сообщение DONBASS »

Всем доброго времени суток!!!

Подскажите пожалуйста, я делаю так:

Код: Выделить всё

:140co150

Скопирует строку 140 на строку 150.
Как быть если строка 140 мне нужна еще в дув-трех местах, к примеру:

Код: Выделить всё

:140co150,160,170

Через запятую «не работает».
Прямой флеш, тоже.

Код: Выделить всё

:140co150|:140co160|:140co170

Есть другое решение?

Заранее спасибо!!!
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: vim команда «со»

Сообщение ZyX »

DONBASS писал(а):
28.12.2015 22:04
Всем доброго времени суток!!!

Подскажите пожалуйста, я делаю так:

Код: Выделить всё

:140co150

Скопирует строку 140 на строку 150.
Как быть если строка 140 мне нужна еще в дув-трех местах, к примеру:

Код: Выделить всё

:140co150,160,170

Через запятую «не работает».
Прямой флеш, тоже.

Код: Выделить всё

:140co150|:140co160|:140co170

Есть другое решение?

Заранее спасибо!!!
Никогда не задавайте такие вопросы, не объясняя, зачем именно вам это нужно. Ответ сильно зависит от того, что вы хотите добиться копированием и какой источник номеров: в дополнении я бы использовал что‐то вроде for lnum in [150, 160, 170]|call append(lnum, getline(140))|endfor, а руками yy, а затем p в нужных местах.

PS: что такое «прямой флеш?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: vim команда «со»

Сообщение /dev/random »

DONBASS писал(а):
28.12.2015 22:04

Код: Выделить всё

:140co150|:140co160|:140co170

Есть другое решение?

Если вам это нужно для скрипта, то этот вариант, наверное, оптимальный. Если же для ручного использования, то лучше это сделать горячими клавишами, а не командной строкой:

140GY150Gp160Gp170Gp
Спасибо сказали:
DONBASS
Сообщения: 50
ОС: macOS

Re: vim команда «со»

Сообщение DONBASS »

ZyX писал(а):
28.12.2015 22:13
Никогда не задавайте такие вопросы, не объясняя, зачем именно вам это нужно.

Истину говорят: «если вас понимают с полуслова, значит вы уже об этом говорили. Если вас не понимают с полуслова, значит вы что-то не договариваете». Не хотел отвлекать вас чтением лишней писанины… старался излагать кратко. Сори, понял свою ошибку.

/dev/random писал(а):
28.12.2015 22:15
Если вам это нужно для скрипта, то этот вариант, наверное, оптимальный. Если же для ручного использования, то лучше это сделать горячими клавишами, а не командной строкой:
140GY150Gp160Gp170Gp

Нет не для скприпта.
140со160
Пользуюсь часто при написании css.
Если горячими клавишами, получается только чуть-чуть меньше нажатий. Если я нахожусь на 170 и мне надо 140 продублировать на 160, 165, 175… Что я делаю и как это будет выглядеть «руками»:

Код: Выделить всё

:140у
:160
р
:165
р
:175
р

Так как строки выбраны для примера я не рассматриваю вариант перехода от 160 на 165:

Так же можно сделать (при этом оставаясь на редактируемой строке 170):

Код: Выделить всё

:140y|160pu|165pu|175pu

На этом этапе появился вопрос, можно сделать проще?
Этот вариант, просто возможен, я не рассматриваю как приемлемый.

Код: Выделить всё

:140co150|:140co160|:140co170


Ответ я получил большое СПАСИБО, /dev/random, ZyX!!!
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: vim команда «со»

Сообщение ZyX »

DONBASS писал(а):
29.12.2015 14:25
ZyX писал(а):
28.12.2015 22:13
Никогда не задавайте такие вопросы, не объясняя, зачем именно вам это нужно.

Истину говорят: «если вас понимают с полуслова, значит вы уже об этом говорили. Если вас не понимают с полуслова, значит вы что-то не договариваете». Не хотел отвлекать вас чтением лишней писанины… старался излагать кратко. Сори, понял свою ошибку.

/dev/random писал(а):
28.12.2015 22:15
Если вам это нужно для скрипта, то этот вариант, наверное, оптимальный. Если же для ручного использования, то лучше это сделать горячими клавишами, а не командной строкой:
140GY150Gp160Gp170Gp

Нет не для скприпта.
140со160
Пользуюсь часто при написании css.
Если горячими клавишами, получается только чуть-чуть меньше нажатий. Если я нахожусь на 170 и мне надо 140 продублировать на 160, 165, 175… Что я делаю и как это будет выглядеть «руками»:

Код: Выделить всё

:140у
:160
р
:165
р
:175
р

Так как строки выбраны для примера я не рассматриваю вариант перехода от 160 на 165:
Я не зря спросил «какой источник номеров». На самом деле вполне может оказаться, что вместо 160G можно использовать, к примеру, } или ]]. Если номера получены из set number, то можно вместо этого использовать set relativenumber и получать номера для команд вида 5j. Если процедура частая, а строки как‐то выделяются, то можно использовать noremap ,n /next-line-re<CR>.
Так же можно сделать (при этом оставаясь на редактируемой строке 170):

Код: Выделить всё

:140y|160pu|165pu|175pu

На этом этапе появился вопрос, можно сделать проще?
Этот вариант, просто возможен, я не рассматриваю как приемлемый.

Код: Выделить всё

:140co150|:140co160|:140co170


Ответ я получил большое СПАСИБО, /dev/random, ZyX!!!



Если это CSS, то ]] и ][ вам, скорее всего, помогут: они для перемещений между секциями вида

Код: Выделить всё

{ /* Начало секции: { первый символ в строке */
    some
    text
} /* Конец секции: } первый символ в строке */
Спасибо сказали: