====== Mis apuntes sobre Vim ====== ===== Cómo copiar objetos de texto ===== === Yank: uso básico === * ''yy'' copio toda la **linea** * ''yw'' o ''yW'' copio **palabra** (OJO: desde donde está el cursor al final de la palabra, ver ''yaw'') * ''y$'' copio desde el cursor __hasta el final de la linea__ * ''y}'' copio desde el cursos __hasta el final de párrafo__ Luego, para **pegar** uso ''p'' (después) o ''P'' (antes). === Yank en contexto (bloques determinados por delimitadores) === * ''yaw'' copia la **palabra** donde está el cursor, __incluyendo los espacios en blanco alrededor__ * ''yiw'' copia la **palabra** donde está el cursor, pero __sin los espacios en blanco__ * ''yas'' copia toda la **sentencia** donde está el cursor * ''yap'' copia todo el **párrafo**. Nota: el uso de la "a" para definir un contexto hace que el delimitador sea incluido en la copia (**a**nd), mientras que el uso de la **"i"** hace que el delimitador sea excluido (**i**nside). Así que para cada comando de copia, tenemos dos versiones: con la **"a"** o con la **"i"** **Delimitadores**: aparte de los espacios en blanco, se pueden emplear otros delimitadores para definir bloques * delimitadores: **(**, **[**, **{**, **<**, **"**, **'**, **`** Así tenemos todo tipo de comandos que determinan qué bloque de texto va a ser copiado, dependiendo de esos delimitadores. Por ejemplo: * ''ya{'' copia el texto delimitado por ''{..}'', **incluyendo** los corchetes * ''yi{'' copia el texto delimitado por ''{..}'', **excluyendo** los corchetes === Yank con Regex === * ''y/'' copia desde la posición del cursor hasta donde encuentre por primera vez la **regex** (incluida). ==== Deshacer cambios (UNDO) ==== * **UNDO**: ''u'' * **REDO**: ''Ctrl-R'' === Branches (ramas alternativas de cambios) === Elemental... salvo un detalle: si hago un cambio, lo deshago y escribo otra cosa, las nuevas versiones de **vim** abren una nueva historia de cambios (branching) y recuerda los cambios realizados en cada rama de la historia. Normalmente el **undo** y **redo** funcionan sobre la última rama de cambios realizados, pero los comandos: * ''g-'' y ''g+'' permiten saltar entre ramas y por lo tanto es posible recuperar los cambios que se realizaron en una determinada rama. No sé qué tan útil pueda ser esto, pero es interesante saber que existe. === Branches 2: volver al estado del buffer hace t tiempo... === * '':earlier '' * '':later '' Ejemplos: :earlier 15m :later 50s Los '''' siempre son relativos (obviamente). Estos dos comandos parecen ser más razonables que ''g+'' y ''g-'', porque te ubica temporalmente en el estado en que tenías el buffer y no se maneja por rama de cambios. Uno puede usar "bisección", saltando hacia adelante y hacia atrás en el tiempo hasta recuperar el estado que prefiera.