Як потягнути певний рядок, не переміщуючи курсор у vim?


39

Наприклад

alt текст

Як я можу витягнути та вставити рядок 4 лише до рядка 12, не переміщуючи курсор до рядка 4?

alt текст


Я відповів на вашу базу запитань про те, що "смикай мене!" знаходиться на рядку 4. На другому екрані екрана він з’являється у рядку 5.
Луї Салін

Дякую @Louis за відповідь. Я оновив скріншот.
Лазер

Відповіді:


51

Якщо курсор вже на лінії 12, то простий

: 4р
П

робить це для мене.


1
Приємно! Чи існує еквівалент x? Коли я намагаюся, :4xя отримую E140: Use ! to write partial buffer. Дякую!
dotancohen


@dotancohen:4d
n.st

Чи є хороший спосіб зробити це з відносним номером рядка?
TrungDQ

При відносних числах просто використовуйте + і -. Отже -4 - чотири ряди над курсором і +4 - чотири ряди під ним.
rickythefox

10

Як щодо цього: Курсор на лінії 11, ви перебуваєте в режимі "vi".

:4co.<return>

Ви, мабуть, також можете це зробити з малюнком:

:/^Yank/co.<return>

Ви можете використовувати "mo" (переміщення) замість "co" (копію), щоб просто перемістити рядок, а не потягнути і поставити.


1
Ще коротше ( t як команда копіювання - ліворуч від ed)::4t.
tarleb


8

Спробуйте:

:4co11

Ви можете використовувати аргумент, 0щоб вставити рядок 1. Це також буде працювати з діапазонами:

:m,n co k

скопіює лінії mчерез nдо лінії k+1. Крім того, не має значення, де ви знаходитесь у буфері. Команда move,, mпрацює аналогічно.


2

Це слід зробити:

:4,12y
p
k

1
Ні, ця лінія янців налічує від 4 до 12.
Лазер

Я мав на увазі скопіювати та вставити рядок 4, до рядка 12.
Lazer

Відредаговано. Це те, чого ти хотів?
Умань

2

Інші вже згадували найбільш прямий метод цього, який є :4y, але я хочу додати дві примітки про це, які можуть бути корисними:

По-перше, якщо ви введете, :help rangeви дізнаєтесь про використання діапазонів для застосувань до команд стилю Ex. ДУЖЕ корисний у багатьох випадках і набагато більш універсальний, ніж використання номерів рядків. Наприклад, якщо ви хочете вирвати перший рядок, починаючи з "yank" після початку документа (навіть якщо він знаходиться в першому рядку), використовуйте :0/^yank/y. Найпотужнішою частиною діапазонів є можливість їх комбінування, наприклад, :./^Chapter/+50?Pete?dозначає "Знайти наступний рядок, щоб почати слово" Глава "(шукаючи вперед від поточного рядка), потім перескочити на 50 рядків вперед та шукати слово Піт назад, і видаліть перший рядок, в якому ви його знайдете. " За винятком того, що він фактично не переміщує курсор, він просто робить те, що ви йому говорите.

(Я використовував цей тип специфікації діапазону для автоматичного створення документально створення документації, що передбачає пошук імені функції під курсором, потім пошук вперед до наступного рядка, який сказав "Опис", і прив'язування до конкретного реєстру ... тощо.)

Інша порада - це те, що ви повинні знати про стрибки. Введіть, :help jump-motionsщоб дізнатися про це повністю, але спосіб, який це стосується тут, полягає в тому, що ви можете перейти до лінії 4, потягнути її, а потім ПОВЕРНУТИСЯ 4Gyy''(або використовувати зворотні посилання замість апострофа, щоб повернутися до точної вихідної позиції, а не просто ту саму лінію ви почали о.)


2

Найкоротший:

:1t. копіює перший рядок нижче поточного.

З діапазонами: :1,4t.копії рядка від 1 до 4 (включно) нижче поточного.

Також можливі відносні номери рядків:

:-1t. копіює попередній рядок нижче поточного.

У вашому прикладі :4t-1буде скопійовано четвертий рядок нижче потрібного рядка.

Примітка: :tсинонім :co[py]команди.

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