Як дублювати цілий рядок у Vim на Eclipse?


1624

Як дублювати цілу лінію у Vim аналогічно Ctrl+ Dу IntelliJ IDEA / Resharper або Ctrl+ Alt+ / у Eclipse ?


49
Невже люди більше не запускають вімютора? Це, мабуть, протягом перших п'яти хвилин, як навчитися користуватися Vim.
dash-tom-bang

131
Чи хотіли б ви дублювати цей рядок? Yес Pоренди. :)
Stavr00

3
FWIW За останні 2 місяці я робив роботи з десятка разів, і ця концепція не висвітлюється. Він розповідає, як робити “dd” та “v - navigate - y”, а потім “p”. Тут не вказано, як скопіювати один рядок, не видаляючи його, як тут задано.
danielson317

Відповіді:


2769

yyабо Yскопіювати рядок (мнемоніка: у апк )
або
ddдо г даліть лінії (Vim копіює те , що ви видалені в буфер обміну, як «регістр», як вирізати операції)

тоді

pдо р Асте скопійований або віддалений текст після поточного рядка
або
Pдо р Асте скопійований або віддалений текст до поточного рядка


129
Відмінний момент. Хоча чомусь, я вважаю, що удари y удвічі для мене швидше, ніж SHIFT-y
Mark Biek

25
@camflan Я думаю, що Y має бути "копією від курсору до кінця"
Dzung Nguyen

42
і 2 р. можна скопіювати 2 рядки (і для будь-яких інших росіян)
Амір Алі Акбарі

5
@nXqd: Так, великий відсоток користувачів картає Yна y$. (Відповідно до Dі C; (але не сумісні з Vi (нікого не цікавить.))) Це навіть запропоновано в :help Y.
Аарон Тома

11
Щоб скопіювати два рядки, ще швидше просто перейти yjабо yk, тим більше, що ви не подвоюєтесь на один символ. Плюс yk- це зворотна версія, яку 2yyнеможливо зробити, і ви можете вказати кількість рядків, щоб досягти зворотного, y9jабо y2kтощо. Різниця лише в тому, що ваш рахунок повинен бути n-1загальним для nрядків, але ваша голова може дізнатися, що все одно.
zelk

406

Нормальний режим: див. Інші відповіді.

Ex чином:

  • :t. буде дублювати рядок,
  • :t 7 скопіює його після рядка 7,
  • :,+t0скопіює поточний та наступний рядок на початку файлу ( ,+є синонімом діапазону .,.+1),
  • :1,t$буде копіювати рядки від початку до позиції курсору до кінця ( 1,синонім діапазону 1,.).

Якщо вам потрібно рухатись замість копіювання, використовуйте :mзамість :t.

Це може бути дуже потужним , якщо поєднувати його з :gабо :v:

  • :v/foo/m$ перемістить усі рядки, що не відповідають шаблону "foo", до кінця файлу.
  • :+,$g/^\s*class\s\+\i\+/t.скопіює всі наступні рядки форми class xxxвідразу після курсору.

Довідка: :help range, :help :t, :help :g, :help :mі:help :v


1
Коли ви натискаєте :у візуальному режимі, він перетворюється на '<,'>таким чином, що він попередньо вибирає діапазон рядків, на який перебуває візуальний вибір. Так, у візуальному режимі :t0буде скопійовано рядки на початку.
Бенуа

1
Для запису: коли ви вводите двокрапку (:), ви переходите в режим командного рядка, де ви можете вводити команди Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Команди Ex можуть бути справді потужними та лаконічними. Рішення yyp - це команди "Нормальний режим". Якщо ви хочете скопіювати / перемістити / видалити далекий рядок або діапазон рядків, команда Ex може бути набагато швидшою.
Нільс Бом

7
Не сприймається через проблему з відповіддю як такої (хоча це не спрацювало б для моєї ситуації, я не маю уявлення, номер рядка, на який я хочу скопіювати), а тому, що це дійсно не повинно бути верхньою / прийнятою відповіддю на це поширене запитання.
mjaggard

9
@mjaggard: прийняті відповіді завжди вгорі, незалежно від їх оцінки. Так, я додав цю відповідь як доповнення, і, здається, вона добре підійшла до ОП.
Бенуа

7
:t.- точна відповідь на питання.
Бурак Ердем

294

YPабо Ypабо yyp.


Yяк правило, перестановляється на y$(yank (копія) до кінця рядка (з поточної позиції курсору, а не початку рядка)), хоча. З цим рядком у .vimrc::nnoremap Y y$
Аарон Тома

1
Не забувайте бідного старогоyyP
icc97

253

скопіюйте та вставте у vim

Не стає простішим за це! У звичайному режимі:

yy

потім перейдіть до рядка, до якого потрібно вставити та

p

34
Що ви використали, щоб зробити gif?
Золтан

4
@ Zoltán ви можете використовувати LiceCap, який має невеликі розміри
onmyway133

53

yy

потягне поточний рядок, не видаляючи його

dd

видалить поточний рядок

p

буде putлінія, схоплена будь-яким із попередніх методів


