Почему "d1j" удаляет две строки в vim? - PullRequest
12 голосов
/ 29 апреля 2011

Команда d{motion} работает некорректно:

d1j  " deletes 2 lines to the bottom
d1l  " deletes 1 character to the right

Ожидаемое поведение?

Ответы [ 2 ]

10 голосов
/ 29 апреля 2011

Когда вы начинаете движение и находитесь в режиме ожидания оператора, ваше движение будет либо включающим, либо исключительным, а также символьным или линейным (движения всегда включаются).

j - также инклюзивное движение. Возможно, вы хотите попробовать dvj или dgj (последний работает со строками экрана).

См. :help operator. Вы можете принудительно установить движение, поочередно или символически, с помощью V, v или CTRL-V соответственно.

2 голосов
/ 29 апреля 2011

Это на самом деле противоречиво.Я думаю, вы искали

  • удалить одну строку: d d (что является команда )
  • удалить одну строку вниз : d 1 j (или короткую d j ).Это оператор с движением )

Остальные удивительные биты происходят из-за представления vim о движениях линий, блоков и символов, которые на самом деле являются просто абстракциями, позволяющими Vim Делай правильно или Делай то, что ожидаешь при работе с выборками.


Как сказал @Benoit, d - оператор, который принимает движение.

2j аналогично, он будет двигаться на две строки вниз, охватывая 3 строки.

Обратите внимание, как, если вы хотите, чтобы некоторые визуальные подсказки с этим, вы можете установитьопция rn

:se relativenumber

Это приведет к тому, что относительное белье будет отображаться в левом «желобе» редактора.Эти числа можно использовать как «адреса» и делать то, что вы ожидаете, когда вы делаете «d12j» или «d12k»

Я, кстати, рекомендую ознакомиться с движениями text object, прежде чем привыкнуть к этому.Во многих случаях текстовые объекты гораздо более точны (и часто работают в символьном режиме, но ухудшаются только до выбора в соответствующих условиях)

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