Vim: як вставити блок тексту в кінці декількох рядків?


32

Скажіть, у мене є такий текст тексту:

// Коментар1
// Коментар2
// Коментар3

І я хочу додати кожен із цих рядків до кінця 3 відповідних рядків коду:

foo = 1;
бар = 2;
баз = 3;

Так що кінцевий результат

foo = 1; // Коментар1
бар = 2; // Коментар2
баз = 3; // Коментар3

Чи є простий спосіб зробити це у Vim?


@Flimzy, на жаль ні. Час від часу коментарі, як ваш, з’являються у питаннях Vim, але перевірте це: meta.stackexchange.com/q/25925/160504
sidyll

Краще співтовариство для цього питання - vi.stackexchange.com
thinwybk

Відповіді:


36

Використовуйте режим візуального блоку ( Ctrl+ v), щоб вибрати один набір ліній, потім один yабо dїх.

Потім, якщо ви вибрали рядок foo, bar, baz, використовуйте режим візуального блокування знову, щоб вибрати перший стовпець рядків коментарів, а потім Shift+ pїх на місце (або якщо ви вибрали рядки коментарів, виберіть останній стовпчик baz смуги foo лінії та pїх на місце.

Розвішування позиціонування може зайняти трохи практики, але коли ви отримаєте хитрощі, ви будете літати. Якщо у вас вибраний блок, ви також можете використовувати Shift+ Aдля додавання, наприклад, пробілів до блоку (при додаванні новий текст з’явиться лише у верхньому рядку, але при натисканні клавіші esc він буде магічно відображатися у всіх вибраних рядках) . Аналогічно, Shift+ iзробить те ж саме на початку вибраного блоку в кожному рядку.

Після цього вам потрібно буде прибрати порожні рядки.

Існує також чудовий епізод вимкерів, що демонструє ці методи більш детально.


1
Я вважаю, що це рішення у поєднанні з :set ve=allдуже універсальним. Я особисто використовую плагін UnconditionalPaste ( vim.org/scripts/script.php?script_id=3355 ), оскільки він трохи краще відповідає моїй потребі.
Пітер Рінкер

1

Ну, якщо це легко чи ні, ти мені скажи. Перейдіть до // Comment 1, натисніть, ddщоб видалити. Перейдіть до рядка з foo = 1;і натисніть p, щоб вставити його нижче рядка. Перемістіться вгору fooзнову і натисніть, Jщоб приєднатися до ряду. Тада.


0

Далі буде зроблено саме те, що ви описали:

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

Залежно від того, що вам насправді потрібно зробити (на відміну від прикладу), на практиці може бути більш простим блок-вибір блоку "// Comment1" і т. Д. ( Ctrlv), Yank ( y), перейти до кінця коду блокувати та вставляти.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.