Dlaczego „cw” i „ce” robią to samo?

15

To zawsze mnie denerwowało w przypadku poleceń wi Wruchu - wydają się działać inaczej, gdy są używane z cpoleceniem hange, niż gdy są używane samodzielnie lub z dpoleceniem elete.


Na przykład, gdy kursor znajduje się na „q” tego tekstu:

The quick brown fox jumps over the lazy dog.

wpisanie dwwyników w

The brown fox jumps over the lazy dog.

i wpisywanie dewyników w

The  brown fox jumps over the lazy dog.

(Zwróć uwagę na dwie spacje między „The” i „brown”.)


Polecenie yank również traktuje wi einaczej, co można wykazać, porównując yeP:

The quickquick brown fox jumps over the lazy dog.

i ywP:

The quick quick brown fox jumps over the lazy dog.

Jednak wpisanie jednego z nich ceslow<Esc>lub cwslow<Esc>powoduje to samo :

The slow brown fox jumps over the lazy dog.

Czy to gdzieś jest udokumentowane? Jaka jest logika i jak mogę przewidzieć wyniki używanego polecenia w?

Dzika karta
źródło

Odpowiedzi:

18

To szczególny przypadek. Sprawdź dokumentację WORD w „Przypadku specjalnym”:

Przypadek specjalny: „cw” i „cW” są traktowane jak „ce” i „cE”, jeśli kursor nie jest pusty. Wynika to z faktu, że „cw” jest interpretowane jako słowo zmiany, a słowo nie zawiera następującej białej spacji. {Vi: „cw”, gdy na pustym polu następuje kolejne puste, zmienia tylko pierwszy pusty; jest to prawdopodobnie błąd, ponieważ „dw” usuwa wszystkie spacje}

Kolejny szczególny przypadek: w przypadku użycia ruchu „w” w połączeniu z operatorem, a ostatnie słowo przeniesione znajduje się na końcu wiersza, koniec tego słowa staje się końcem obsługiwanego tekstu, a nie pierwszym słowem w następnym linia.

Oryginalna implementacja Vi „e” jest błędna. Na przykład polecenie „e” zatrzyma się na pierwszym znaku linii, jeśli poprzednia linia była pusta. Ale kiedy używasz „2e”, tak się nie dzieje. W Vimie „ee” i „2e” są takie same, co jest bardziej logiczne. Powoduje to jednak niewielką niezgodność między Vi a Vimem.

fruglemonkey
źródło
1
Neovim 0.2.1 dodaje flagę „cpoptions” „_” (podkreślenie), która przełącza to zachowanie. neovim.io/doc/user/options.html#'cpoptions '
Justin M. Keyes
6

Różnicę między zachowaniem ruchu w cwkontra dwmożna wyjaśnić po prostu: normalnie, jeśli chcesz zmienić słowo, pozostawiasz po nim spację, a usunięcie słowa sugeruje, że chcesz również usunąć spację.

Jeśli chcesz, aby odstępy odejść z jakiegoś powodu (robię to dość regularnie, ale nie można myśleć o przykład) następnie użyj awruchu: caw.

dash-tom-bang
źródło