В Notepad ++ я могу использовать Ctrl+ Shift+ Up/ Downдля перемещения текущей строки вверх и вниз. Есть ли подобная команда в Vim? Я просмотрел бесконечные путеводители, но ничего не нашел.
Если нет, как я могу связать действие с этой комбинацией клавиш?
Изменить: ответ Николая работает для всех строк, кроме тех, в начале и в конце буфера. Перемещение первой линии вверх или нижней строки приводит к удалению линии, а при перемещении нижней строки вверх изначально прыгает два пробела, как пешка! Кто-нибудь может предложить какие-либо уточнения?
Ответы:
Поместите следующее в ваш .vimrc, чтобы сделать работу
Исчезновение линии выглядит как ошибка Vim. Я положил взлом, чтобы избежать этого. Возможно, есть более точное решение.
Обновить
Есть много необъяснимых трудностей с использованием только комбинаций Vim. Это пропущенные строки и дополнительные прыжки.
Итак, вот решение для сценариев, которое можно разместить внутри .vimrc или ~ / .vim / plugin / swap_lines.vim
источник
<A-up>
как в eclipse.ddkP
в последней строке документа. Попробуйте сами на 3-строчном файле. Чтобы избежать таких проблем, используйте гораздо более простые:m
сопоставления, как указано в вики Vim .<A-up>
и,<A-down>
но когда я пытаюсь использовать эти клавиши в vim в визуальном режиме в tmux, выбор исчезает, и курсор перемещается вверх; без перемещения выбранных линий.Если я хочу поменять одну строку на строку выше, я обычно делаю следующее
объяснение
источник
ddp
переместить строку вниз (удалить строку и вставить ниже текущей строки)4 dd
а затем перейдите к, скажем, 2 строки, то:2
куда вы хотите вставить иP
.4dd
вместо4 dd
?dd<number>jp
переместить текущую строку <число> +1 строк вниз. Иdd<number>kp
переместить текущую строку на <число> строк вверх.Предполагая, что курсор находится на линии, которую вы хотели бы переместить.
Перемещение вверх и вниз:
:m
для перемещения:m +1
- движется вниз на 1 строку:m -2
- двигаться вверх на 1 строку(Обратите внимание, что вы можете заменить +1 на любое число в зависимости от того, на сколько строк вы хотите переместить его вверх или вниз, т.е. +2 переместит его на 2 строки, -3 переместит его на 2 строки)
Чтобы перейти к конкретной строке
:set number
- отображать номера строк (легче увидеть, куда вы их перемещаете):m 3
- переместите строку после 3-й строки (замените 3 на любую, какую хотите)Перемещение нескольких строк:
V
(т.е. Shift- V) и перемещайте курсор вверх и вниз, чтобы выбрать несколько строк в VIMкак только выберете, нажмите :и запустите команды выше, и
m +1
т. д.источник
noremap <c-s-up> :m -2<CR> noremap <c-s-down> :m +1<CR>
Переместить строку вверх:
ddkP
Переместить строку вниз:
ddp
источник
.
для повторения.Это сработало для меня:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
Кстати, если вы хотите использовать ALT + some_key и ваш терминал (urxvt делает это) отказывается соблюдать, вы должны ввести что-то подобное в ваш .vimrc:
где ^] - один символ , представляющий клавишу ALT. Чтобы ввести этот символ, используйте C+v, Escв Vim ( C+q, Escв Windows).
источник
[niv]noremap
это переназначения для нормального | insert | визуального режима.<CR>
естьCarriage Return
(Enter
ключ).добавьте следующее в файл ~ / .vimrc (убедитесь, что у вас нет отображения для n, m)
Теперь нажатие
n
клавиши переместит линию вниз иm
переместит линию вверх.источник
В командном режиме поместите курсор на строку, которую вы хотите переместить вниз, а затем
Пояснение: dd удаляет текущую строку в общий буфер, p помещает ее обратно ПОСЛЕ позиции курсора или, в случае целых строк, на одну строку ниже.
Существует некоторая путаница в отношении команд p и P во многих документах. В действительности p вставляет ПОСЛЕ курсора, а P AT - курсор.
источник
Просто добавьте этот код в .vimrc (или .gvimrc)
источник
Именно то, что вы ищете в этом удивительном плагине: https://github.com/vim-scripts/upAndDown
источник
Простое решение , чтобы положить в ваших
.vimrc
этих строках:источник
Я положил следующее в конец моего файла .vimrc:
Так что теперь «H» и «N» перемещают текущую строку вверх и вниз соответственно.
источник
Вот упрощенная версия для MacVim, использующая примеры из статьи Wikia (см. Ссылку из комментария Gun ).
Я использую только вариант выбора блока, потому что все, что требуется, это Shift-V, чтобы выбрать текущую строку, и, при необходимости, курсор вверх / вниз, чтобы выбрать еще несколько строк.
В соответствии с указаниями выше, нажатие Cmd-Shift-Up / Down сместит выбор блока вверх / вниз. «D» - это клавиша «Command» в MacVim, для Windows попробуйте «C» (Control) или «A» (Alt) (например, <CAf> будет Control Alt f).
Статья Wikia добавляет к ним «= gv», что позволяет настроить отступ блока после перемещения на основе окружающего текста. Это сбивает с толку, поэтому я удалил его и добавил вместо него ярлыки для быстрого отступа выделения.
Имейте в виду, то же самое можно сделать с << и >>, но выбор будет потерян, поэтому вышеупомянутые ярлыки позволяют многократно отступать и по-прежнему перемещать блок, потому что выбор поддерживается.
Мой MacVim настроен для переключения вкладок с помощью Cmd-Shift-Left / Right, поэтому я использовал Cmd-Alt-Left / Right.
Вот переключение вкладок для MacVim (поместите в .gvimrc вместе с остальными выше):
источник
плагин vim unimpaired.vim [e and] e
источник
Когда вы нажмете команду
:help move
вvim
, и вот результат::[range]m[ove] {address} *:m* *:mo* *:move* *E134* Move the lines given by [range] to below the line given by {address}.
Например: переместить текущую строку на одну строку вниз =>
:m+1
.Например: переместите строку с номером 100 ниже линии с номером 80 =>
:100 m 80
.Например: переместите строку с номером 100 ниже линии с номером 200 =>
:100 m 200
.Например: переместите строки с номером в пределах [100, 120] ниже строки с номером 200 =>
:100,120 m 200
.источник
Вот решение, которое работает на моей машине : MacBook Pro под управлением VIM 8.1
Эти команды не будут удалять ваши строки вверху или внизу буфера.
Использование фактических символов, которые выводят Alt-J и Alt-K, является обходным решением для их кодов клавиш, которые не отображаются должным образом в моей среде.
Добавьте это в старый .vimrc и посмотрите, работает ли он для вас.
источник
Для меня
ddkkp
это сделал (вместоddkP
прописной буквы P, что тоже сработало бы).источник
: m. + 1 или: m.-2 будет делать, если вы перемещаете одну строку. Вот мой скрипт для перемещения нескольких строк. В визуальном режиме Alt-up / Alt-down переместит строки, содержащие визуальный выбор, вверх / вниз на одну строку. В режиме вставки или обычном режиме Alt-up / Alt-down переместит текущую строку, если не указан префикс счета. Если есть префикс count, Alt-up / Alt-down переместит столько строк, начиная с текущей строки вверх / вниз на одну строку.
источник
Если вы хотите сделать это на нескольких строках, которые соответствуют определенному поиску:
:g/Your query/ normal ddp
или:g/Your query/ m -1
:g/Your query/ normal ddp
или:g/Your query/ m +1
источник