Как продублировать целую строку в Vim на Eclipse?


1624

Как мне продублировать всю строку в Vim аналогично Ctrl+ Dв IntelliJ IDEA / Resharper или Ctrl+ Alt+ / в Eclipse ?


49
Люди больше не запускают vimtutor? Это, вероятно, в течение первых пяти минут обучения, как использовать Vim.
dash-tom-bang

131
Хотите дублировать эту строку? Yэс Pаренды. :)
Stavr00

3
FWIW Я делал vimtutor около десятка раз за последние 2 месяца, и эта концепция не рассматривается. Он рассказывает, как сделать «dd» и «v - navigate - y», за которыми следует «p». Это не говорит, как скопировать одну строку, не удаляя ее, как это спрашивается здесь.
danielson317

Ответы:


2768

yyили Yскопировать строку (мнемоника: у апк )
или
ddк г далить линии (Vim копирует то , что вы удалены в буфер обмена, как «регистр», как вырезать операции)

тогда

pк р Асте скопированный или удаленный текст после текущей строки
или
Pк р Асте скопированный или удаленный текст до текущей строки


129
Отличный момент. По какой-то причине, я считаю, что дважды ударить по y быстрее, чем SHIFT-y
Марк Бик,

25
@camflan Я думаю, что Y должен быть «копировать от курсора до конца»
Дзунг Нгуен

42
и 2yy можно использовать для копирования 2 строк (и для любого другого n)
Амир Али Акбари

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
Отказался не из-за проблемы с ответом как таковым (хотя это не сработало бы для моей ситуации, я понятия не имею, номер строки, на которую я хочу дублировать), а потому, что он ДЕЙСТВИТЕЛЬНО не должен быть верхним / принятым ответом для этого Часто задаваемый вопрос.
Мяггард

9
@mjaggard: принятые ответы всегда наверху, независимо от их оценки. Да, я добавил этот ответ в качестве дополнения, и, похоже, он хорошо подходит для ОП.
Бенуа

7
:t.это точный ответ на вопрос.
Бурак Эрдем

294

YPили Ypили yyp.


Yобычно переопределяется в y$(yank (копировать) до конца строки (от текущей позиции курсора, а не начала строки)). С этой строкой .vimrc::nnoremap Y y$
Аарон Тома

1
Не забывай бедного старикаyyP
icc97

253

скопируйте и вставьте в vim

Не становится проще, чем это! Из обычного режима:

yy

затем перейдите к строке, которую вы хотите вставить и

p

34
Что вы использовали, чтобы сделать подарок?
Золтан

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
frbl

39

yyp - запомни это с "ура!"

Несколько строк с числом между:

y7yp


17
7yy эквивалентен y7y и, вероятно, легче запомнить, как это сделать.
Graywh

10
y7yp (или 7yyp) редко используется; курсор остается на первой скопированной строке, так что p вставляет скопированные строки между первой и второй строкой источника. Для дублирования блока строк используйте 7yyP
Нефрубыр

@Nefrubyr или :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - вставить после

yyP - вставить перед


6
Поскольку строка дублируется, конечный результат содержимого одинаков.
Acumenus

4
@ABB Однако, здесь есть небольшая разница - на какой линии будет стоять ваш курсор.
Микк

12

Мне нравится: Shift+ v(чтобы сразу выделить всю строку и позволить вам выбрать другие строки, если хотите), y, p


11

Вы также можете попробовать <Cx> <Cl>, который будет повторять последнюю строку из режима вставки и выдает окно завершения со всеми строками. Это работает почти как <Cp>


Это очень полезно, но чтобы избежать необходимости нажимать много клавиш, я сопоставил его только с CTRL-L, это моя карта: inoremap ^ L ^ X ^ L
Хорхе Гаджон

11

Другим вариантом будет пойти с:

nmap <C-d> mzyyp`z

дает вам преимущество сохранения позиции курсора.


10

Для тех, кто не знает vi, некоторые ответы сверху могут ввести его в заблуждение такими фразами, как «вставить ... после / перед текущей строкой ».
Это на самом деле "вставить ... после / перед курсором ".

yyили Yскопировать строку
или
ddудалить строку

тогда

pчтобы вставить скопированный или удаленный текст после того, как в курсоре
или
Pвставить скопированный или удаленный текст перед на курсоре


Для получения дополнительной привязки клавиш вы можете посетить этот сайт: vi Полный список привязок клавиш


3

1 уловка: когда вы используете «p», чтобы поместить строку, она помещается после строки, на которой находится курсор, поэтому, если вы хотите добавить строку после строки, которую вы дергаете, не перемещайте курсор вниз на строку прежде чем ставить новую строку.


4
или используйте заглавную
букву

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 с типичным движением курсора в Windows GUI Editor и сочетаниями клавиш. В нем перечислены все основные команды, включая yy(копировать строку) и p(вставить после) илиP (вставить до).

vi (Vim) для пользователей Windows


1

Если вы хотите , чтобы дублировать строку и вставить его сразу ниже текущего Мол, так же , как в возвышенном 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в обычном режиме
джедай

0

Мне нравится использовать это отображение:

:nnoremap yp Yp

потому что это делает его совместимым для использования вместе с нативной YPкомандой.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.