Как упростить «копировать и вставлять» в Vim? - PullRequest
22 голосов
/ 22 января 2012

Я считаю, что процедура копирования и вставки в VIM очень сложна:

  • Визуальный режим
  • Y
  • p (или смещение p)
  • режим вставки

и если вы неправильно используете клавишу " delete ", вы потеряли содержимое (заменяется символом, который вы удалили)и вы должны заново скопировать его!

Я работаю над vim уже несколько месяцев, мне это нравится, но я ненавижу копировать и вставлять, есть способ упростить это?или какая-то альтернатива?

спасибо

Ответы [ 8 ]

17 голосов
/ 22 января 2012

Vim поддерживает список последних 9 удалений, которые вы сделали в пронумерованных регистрах .Таким образом, "0p вставит самую последнюю вещь, которую вы дернули, "1p вставит вторую самую последнюю вещь, которую вы удалили или изменили (обратите внимание, что это не включает в себя текст, который был просто выдернут), и так далее для регистров 2-9.

Если вы хотите использовать более 9 последних удаленных элементов или если вам нужен простой способ доступа к предыдущим янкам, я бы порекомендовал плагин yankring , который, помимо прочего, позволяет вампросмотрите ваши последние 100 янков и выберите, какой из них вы хотите вставить, с помощью команды :YRShow.

Наконец, если вы хотите вставить, не выходя из режима вставки, вы можете использовать Ctrl-R для вставкисодержимое любого регистра.Таким образом, в режиме вставки, набрав <Ctrl-R>", будет вставлено содержимое безымянного регистра " (куда вставляется восстановленный текст, когда регистр не указан).

11 голосов
/ 22 января 2012

Хотя это не совсем «упрощенно», у вас есть возможность скопировать ваш текст в регистр, отличный от того, куда по умолчанию уходит удаленный текст. Это защитит вас от потери того, что вы скопировали, случайно удалив что-то.

Для копирования в регистр a (в качестве примера) вы должны сделать следующее:

" a y [команда движения]

Затем, чтобы вставить свой текст, вы должны сделать:

" a p

Еще одна вещь, которую вы можете сделать. Если вы хотите вставить в режиме вставки, вы можете нажать ctrl + o и затем ввести свою команду вставки (например, команду регистрации вставки, которую я упоминал выше). Команда ctrl + o эквивалентна нажатию esc , но для одной команды. Подробнее об этом здесь .

Наконец, у вас всегда есть возможность написать скрипт vim, чтобы изменить поведение по умолчанию по своему вкусу (или, возможно, найти плагин, такой как yankring ).


UPDATE

Основываясь на разговоре в комментариях с kellogs, я решил разобраться, как использовать любой регистр для копирования / вставки, но в визуальном режиме для команды копирования (проще визуально увидеть, что вы захватываете). Оказывается, это возможно.

Для копирования в регистр a, но в визуальном режиме:

v (переходит в визуальный режим)

Затем вы делаете то же, что и выше, но сначала делаете команду перемещения:

[команда движения] " a y (выделите ваш выбор с помощью команды движения, затем вставьте в регистр a ).

Вставка выполняется обычным способом, как указано выше ОБНОВЛЕНИЕ .

7 голосов
/ 22 января 2012

Vim не полностью выбрасывает извлеченный текст при удалении чего-либо, он просто переопределяет " регистр. Последний восстановленный текст всегда сохраняется в регистре 0, поэтому вы можете заменить p на "0p в своем рабочем процессе или, что лучше, сопоставить его с ,p и использовать его:

nnoremap ,p "0p
xnoremap ,p "0p

Другой способ - выбросить удаленный текст (удалить его в регистр черной дыры _): "_dd, "_x и так далее. Я лично использую отображение ,d для этого:

nnoremap ,d "_d
xnoremap ,d "_d

В этом случае Vim не отменяет никаких регистров.

В-третьих, используются регистры букв, как предложил @Jason Down.

2 голосов
/ 01 октября 2012

Для меня самым простым решением было создать комбинацию клавиш, которая модально включает или выключает этот побочный эффект удаления.

С моим сценарием я набираю ,, и я нахожусь в режиме «без побочных эффектов», поэтому удаление текста не влияет на мой буфер янки, поэтому я могу свободно и эффективно yank-delete-paste все, что мне нравится ,

Затем, когда все готово, я набираю ,, снова, и vim возвращается к своему поведению по умолчанию с побочными эффектами клавиши удаления.

Я считаю это решение идеальным, потому что мне не нужно думать о буферах каждый раз, когда я хочу скопировать вставку. Смотрите здесь для сценария:

vim переключает режим перезаписи буфера при удалении

2 голосов
/ 22 января 2012

Когда я не хочу менять режимы, я просто использую системный буфер обмена для копирования и вставки.

Или я использую CTRL - Y , если я просто копирую символы из предыдущей строки.

Если вы хотите скопировать содержимое всей строки из другого места в буфере, введите первые несколько символов и используйте CTRL - X CTRL - L .

Для получения дополнительной информации обращайтесь:

1 голос
/ 10 марта 2018

Vi (и Vim) работает совсем по-другому по сравнению с обычным текстовым редактором, таким как Gedit. У этого также есть довольно крутая кривая изучения. Если вы хотите изучить некоторые основные команды, начните с этого интерактивного учебного пособия.

Однако, чтобы ответить на ваш вопрос. Доступ к содержимому системного буфера обмена возможен через регистр «плюс». Таким образом, чтобы вставить что-то из системного буфера обмена, вы можете в обычном режиме нажать: «+ p (Не одновременно, а один за другим).

1 голос
/ 22 января 2012

Ничего особо не упрощать - так работает Vim. Ну, более или менее.

Однако, что касается вашей проблемы удаления (следовательно, замены содержимого регистра) - вы можете использовать YankRing , например. Он обеспечивает некоторую «удобство для пользователя» для операций Vim по вставке и вставке.


Как это работает?

Вы переходите на первую строку и дергаете ее («копировать» в терминах Windows). Затем вы идете на вторую линию и дергаете ее тоже. Тогда вы к седьмой линии и дергайте эту тоже.

Тогда вы идете ... куда угодно и вставляете (!). Вы получаете последнюю ( седьмую ) строку. Нажмите клавишу быстрого доступа, и эта последняя вставка будет заменена предыдущим рывком (строка секунда ). Снова ... первая строка:)

Таким образом, вам не нужно беспокоиться о потере вырванного содержимого, которое, как я понял, было вашей главной проблемой.

0 голосов
/ 22 января 2012

Дело в том, что вы не должны «возвращаться в режим вставки».

Редактирование (восстановление, удаление, замена и т. Д.) Выполняется в обычном режиме, режим вставки предназначен только для набора текста.text.

Если вы находитесь в режиме вставки и хотите повторно использовать текст, уже присутствующий в другом месте в вашем документе, вы можете нажать:

  • <C-n> и <C-p>, чтобы вставить словокоторая начинается с символов слева от курсора
  • <C-x><C-l>, чтобы вставить строку, начинающуюся с символов слева от курсора
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...