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

Как поменять две строки в vim?

У меня есть это:

pick 887b66f add 222 Dziewiecsil to flowers new title
pick dc331cb new name of beginning commit

И я хочу получить следующее:

pick dc331cb new name of beginning commit
pick 887b66f add 222 Dziewiecsil to flowers new title

Есть ли способ сделать это быстро, используя быстрые клавиши?

4b9b3361

Ответ 1

Чтобы заменить текущую строку следующей, введите ddp находясь в командном режиме.

  • dd - удалить строку (на самом деле называется cut в других редакторах) и сохранить ее в регистре
  • p - вставить строку из регистра

Ответ 2

dd удаляет текущую строку, затем вы можете вставить удаленную строку с помощью p. Там другой способ, используя m. С помощью m вы можете перемещать линии вокруг i.e.

:m 1 будет перемещать текущую строку после строки 1

:m 0 переместит текущую строку вверх

:m $ переместит текущую строку вниз

В вашем примере поместите курсор в первую строку и введите :m $

Дополнительная информация: http://vim.wikia.com/wiki/Moving_lines_up_or_down

Ответ 3

Несмотря на то, что вопрос довольно старый и помечен как ответ, я хотел бы расширить ответ, сказав, что вы можете использовать команды нормального режима, которые были предоставлены Свеном Марначом с помощью nnoremap следующим образом:

:nnoremap <C-Up> <Up>ddp<Up>
:nnoremap <C-Down> ddp

Это позволит вам перемещать строки с Ctrl + Up и Ctrl + Down в вашем файле. Однако это перезапишет регистр @", в котором хранится ваша последняя скопированная строка/слово/буква/и т.д. Таким образом, добавив" (reg) перед командами dd и p мы можем исправить это:

:nnoremap <C-Up> <Up>"add"ap<Up>
:nnoremap <C-Down> "add"ap

Здесь мы добавляем команды "a перед удалением и @a для сохранения нашей строки в регистре @a, поэтому ваш регистр копирования по умолчанию не будет перезаписан. Однако он может перезаписать содержимое регистра @a (кто знает, но вы можете использовать его для чего-то важного в вашем случае использования, но этот шаг немного параноидален, вы можете пропустить его, если хотите), давайте исправим это тоже:

:nnoremap <silent><C-Up> :let [email protected]<Cr><Up>"add"ap<Up>:let @a=save_a<Cr>
:nnoremap <silent><C-Down> :let [email protected]<Cr>"add"ap:let @a=save_a<Cr>

(<silent> необходимо, чтобы предотвратить вывод наших команд в строку сообщения внизу.)

Теперь у нас есть два сопоставления, которые позволяют нам перемещать строки в файле с помощью сочетаний клавиш. Вы можете переопределить кнопки, я использую Alt + j/k, которые будут <Aj> и <Ak> для этих команд. Однако не все эмуляторы терминала поддерживают сопоставления клавиш Alt AFAIK.