Чому `cw` і` ce` роблять те саме?


15

Це завжди переймає мене командами руху wта Wруху - вони, здається, працюють інакше, коли вони використовуються з командою change, ніж вони, коли вони використовуються окремо або з командою delete.


Наприклад, за допомогою курсору на "q" цього тексту:

The quick brown fox jumps over the lazy dog.

введення dwрезультатів у

The brown fox jumps over the lazy dog.

та введення deрезультатів у

The  brown fox jumps over the lazy dog.

(Зверніть увагу на два проміжки між "The" та "brown".)


Команда yank також розглядає wта по- eрізному, як це можна показати, порівнюючи yeP:

The quickquick brown fox jumps over the lazy dog.

і ywP:

The quick quick brown fox jumps over the lazy dog.

Однак введення або введення одного ceslow<Esc>чи іншого cwslow<Esc>результату :

The slow brown fox jumps over the lazy dog.

Це десь задокументовано? Яка логіка за цим і як я можу передбачити результати команди, яка використовує w?

Відповіді:


18

Це особливий випадок. Перевірте документацію для слова WORD у розділі "Особливий випадок":

Особливий випадок: "cw" і "cW" трактуються як "ce" і "cE", якщо курсор знаходиться на порожньому. Це тому, що "cw" інтерпретується як слово "зміна", а слово не містить наступного пробілу. {Vi: "cw", коли на бланку, який супроводжується іншими пробілами, змінюється лише перший пробіл; це, мабуть, помилка, оскільки "dw" видаляє всі заготовки}

Ще один особливий випадок: коли використання руху "w" у поєднанні з оператором, а останнє слово, перенесене вище, знаходиться в кінці рядка, кінець цього слова стає кінцем оперованого тексту, а не першим словом у наступному рядок.

Оригінальна реалізація "e" Vi - баггі. Наприклад, команда "e" зупиниться на першому символі рядка, якщо попередній рядок був порожнім. Але коли ви використовуєте "2e", цього не відбувається. У Vim "ee" і "2e" однакові, що більш логічно. Однак це викликає невелику несумісність між Vi та Vim.


1
Neovim 0.2.1 додає прапор 'cpoptions' _ "(підкреслення), який перемикає цю поведінку. neovim.io/doc/user/options.html#'cpoptions '
Джастін М.

6

Різниця між поведінкою руху в cwпорівнянні з dwможна пояснити просто: зазвичай, якщо ви хочете змінити слово, ви збираєтеся залишити пробіл після нього, а видалення слова говорить про те, що ви хочете також видалити пробіли.

Якщо ви хочете пробільні піти з якої - то причини (я роблю це досить регулярно , але не можу думати про приклад) , а потім використовувати awрух: caw.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.