Perché `cw` e` ce` fanno la stessa cosa?


15

Questo mi ha sempre infastidito riguardo ai comandi we Wmotion: sembrano funzionare in modo diverso quando usati con il ccomando hange rispetto a quelli usati da soli o con il dcomando elete.


Ad esempio, con il cursore sulla "q" di questo testo:

The quick brown fox jumps over the lazy dog.

dwrisultati di battitura in

The brown fox jumps over the lazy dog.

e digitando derisultati in

The  brown fox jumps over the lazy dog.

(Notare i due spazi tra "The" e "brown".)


Anche il ycomando ank tratta we in modo ediverso, come può essere mostrato confrontando yeP:

The quickquick brown fox jumps over the lazy dog.

e ywP:

The quick quick brown fox jumps over the lazy dog.

Tuttavia, digitando uno ceslow<Esc>o si cwslow<Esc>ottiene la stessa cosa :

The slow brown fox jumps over the lazy dog.

Questo è documentato da qualche parte? Qual è la logica alla base e come posso prevedere i risultati di un comando che usa w?

Risposte:


18

È un caso speciale. Controllare la documentazione per WORD , in "Caso speciale":

Caso particolare: "cw" e "cW" sono trattati come "ce" e "cE" se il cursore si trova su un non vuoto. Questo perché "cw" viene interpretato come change-word e una parola non include il seguente spazio bianco. {Vi: "cw" quando su uno spazio seguito da altri spazi cambia solo il primo spazio; questo è probabilmente un bug, perché "dw" cancella tutti gli spazi vuoti}

Un altro caso speciale: quando si utilizza il movimento "w" in combinazione con un operatore e l'ultima parola spostata si trova alla fine di una riga, la fine di quella parola diventa la fine del testo operato, non la prima parola nella successiva linea.

L'implementazione Vi originale di "e" è errata. Ad esempio, il comando "e" si interromperà sul primo carattere di una riga se la riga precedente era vuota. Ma quando usi "2e" questo non succede. In Vim "ee" e "2e" sono uguali, il che è più logico. Tuttavia, ciò causa una piccola incompatibilità tra Vi e Vim.


1
Neovim 0.2.1 aggiunge un flag "cpoptions" "_" (trattino basso) che attiva / disattiva questo comportamento. neovim.io/doc/user/options.html#'cpoptions '
Justin M. Keyes

6

La differenza tra il comportamento del movimento in cwvs. dwpuò essere spiegata semplicemente: normalmente se vuoi cambiare una parola lascerai lo spazio bianco che la segue, mentre l'eliminazione di una parola suggerisce che vuoi che anche lo spazio bianco venga rimosso.

Se si vuole lo spazio bianco di andare via per qualche ragione (io lo faccio abbastanza regolarmente, ma non riesco a pensare a un esempio) quindi utilizzare il awmovimento: caw.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.