Вот как я обычно копирую блок текста или кода:
- Выберите блок с помощью Visual mode ( V) и удалите его с помощью d; или если это просто одна строка, просто используйте dd.
- Идите туда, где я хочу, чтобы текст был, я слишком глуп, чтобы помнить разницу между pи P, поэтому я понимаю это примерно в 50% случаев. (если я ошибаюсь: попробуйте снова).
- Иногда отступ требует корректировки, поэтому я Vснова перехожу в визуальный режим и снова выбираю тот же блок, и использую >или, <чтобы это исправить.
Есть ли более простой способ? В некоторых редакторах я видел, что вы можете как бы «взять» блок текста и переместить его; Вот пример из Emacs (но я также видел это в других редакторах):
Или, может быть, есть другой (даже лучше) способ?
cut-copy-paste
visual-mode
Мартин Турной
источник
источник
]p
или[p
вместоp
илиP
. Таким образом, вставленный вами блок будет автоматически иметь отступ.Ответы:
Для этого есть плагин: dragvisuals.vim .
По умолчанию он не привязывает никаких клавиш, поэтому вам придется сделать это самостоятельно. Мне нравится отображать их на Control+ Arrow key:
Он также поставляется с бонусным ключом для дублирования текущего выбора:
Преимущества этого плагина перед другими ответами:
Еще один полезный трюк, дополняющий это, - это следующие сочетания клавиш:
Это позволит повторно выбрать последний визуальный выбор после использования >в визуальном режиме, чтобы вы могли легче настроить выравнивание (вы также можете использовать клавиши со стрелками, но это будет перемещать его на один символ, а не на один
shiftwidth
).источник
Для шага 3 вы можете использовать
gv=
вместо этого (=
означает отступ иgv
означает «повторно выбрать последний визуальный выбор»).Для поведения Emacs было бы довольно просто добавить несколько отображений в ваш .vimrc:
Затем вы можете использовать клавиши со стрелками вверх и вниз для перемещения по визуальному выбору линий. (Конечно, вы также можете использовать разные клавиши, если ненавидите стрелки.)
(Вы можете сделать это с обычным визуальным выбором и перемещением их влево и вправо тоже:
vnoremap <left> dhPgvhoho
иvnoremap <right> dpgvlolo
.)источник
gv
переходит к последнему визуальному выделению, которым в данном случае будет абзац, который был удален. Что мне не хватает?Вы можете переназначить некоторые ключи для перемещения линий. Например, стрелки вверх и вниз, если вы привыкли передвигаться
hjkl
.Например, на .vimrc
:m
, обычная команда для перемещения строки+1
или-2
для обозначения линии вверх или вниз (-1 сохраняет линию на том же месте)gv
снова выбрать тот же текст вVISUAL
режимеЭто решение не мешает работе регистров, поэтому любой скопированный текст будет по-прежнему доступен, а также переформатирует код для установки правильного отступа и т. Д.
источник
=
(это часто меняет слишком много несвязанного форматирования для меня).Самый простой способ, который я нашел для этого, задокументирован здесь: http://vimrcfu.com/snippet/77
Поместите следующее в ваш .vimrc
источник
Для этого есть несколько плагинов, но я предпочитаю vim- unimaired Тима Попа ( github ) (Ingo Karkat LineJuggler похож).
Вы визуально выбираете свой блок текста, затем делаете
]e
(e для обмена), чтобы переместить блок вниз ([e
для другого направления). Используйте,.
чтобы повторить действие (у вас установлен repeat.vim , не так ли). Если вы идете слишком далеко, просто отмените черезu
.Сейчас лично я считаю
p
иP
такие общие команды, что было бы лучше выучить их, прежде чем создавать вредные привычки. Тогда вы можете использовать]p
для вставки в тот же отступ. Если вы используете неповрежденный, вы можете>p
вставить более глубокий уровень отступа или=p
вставить и переформатировать.Если у вас есть проблемы вспоминания
p
иP
то это может помочь вам думать о них с точки зренияo
иO
команд, является своего рода симметрии.Как уже отмечали другие, вы можете использовать
gv
для повторного выбора визуального выбора. Однако, если вы просто вставите / вставите текст, вы потеряете визуальный выбор. Не беспокойтесь, потому что каждое изменение (и рывок!) Будет происходить'[
и']
вокруг измененной области. Таким образом, вы можете сделать отступ с помощью>']
(читай: сдвиг вправо до конца последнего изменения) и используйте.
клавишу, чтобы повторить отступ, пока текст не окажется в нужном месте.Для получения дополнительной помощи см .:
источник
Если вам известен номер строки, в которую вы хотите переместить блок текста, вы можете использовать диапазон или визуальный выбор с
:move
командой, чтобы переместить блок туда.Например, если у меня есть следующий файл:
и я хочу, чтобы переместить строку а после строки с, я поместил курсор на строку а и введите
:m3
, и линия затем сместилась.Это также работает с +/- смещениями. В приведенном выше примере тот же результат может быть достигнут с помощью
:m+2
перемещения строки на 2 строки вниз.Для блоков текста единственная разница - добавление в диапазон или выделение. Чтобы переместить строки aaa и bbb в конец файла, используйте команду типа
:1,2m$
($ = последняя строка) или визуально выберите строки и:m$
.источник
:move
см. Также vim.wikia.com/wiki/Moving_lines_up_or_down или Совет 29 Дублируйте или перемещайте строки с помощью команд «: t» и «: m» в книге « Practical Vim » Д. Нейла.Plugin vim-move от matze
Доступна с
Отображения по умолчанию в визуальном и обычном режиме:
источник