Подтвердить что ты не робот

Как упростить "копировать и вставлять" в Vim?

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

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

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

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

Благодарю вас

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

" a y [movement command]

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

" a p

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

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


UPDATE

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

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

v (перемещается в визуальный режим)

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

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

Вставка выполняется обычным способом, как указано выше UPDATE.

Ответ 3

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

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

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

nnoremap ,d "_d
xnoremap ,d "_d

В этом случае Vim не будет переопределять любые регистры.

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

Ответ 4

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

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

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

За дополнительной информацией обращайтесь:

Ответ 5

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

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


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

Переходите к строке first и держите ее ( "копировать" в терминах Windows). Затем вы переходите к строке second и держите ее тоже. Затем вы переходите к строке седьмой и держите ее тоже.

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

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

Ответ 6

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

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

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

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

vim toggling buffer перезаписывает поведение при удалении

Ответ 7

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

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

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

  • <C-n> и <C-p>, чтобы вставить слово, начинающееся с символов слева от курсора
  • <C-x><C-l>, чтобы вставить строку, начинающуюся с символов слева от курсора