Почему vim-вставка ведет себя по-разному в зависимости от метода восстановления - PullRequest
0 голосов
/ 31 октября 2018

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

Если я дергаю строку, начиная с обычного режима:

^v$y

^ для перехода к началу строки

v для входа в визуальный режим

$ до конца строки

y к рывку

Затем я использую p для вставки, и все работает как положено.

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

Vy

V для перехода в визуальный режим также

y дернуть

И затем я использую p для вставки, я вижу, что строка вставляется ниже текущей строки. Это похоже на операцию вставки: сначала открывается новая строка, а затем вставляется туда.

* +1032 * Пример. Строки в начале:
Line1
Line2
Line3. Insert here 

Я дергаю Line2, используя метод 1.

Я перемещаю курсор к точке Line3 и нажимаю p для вставки. Я получаю этот результат:

Line1
Line2
Line3.Line2 
 Insert here

Но когда я делаю то же самое, используя второй метод, я получаю такой результат:

Line1
Line2
Line3. Insert here
Line2

Если содержимое регистров: одинаково в обоих случаях, почему вставка работает по-разному?

Edit:

Нашел ответ здесь

Даже если содержимое регистра одинаково; тип регистра становится различным в зависимости от метода восстановления, а другой тип регистра заставляет вставку делать разные вещи.

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Вместо Vy Я бы порекомендовал yg_ и также мог бы быть vg_y, но вы бы набрали дополнительный символ. Итак:

yg_ ................... yank until the last character of the line

OBS: g_ не включает символ новой строки. Для более :h g_

для выбора от первого символа строки до последнего без новой строки:

_vg_

_ ............... jump to the first non-blank char
v ............... visual
g_ .............. las non-blank of the line
0 голосов
/ 01 ноября 2018

Нашел ответ здесь

Даже если содержимое регистра одинаково; тип регистра становится различным в зависимости от метода восстановления. Тип регистра заставляет вставку делать разные вещи. И вы можете увидеть тип регистра для данного регистра, набрав :echo regtype('"')

0 голосов
/ 31 октября 2018

Объяснение

Если вы присмотритесь, вы увидите разницу в том, использовали ли вы v$ или V:

:registers ab
--- Registers ---
"a   foo
"b   foo^J

То, что ^J - это символ новой строки , который означает, что вся строка была восстановлена.

Движения влияют либо на целые строки, либо на символы между начальной и конечной позицией. Внутри Vim это называется :help linewise и символьно. То же самое относится и к визуальному режиму (и есть третий режим для <C-V>, который называется блочным). Таким образом, это имеет значение, как вы дергаете вещи! Вы видите это в команде :registers, а также можете запросить это через функцию :help getregtype(), но на практике это редко становится неожиданностью (если вы поняли концепцию).

Включите с помощью плагинов

Мне нужно было так часто "приводить" содержимое регистра в определенный (символьно / линейно / блочно) режим, я написал для него плагин UnconditionalPaste . Он предоставляет gcp, glp и т. Д. Альтернативы встроенным командам вставки, которые запускают определенный режим (и теперь еще несколько вариантов этой темы, например вставка с запятыми или запрошенными символами).

С его помощью вы можете просто использовать gcp / gcP для вставки после / перед позицией курсора, независимо от того, как вы дернули текст (например, из визуального режима с помощью V, как в вашем вопросе). ).

...