Solución al error "command-t.vim could not load the C extension."

Author
By Darío Rivera
Posted on 2020-10-25 in Vim

Hace unos días vimos cómo instalar command-t para realizar búsquedas de archivos en Vim. Para esto vimos que fue necesario compilar parte del plugin en lenguaje C. Sin embargo, decidí separar el post y crear uno exclusivamente para tratar este error que suele ser muy común cuando instalas este plugin. El error completo con el que te puedes encontrar es simiar al siguiente:

command-t.vim could not load the C extension.
Please see INSTALLATION and TROUBLE-SHOOTING in the help.
Vim Ruby version: 2.5.5-p157
Expected version: [unknown]-p[unknown]
For more information type:    :help command-t

Como puedes ver Vim no ha detectado de forma correcta la versión de Ruby [unknown]-p[unknown]. Puede que aún así tu error sea algo diferente y no muestre la parte del Expected version.

Origen

Este error es derivado de la no coincidencia entre la versión de Ruby soportada por Vim y la versión con la cual se compiló el plugin de Vim. Para verificar la versión de vim que deberías tener instalada debes correr el siguiente comando en vim.

:ruby puts RUBY_VERSION

Una vez hecho esto, debes asegurarte de instalar la herramientas necesarias para compilar el plugin en tu sistema operativo e instalar la versión de ruby adecuada según la que soporta Vim (esto lo puedes hacer con RVM). Puedes revisar nuestro artículo cómo instalar command-t para realizar búsquedas de archivos en Vim si tienes Linux o MacOS para instalar estas herramientas y la versión específica de Ruby,

Preparación del entorno

Antes de iniciar el proceso de recompilar el plugin debes ingresar a la carpeta en donde se aloja el plugin de CommandT. Para esto, debes ingresar a la carpeta de Vim y buscar el archivo ruby de command-t.

cd ~/.vim
find . -name "extconf.rb"

Obtendrás el path en donde se encuentra, algo similar a lo siguiente

./plugged/command-t/ruby/command-t/ext/command-t/extconf.rb

Debes ingresar a la carpeta en donde está este archivo.

cd ./plugged/command-t/ruby/command-t/ext/command-t

Y finalmente debes limpiar el entorno de toda otra compilación que hallamos realizado.

rm *.o && rm ext.bundle && rm metadata.rb && rm Makefile

Recompilación en MacOS

Para compilar en MacOS debes hacerlo de la siguiente manera:

/usr/local/opt/ruby/bin/ruby extconf.rb && make

Debes evitar a toda consta hacerlo con el comando ruby directamente ya que seguramente tendrás versiones diferentes en tu sistema provedientes de brew y rvm. Puedes comprobar esto verificando dichas versiones.

/usr/local/opt/ruby/bin/ruby --version
ruby --version

Recompilación en Linux

Para compilar en Linux debes hacerlo de la siguiente manera:

ruby extconf.rb && make

Si todo ha salido bien obtendrás una salida como la siguiente:

checking for float.h... yes
checking for ruby.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for fcntl.h... yes
checking for stdint.h... yes
checking for sys/errno.h... yes
checking for sys/socket.h... yes
checking for ruby/st.h... yes
checking for st.h... yes
checking for pthread_create() in -lpthread... yes
creating Makefile
compiling ext.c
compiling heap.c
compiling match.c
compiling matcher.c
compiling watchman.c
linking shared-object ext.so

Después de esto puedes ingresar a vim y utilizar el plugin.


Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.