Как упростить «копирование и вставку» в Vim?

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

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

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

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

спасибо

22 голоса | спросил Alessandro DS 22 Jam1000000amSun, 22 Jan 2012 03:09:42 +040012 2012, 03:09:42

8 ответов


0

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

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

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

ответил David Brown 22 Jam1000000amSun, 22 Jan 2012 07:57:36 +040012 2012, 07:57:36
0

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

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

" a y [команда перемещения]

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

" a p

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

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


UPDATE

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

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

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

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

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

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

ответил Jason Down 22 Jam1000000amSun, 22 Jan 2012 06:46:33 +040012 2012, 06:46:33
0

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

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

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

nnoremap ,d "_d
xnoremap ,d "_d

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

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

ответил ZyX 22 Jpm1000000pmSun, 22 Jan 2012 20:13:35 +040012 2012, 20:13:35
0

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

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

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

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

ответил Johnsyweb 22 Jam1000000amSun, 22 Jan 2012 03:31:20 +040012 2012, 03:31:20
0

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

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


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

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

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

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

ответил Rook 22 Jam1000000amSun, 22 Jan 2012 08:37:38 +040012 2012, 08:37:38
0

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

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

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

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

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

ответил Magnus 1 +04002012-10-01T04:01:56+04:00312012bEurope/MoscowMon, 01 Oct 2012 04:01:56 +0400 2012, 04:01:56
0

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

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

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

  • <C-n> и <C-p>, чтобы вставить слово, которое начинается с символов слева от курсора
  • <C-x><C-l> для вставки строки, начинающейся с символов слева от курсора
ответил romainl 22 Jam1000000amSun, 22 Jan 2012 10:48:51 +040012 2012, 10:48:51
0

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

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

ответил Hrittik Chatterjee 10 MaramSat, 10 Mar 2018 02:44:59 +03002018-03-10T02:44:59+03:0002 2018, 02:44:59

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132