Як потягнути рядок за певним номером рядка?


41

Скажіть, що я на лінії 20, і я хотів би перетягнути лінію 4, як це зробити?

І так само, як я можу витягнути лінію відносно мого положення курсору, скажімо, на 3 рядки вгору?


Відповіді:


59

Від :help :yank:

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

Отже, щоб вивести рядок 4, слід набрати:

:4yank

Зверніть увагу, ви можете легко зробити це в режимі вставки за допомогою <C-o>; це дозволяє виконати одну команду, після чого повертаєтесь до режиму вставки; наприклад:

<C-o>:4yank

Можна, звичайно, використовувати і інші діапазони. Деякі приклади:

  • Рядки від 1 до 3: :1,3yank
  • Весь буфер: :%yank
  • Від поточного рядка до кінця буфера: :.,$:yank
  • Поточний рядок та наступні 3: :.,+3yank
  • Поточний рядок та попередні 3: :-3,.yank
  • Рядок 3 рядка над поточним рядком: :-3yank

Найбільш корисні речі, які слід пам’ятати про діапазони:

  • Це у формі :line1,line2command.
  • .Є поточним рядком (ви на самому справі можна опустити точку , в більшості випадків, :.,+3yankі :,+3yankте саме)
  • Ви вказуєте лінії відносно поточної позиції за допомогою +nта -n.

Див. Для :help [range]отримання додаткової інформації.


6
Бонусні бали за згадування <Co>, я це зловживаю.
PhilippFrank

7
Варто також відзначити , що ви можете скоротити :4yankз:4y
NewbieOnRails

35

На додаток до відповіді Carpetsmoker, я повинен зазначити дивовижний :help :mі :help :t.

Якщо ви хочете скопіювати рядок 4 праворуч нижче поточного рядка, ви можете зробити це:

:4t.

або якщо ви хочете скопіювати цей рядок прямо над поточним рядком:

:4t-

1

Крім команд екс-режиму , які у вас є ви можете досягти , що він також в командному режимі, наприклад , шляхом: 4GY''- що означає: Гото рядок 4 ( 4G), копіюєте лінію ( Y), і повернення до попереднього рядка ( '').

Ви також можете використовувати позначки стрибків; для вашого другого питання, наприклад: mm3kY'm- що означає: встановити позначку m ( mm), перейти на три рядки вгору ( 3k), yank line ( Y), повернутися до позначки m ( 'm).


1
Використання ``, ймовірно, краща рекомендація, ніж '', оскільки перша повертається до того ж рядка та стовпця. Дітто для `m проти 'm.
Jamessan

Я згоден. (Будь-яка ідея, як створити буквальну задню частину у розміщенні wiki, оскільки вони мають особливе значення?) - Інакше ваш коментар буде служити коригуванням моєї відповіді та підказкою для читачів.
Яніс

Вам потрібно використовувати кілька посилань для розмежування вбудованого коду (cf, daringfireball.net/projects/markdown/syntax#code ). Я знаю, що це працює в питаннях / відповідях, але я не міг змусити його працювати у своєму коментарі.
Jamessan

1

Просто введіть

:4y

до 4 лінії

він перейде до реєстру без назви. Потім (наприклад) ви можете використовувати його, pщоб розмістити його в іншому місці. Ви також можете використовувати [n]p, наприклад, 10p, щоб вставити його 10 разів.

Ви можете помістити його в іменний реєстр, такий як "a" з

:4y a

2
Частина про внесення його до названого реєстру з "ay4 не виглядає правильно. Якщо ви це зробите, vim буде чекати, коли ви скажете" 4 Whats? " у поточному положенні, якщо ви введете / foo <Enter>, воно почне до 4-го наступного появи "foo" тощо.
Дон Хетч

Остання команда повинна прочитати 4G"ayy.
romainl

0

Ви можете зробити

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

Встановлення відносного числа також допомагає переміщуватися між рядками коду.

:set relativenumber

Тепер ви можете скопіювати 5-й рядок над курсором за допомогою:

:-5y <Enter>
:p (to paste)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.