Копирование Vim с сохранением местоположения курсора

262
Adam Hunyadi

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

noremap <C-S-d> y0O<ESC>pkéy$lgp`[ 

с hjklпереназначением на jklé. (без переназначения это будет выглядеть так:. y0O<ESC>pjly$kgp`[)

Это, похоже, не работает как команда, хотя, когда я тестирую его ключ за ключом, это просто замечательно. Интересно, что не так с этим макросом?

1

1 ответ на вопрос

2
Andrew Radev

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

Вы можете использовать mapвместо noremap, или вы могли бы использовать оригинальные сопоставления в левой части. Это, кажется, работает нормально для меня:

noremap <C-S-d> y0O<ESC>pjly$kgp`[ 

Кстати, вот как я дублирую строки, чтобы вы могли думать по-другому:

nnoremap zj mz"yyy"yP`z nnoremap zk mz"yyy"yP`zk 

Шаги для дублирования:

  • Сохранить текущую позицию в zметке с помощьюmz
  • Скопируйте строку в yреестр с"yyy
  • Вставьте строку выше с "yP
  • Перейти в исходное положение с `z

Для меня это держит позицию курсора в нужном месте.