Команда d{motion}
работает непоследовательно:
d1j " deletes 2 lines to the bottom
d1l " deletes 1 character to the right
Ожидается ли это поведение?
Команда d{motion}
работает непоследовательно:
d1j " deletes 2 lines to the bottom
d1l " deletes 1 character to the right
Ожидается ли это поведение?
Когда вы начинаете движение, и вы находитесь в режиме ожидания в ожидании, ваше движение будет либо включающим, либо эксклюзивным, либо либо символьным, либо линейным (движения по линии всегда включены).
j
представляет собой включенное по строке движение. Вероятно, вы хотите попробовать dvj
или dgj
(последний работает со строками экрана).
См. :help operator
. Вы можете принудительно перемещать движения по линуалу, по буквам или по блоку с V, v или CTRL-V соответственно.
На самом деле это не противоречит. Думаю, вы искали
Остальные удивительные биты связаны с концепцией vim линейного, блочного и символьного движений, которые на самом деле являются просто абстракциями, позволяющими Vim делать правильную вещь или делать то, что вы ожидаете при работе по выбору.
Как и @Benoit, d
- оператор, который принимает движение.
2j
будет линейным, он сдвинет две строки вниз, покрывая 3 строки.
Обратите внимание, что если вы хотите получить некоторые визуальные подсказки с этим, вы можете установить опцию rn
:se relativenumber
Это приведет к тому, что в левом "канаве" редактора будет отображаться относительное полотно. Эти числа могут использоваться как "адреса" и делать то, что вы ожидаете, когда делаете "d12j" или "d12k"
Я рекомендую познакомиться с движениями text object
, прежде чем привыкнуть к этому, между прочим. Много раз текстовые объекты намного точнее (и часто работают в режиме символа, только ухудшая их соответствие в соответствующих условиях)