2013-06-07 3 views
3

Обычно я использую метки для вырезания/вставки в Vim.Vim - Запретить перемещение курсора, когда дергается до отметки

Чтобы вставить текст между линиями 4 и 12, я следующее:

  1. переместить курсор к строке 4
  2. типа mx поместить метку с именем х
  3. переместить курсор на строку 12
  4. типа y'x дергать текст между линиями 4 и 12

После этого, курсор перемещается вернуться к строке # 4.

Есть ли способ, чтобы курсор оставался там, где он находится (без возврата к отметке)?

Если кто-нибудь имеет лучшие способы сделать то же самое, что было бы здорово, тоже ...

Заранее спасибо!


Update:

Я использовал ответ FDinoff, чтобы создать отображение, которое делает меня один счастливый кемпер:

nnoremap YY y'x<C-O> 

Это дергает от курсора до метки с именем х, то возвращает курсор туда, где он был.

Это уже спасло меня тонн времени. Еще раз спасибо!

+3

Я не вижу очевидного способа сделать это в документах, но достаточно ли нажать Ctrl-O после того, как янки вернутся назад к строке 12? – andrewdotn

+0

@andrewdotn - Это отличное начало (и, вероятно, достаточное решение) ... Это будет особенно полезно после добавления сопоставления. Благодаря! (не стесняйтесь, чтобы это было ответом, если вы хотите, чтобы некоторые точки реплики). – jahroy

ответ

9

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

      *y* *yank* 
["x]y{motion}  Yank {motion} text [into register x]. When no 
      characters are to be yanked (e.g., "y0" in column 1), 
      this is an error when 'cpoptions' includes the 'E' 
      flag. 

Движение в вопросе 'x который является переход к случаю х. Курсор перемещается в начало дернутой части, которая в этом случае является строкой 4, так как вы дергались от строки 12.

Однако все, что вы могли бы сделать.

  1. Используйте range для режима командной строки ex. Диапазон составляет . (текущая линия) до 'x (знак x). Если диапазон назад, спросит вас, вы имеете в виду другое направление. Это не приведет к перемещению курсора. :.,'xy

  2. Или вы можете использовать <C-o>, и вы вернетесь в последнее место, откуда вы прыгнули. (что упоминалось в комментариях.)

  3. Или вы могли бы использовать '] или `]. Эти команды перекроют вам последний символ последнего дернутого текста.

+0

Большое спасибо. Я ценю как объяснение, так и альтернативы! – jahroy

+0

Я не думаю, что это «причина», потому что большинство явных движений * не * перемещают курсор. например yj yl y}. Я действительно нашел это сообщение, ища команду, в которой yanks * и * выполняет движение, что иногда полезно для сложных движений, таких как yf3 /. Не думаю, что вы нашли такую ​​команду? –

+1

@MichaelScheper Янки помещают курсор в начало выдернутой секции. Во всех ваших примерах курсор был уже в начале области yanked. Сверху моей головы нет, я не знаю, как поместить курсор в конец дернутой части. – FDinoff

3

Перейти обратно с: `` или <c-o>

Для получения дополнительной справки обратитесь к разделу:

:h `` 
:h CTRL-O 
1

Как насчет y12G?
Это будет выходить из текущего положения (строка 4) в строку 12.

+0

Это будет работать, но этот рабочий процесс обычно используется, когда вы не знаете, сколько строк вы собираетесь выдернуть. Я просто использовал строки 4 и 12, чтобы объяснить сценарий. В реальной жизни 4 и 12 следует заменить на «номер случайной строки, который я выбираю, перемещаясь по файлу». – jahroy

Смежные вопросы