3
Цей прийшов першим, але його дублікат прийнято: stackoverflow.com/a/73357/1438029
Джеффрі Хейл

44

Зробити це:

Спочатку yyскопіюйте поточний рядок, а потім pвставте.


20
Не вводьте пробіл.
Нільс Бом

1
Так, якщо курсор знаходиться в кінці рядка і ви вводите пробіл, як показано на малюнку, ви будете дублювати рядок, на який ви потягнули, на 2 рядки нижче рядка, який ви потягнули.

44

Якщо ви хочете іншим способом:

"ayy: Це збереже рядок у буфері a.

"ap: Це покладе вміст буфера aна курсор.

Існує багато варіацій щодо цього.

"a5yy: Це збереже 5 рядків у буфері a.

Див. " Файли довідки Vim для більш веселощів


Дякую, я використовував це як прив'язку: map <Leader> d "ayy" ap
впр.

39

yyp - запам’ятайте це з «іппі!»

Кілька рядків з числом між ними:

y7yp


17
7yy еквівалентно y7y і, ймовірно, простіше запам'ятати, як це зробити.
сірий

10
y7yp (або 7yyp) рідко корисний; курсор залишається на першому рядку скопійованим, так що p вставляє скопійовані лінії між першим та другим рядком джерела. Для дублювання блоку рядків використовуйте 7yyP
Nefrubyr

@Nefrubyr або :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - вставити після

yyP - вставити раніше


6
Оскільки рядок дублюється, кінцевий результат вмісту однаковий.
Акумен

4
@ABB Однак тут є мініатюрна різниця - на якому рядку буде курсувати ваш курсор.
Мікк

12

Мені подобається: Shift+ v(щоб вибрати весь рядок негайно і дозволити вам вибрати інші рядки, якщо ви хочете), y, p


11

Ви також можете спробувати <Cx> <Cl>, який повторить останній рядок із режиму вставки та відкриє вікно завершення всіх рядків. Він працює майже як <Cp>


Це дуже корисно, але щоб уникнути необхідності натискати багато клавіш, я відобразив це лише на CTRL-L, це моя карта: inoremap ^ L ^ X ^ L
Jorge Gajon

11

Ще одним варіантом буде:

nmap <C-d> mzyyp`z

дає вам перевагу збереження положення курсору.


10

Для того, хто не знає vi, деякі відповіді зверху можуть ввести його в оману такими фразами, як "вставити ... після / перед поточним рядком ".
Це насправді "вставити ... після / перед курсором ".

yyабо Yскопіювати рядок
або
ddвидалити рядок

тоді

pщоб вставити скопійований або віддалений текст після того, як в курсорі
або
Pвставити скопійований або віддалений текст перед на курсорі


Щоб отримати додаткові ключові прив’язки, ви можете відвідати цей веб-сайт: vi Повний список прив'язки ключів


3

1 gotcha: коли ви використовуєте "p" для розміщення рядка, він ставить його після рядка, на якому курсор увімкнено, тому, якщо ви хочете додати рядок після рядка, який ви перебираєте, не переміщуйте курсор вниз по лінії перед тим, як поставити новий рядок.


4
або використовувати капітал P - поставити раніше
Ghoti

3

За замовчуванням є yyp, але я використовую це рендинг протягом року або близько цього і люблю це:

" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv


3

Я знаю, що я спізнююсь на вечірку, але що б там не було; Я маю це у своєму .vimrc:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>

:copyкоманда просто копіює обрану рядок або діапазон (завжди цілі лінії) до рівня нижче номер рядка наведено в якості аргументу.

У звичайному режимі це copy . копіювання цього рядка трохи нижче цього рядка .

А у візуальному режимі він перетворюється на '<,'> copy '> копію від початку вибору до кінця відбору до рядка нижче кінця вибору .


1
↑↑ найкраща відповідь тут!

2

Для тих, хто починає вчитися vi, ось хороше вступ до vi, перерахувавши поруч команди vi для типових рухів курсору GUI Editor Editor та клавіші швидкого доступу. У ньому перераховані всі основні команди, включаючи yy(копіювати рядок) і p(вставити після) або P(вставити раніше).

vi (Vim) для користувачів Windows


1

Якщо ви хочете скопіювати рядок і вставити його одразу нижче поточного типу, як і в Sublime Ctrl+ Shift+ D, тоді ви можете додати це у свій .vimrcфайл.

nmap <S-C-d> <Esc>Yp

Або для режиму "Вставка":

imap <S-C-d> <Esc>Ypa


Це залишає режим вставки, і просто додавання iдо кінця для повторного введення в нього перерветься undo, тому рішення дублювання рядків у режимі вставки не настільки тривіальне, як здається.
DarkWiiPlayer

Для мене це прекрасно працює: imap <S-C-d> <Esc>Ypi вставте режим і nmap <S-C-d> <Esc>Ypв звичайному режимі
jedi

0

Мені подобається використовувати це відображення:

:nnoremap yp Yp

тому що це дозволяє послідовно використовувати поряд із нативною YPкомандою.

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