Люди больше не запускают 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к р Асте скопированный или удаленный текст до текущей строки
Отличный момент. По какой-то причине, я считаю, что дважды ударить по 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линий, но ваша голова может узнать , что тем не мение.
Когда вы нажимаете :в визуальном режиме, он преобразуется в '<,'>так, что он предварительно выбирает диапазон линий, на который распространяется визуальный выбор. Таким образом, в визуальном режиме :t0будут скопированы строки в начале.
Бенуа
1
Для записи: когда вы вводите двоеточие (:), вы переходите в режим командной строки, где вы можете вводить команды Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Ex-команды могут быть действительно мощными и краткими. Решения yyp - это команды «Нормальный режим». Если вы хотите скопировать / переместить / удалить удаленную линию или диапазон строк, команда Ex может быть намного быстрее.
Нильс Бом
7
Отказался не из-за проблемы с ответом как таковым (хотя это не сработало бы для моей ситуации, я понятия не имею, номер строки, на которую я хочу дублировать), а потому, что он ДЕЙСТВИТЕЛЬНО не должен быть верхним / принятым ответом для этого Часто задаваемый вопрос.
Мяггард
9
@mjaggard: принятые ответы всегда наверху, независимо от их оценки. Да, я добавил этот ответ в качестве дополнения, и, похоже, он хорошо подходит для ОП.
Yобычно переопределяется в y$(yank (копировать) до конца строки (от текущей позиции курсора, а не начала строки)). С этой строкой .vimrc::nnoremap Y y$
Аарон Тома
1
Не забывай бедного старикаyyP
icc97
253
Не становится проще, чем это! Из обычного режима:
yy
затем перейдите к строке, которую вы хотите вставить и
Да, если курсор находится в конце строки и вы вводите пробел, как показано, вы продублируете линию, которую вы дернули, на 2 строки ниже линии, которую вы дернули.
7yy эквивалентен y7y и, вероятно, легче запомнить, как это сделать.
Graywh
10
y7yp (или 7yyp) редко используется; курсор остается на первой скопированной строке, так что p вставляет скопированные строки между первой и второй строкой источника. Для дублирования блока строк используйте 7yyP
Вы также можете попробовать <Cx> <Cl>, который будет повторять последнюю строку из режима вставки и выдает окно завершения со всеми строками. Это работает почти как <Cp>
Для тех, кто не знает vi, некоторые ответы сверху могут ввести его в заблуждение такими фразами, как «вставить ... после / перед текущей строкой ».
Это на самом деле "вставить ... после / перед курсором ".
yyили Yскопировать строку
или
ddудалить строку
тогда
pчтобы вставить скопированный или удаленный текст после того, как в курсоре или
Pвставить скопированный или удаленный текст перед на курсоре
Для получения дополнительной привязки клавиш вы можете посетить этот сайт: vi Полный список привязок клавиш
1 уловка: когда вы используете «p», чтобы поместить строку, она помещается после строки, на которой находится курсор, поэтому, если вы хотите добавить строку после строки, которую вы дергаете, не перемещайте курсор вниз на строку прежде чем ставить новую строку.
Для тех, кто начинает изучать vi, вот хорошее введение в vi путем перечисления бок о бок команд vi с типичным движением курсора в Windows GUI Editor и сочетаниями клавиш. В нем перечислены все основные команды, включая yy(копировать строку) и p(вставить после) илиP (вставить до).
Если вы хотите , чтобы дублировать строку и вставить его сразу ниже текущего Мол, так же , как в возвышенном Ctrl+ Shift+ D, то вы можете добавить это в ваш .vimrcфайл.
Это оставляет режим вставки, хотя, и просто добавление iдо конца для повторного ввода прерывает его undo, поэтому решение для дублирования строк в режиме вставки не так тривиально, как кажется.
DarkWiiPlayer
У меня это прекрасно работает: в imap <S-C-d> <Esc>Ypi режиме вставки и nmap <S-C-d> <Esc>Ypв обычном режиме
джедай
0
Мне нравится использовать это отображение:
:nnoremap yp Yp
потому что это делает его совместимым для использования вместе с нативной YPкомандой.
Y
эсP
аренды. :)Ответы:
yyили Yскопировать строку (мнемоника: у апк )
или
ddк г далить линии (Vim копирует то , что вы удалены в буфер обмена, как «регистр», как вырезать операции)
тогда
pк р Асте скопированный или удаленный текст после текущей строки
или
Pк р Асте скопированный или удаленный текст до текущей строки
источник
Y
сy$
. (СоответствуетD
иC
; (но не совместимо с Vi (никого не волнует.))) Это даже предлагается в:help Y
.yj
илиyk
, тем более, что вы не удваиваете один символ. Кроме того ,yk
версия назад , что2yy
не может сделать, и вы можете поместить количество строк , чтобы достичь в обратномy9j
илиy2k
, и т.д .. Только разница в том , что ваш счетчик должен бытьn-1
в общей сложностиn
линий, но ваша голова может узнать , что тем не мение.Нормальный режим: смотрите другие ответы.
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
источник
:
в визуальном режиме, он преобразуется в'<,'>
так, что он предварительно выбирает диапазон линий, на который распространяется визуальный выбор. Таким образом, в визуальном режиме:t0
будут скопированы строки в начале.:t.
это точный ответ на вопрос.YP
илиYp
илиyyp
.источник
Y
обычно переопределяется вy$
(yank (копировать) до конца строки (от текущей позиции курсора, а не начала строки)). С этой строкой.vimrc
::nnoremap Y y$
yyP
Не становится проще, чем это! Из обычного режима:
затем перейдите к строке, которую вы хотите вставить и
источник
yy
будет дергать текущую строку, не удаляя ее
dd
удалит текущую строку
p
будет
put
ли линия захвачена любым из предыдущих методовисточник
Сделай это:
Сначала yyскопировать текущую строку, а затем pвставить.
источник
Если вы хотите другой путь:
"ayy
: Это сохранит строку в буфереa
."ap
: Это поместит содержимое буфераa
в курсор.Есть много вариантов этого.
"a5yy
: Это будет хранить 5 строк в буфереa
.Смотрите " Vim файлы справки для большего удовольствия.
источник
yyp - запомни это с "ура!"
Несколько строк с числом между:
y7yp
источник
:.,.+7 copy .+7
: Pyyp - вставить после
yyP - вставить перед
источник
Мне нравится: Shift+ v(чтобы сразу выделить всю строку и позволить вам выбрать другие строки, если хотите), y, p
источник
Вы также можете попробовать <Cx> <Cl>, который будет повторять последнюю строку из режима вставки и выдает окно завершения со всеми строками. Это работает почти как <Cp>
источник
Другим вариантом будет пойти с:
дает вам преимущество сохранения позиции курсора.
источник
Для тех, кто не знает vi, некоторые ответы сверху могут ввести его в заблуждение такими фразами, как «вставить ... после / перед текущей строкой ».
Это на самом деле "вставить ... после / перед курсором ".
yyили Yскопировать строку
или
ddудалить строку
тогда
pчтобы вставить скопированный или удаленный текст после того, как в курсоре
или
Pвставить скопированный или удаленный текст перед на курсоре
Для получения дополнительной привязки клавиш вы можете посетить этот сайт: vi Полный список привязок клавиш
источник
1 уловка: когда вы используете «p», чтобы поместить строку, она помещается после строки, на которой находится курсор, поэтому, если вы хотите добавить строку после строки, которую вы дергаете, не перемещайте курсор вниз на строку прежде чем ставить новую строку.
источник
По умолчанию есть yyp, но я использую эту привязку в течение года или около того, и мне это нравится:
" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv
источник
Я знаю, что опаздываю на вечеринку, но что угодно; У меня есть это в моем .vimrc:
:copy
команда просто копирует выбранную строку или диапазон (всегда целые линии) до уровня ниже номер строки приведены в качестве аргумента.В обычном режиме это
copy .
копирует эту строку чуть ниже этой строки .А в визуальном режиме он превращается в
'<,'> copy '>
копию от начала выделения до конца выделения и строки под концом выделения .источник
Для тех, кто начинает изучать vi, вот хорошее введение в vi путем перечисления бок о бок команд vi с типичным движением курсора в Windows GUI Editor и сочетаниями клавиш. В нем перечислены все основные команды, включая yy(копировать строку) и p(вставить после) илиP (вставить до).
vi (Vim) для пользователей Windows
источник
Если вы хотите , чтобы дублировать строку и вставить его сразу ниже текущего Мол, так же , как в возвышенном Ctrl+ Shift+ D, то вы можете добавить это в ваш
.vimrc
файл.nmap <S-C-d> <Esc>Yp
Или для режима вставки:
imap <S-C-d> <Esc>Ypa
источник
i
до конца для повторного ввода прерывает егоundo
, поэтому решение для дублирования строк в режиме вставки не так тривиально, как кажется.imap <S-C-d> <Esc>Ypi
режиме вставки иnmap <S-C-d> <Esc>Yp
в обычном режимеМне нравится использовать это отображение:
потому что это делает его совместимым для использования вместе с нативной
YP
командой.источник