# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Ver las diferencias entre dos ficheros con Vimdiff


Personalmente pocas veces he trabajado con el comando diff en Linux, pero la verdad es que las veces contadas que lo he hecho no me ha gustado demasiado su salida para encontrar diferencias entre ficheros. Hoy, de casualidad me he topado con vimdiff, un “añadido” del maravilloso vim que nos permite ver las diferencias de ficheros de forma gráfica y muchísimo más clara que diff.

Si ya tenéis instalado vim en vuestro sistema ya dispondréis de esta utilidad. En caso contrario instalad el paquete

vim-enhanced

. Su ejecución es sencilla, simplemente pasamos como parámetro los ficheros a comparar:

# vimdiff fichero1.txt fichero2.txt

vimdiff
 
El resultado es tan intuitivo que no es necesario explicar demasiado. En este ejemplo vemos que vimdiff nos marca con resaltados de colores las diferencias. Por ejemplo cuando hay líneas con carácteres que están en un fichero pero no en el otro nos muestra dichos carácteres con resaltado rojo. Cuando un fichero tiene líneas completas distintas, muestra toda la línea con un resaltado azul en un fichero y con un resaltado celeste con guiones la en el otro.

En definitiva, lo más básico a conocer de vimdiff es que muestra en rojo líneas que están parcialmente cambiadas, en azul las líneas completas que no coinciden y sin resaltado lo que coincide. Como imaginaréis vimdiff al igual que vim es todo un mundo, conviene revisar la documentación si queréis profundizar en su manejo.

Guardar un fichero dentro de VIM cuando no tenemos permisos


Era un poco complicado poner título a esta entrada, no obstante seguro que a todos nos ha pasado que comenzamos a editar un fichero desde vim o vi y a la hora de grabar nos damos cuenta que no tenemos privilegios para guardarlo (ya sea porque es propietario root u otro usuario), recibimos un error similar a:

W10: Advertencia: cambiando un fichero de sólo lectura 58,1 Final

E45: Está activa la opción «readonly» (añada «!» para forzar).

E212: No puedo abrir el fichero para escribir en él.

Si tenemos la posibilidad de hacer uso de sudo con nuestro usuario, la solución para poder grabar el fichero sin necesidad de salir de vim es del siguiente modo. Tenemos que entrar en modo comandos (ESC) y ejecutar lo siguiente:

:w !sudo tee %
[sudo] password for alex:

Nos pedirá la clave de sudo y podremos guardar el fichero ;)

Cómo buscar y reemplazar en vi ó vim


Sé de alguien que siempre olvida como buscar y reemplazar una cadena de texto en todo un fichero con vi o vim ;) así que lo mejor será dejar este truco plasmado en una entrada.

Si queremos reemplazar una cadena de texto o palabra en todo un fichero de texto, lo abrimos con vim:

$ vim fichero

Una vez dentro, presionamos ESC para entrar en modo de ejecución de comandos, la sintaxis para reemplazar una cadena de texto en todo el fichero sería:

:g/texto_a_sustituir/s//texto_nuevo/g

Y presionamos ENTER, automáticamente todo lo que sea “texto_a_sustituir” será modificado por “texto_nuevo“.

Todo el mundo me dice que esta es una forma complicada de hacerlo, yo es la que aprendí en su día y siempre me acuerdo de ella, otra forma más sencilla es:

:%s/texto_a_sustituir/texto_nuevo/g

Me consta que hay muchas más formas de hacerlo, cada cual que encuentre la que más cómoda le parezca.

Ah, para buscar simplemente en vim, tenéis que presionar ESC para acceder a modo comando, posteriormente “/” (shift +7), escribir la cadena a buscar y presionar ENTER. Para moveros a lo largo del fichero por los resultados, presionad la tecla “n”.

Dedicado al SysAdmin de Tu Receta ;)

Deshabilitar modo visual de ratón en VIM (visual mode)


Personalmente me resulta extremadamente incómodo el modo visual de VIM:

Este modo es una mejora respecto a vi. Mediante unas ciertas combinaciones de teclas en combinación con las teclas de movimiento del cursor, se puede marcar un área de texto, ya sea un grupo de líneas o un bloque. Una vez se tiene el texto marcado se pueden usar comandos del modo comandos para manipularlo. Las operaciones que se pueden realizar en este modo son más simples que las del modo comandos.

Para desactivarlo hay dos opciones, la forma permanente es editar el fichero ~/.vimrc y añadir lo siguiente:

set mouse-=a

Si queréis hacerlo solo para la terminal vim abierta, ejecutad dentro de vim:

:set mouse-=a

Via | www.varesano.net

Cambiar editor crontab por defecto


Puede que al tratar de editar los crontabs de un usuario en tu máquina tengas un editor que no sea de tu agrado (pico, nano, vi, vim…):

crontab -e

Es muy sencillo configurar por defecto el editor que desees, simplemente exporta la variable EDITOR con el que desees:

export VISUAL='pico -w'

o:

export VISUAL='vim'

Puedes añadir esta línea en el .bashrc de tu usuario para que sea permanente.

Vim: Can’t write viminfo file


En caso de recibir este error al salir de la edición de un fichero con vim, has de revisar dos puntos. Por una parte que no haya ficheros temporales tipo ~/.viminf*, es decir, si tu usuario se llama test revisa que no haya estos ficheros en /home/test/.viminf*

Por otra parte revisa que tu usuario puede escribir en dicho fichero.

Activar colores en vim


Es posible que pese a haber instalado el editor avanzado VIM sigas sin tener un esquema al editar ficheros en terminal. Estos esquemas de color te permiten ver de forma más eficaz y clara el código de un fichero, si es php tendrá esquema de colores php, si es bash de bash, etc etc.

Pues bien, si ves todo del mismo color al editar un fichero con vim, haz lo siguiente (en este caso vamos a activarlo para el usuario root) :

cd /root
vim .vimrc

Busca una línea que tenga lo siguiente:

# syntax on

Si está comentada como arriba la descomentamos, y sino, la añadimos:

syntax on

Más cosas pueden añadirse en este archivo como preferencias de vim, como por ejemplo que siempre aparezcan los nº de línea (set number) y otras cosas más, podéis investigar :P

Quitar carácteres ^M del final de las líneas en ficheros que provienen de Windows


Muchas veces si editamos con VI o desde algún otro editor Unix un fichero que proviene de Windows puede que nos encontremos con los carácteres ^M al final de todas las líneas. Realmente no hay ningún problema, pero resulta bastante incómodo, os dejo un par de formas de eliminarlos de forma rápida y sencilla:

Con SED:

sed 's/<Ctrl-V><Ctrl-M>//g' -i fichero

Con VI:

<Esc>:%s/<Ctrl-V><Ctrl-M>//g

Vía | blog.transmit.net