<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Autonomía digital y tecnológica</title>
	<atom:link href="https://voragine.net/feed" rel="self" type="application/rss+xml" />
	<link>https://voragine.net</link>
	<description>Código e ideas para una internet distribuida</description>
	<lastBuildDate>Tue, 26 May 2026 08:08:24 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>Rastrear las descargas de archivos de un sitio web con un servidor de estadísticas Matomo</title>
		<link>https://voragine.net/weblogs/rastrear-archivos-pdf-jpg-png-web-servidor-matomo</link>
					<comments>https://voragine.net/weblogs/rastrear-archivos-pdf-jpg-png-web-servidor-matomo#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Tue, 26 May 2026 08:08:23 +0000</pubDate>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[Infraestructura digital]]></category>
		<category><![CDATA[Matomo]]></category>
		<category><![CDATA[servidor de estadísticas]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=8639</guid>

					<description><![CDATA[Matomo es el servidor de estadísticas de código abierto más usado en sitios web. Es relativamente fácil de instalar y actualizar en un servidor propio. Es una solución poco exigente en cuanto a recursos de hardware, y tiene una comunidad sólida y un modelo de negocio que hace el proyecto viable económicamente. Permite almacenar los datos de visitas a un sitio web, que contienen datos sensibles, en un servidor propio, y evita los problemas de privacidad de soluciones como Google Analytics.

Matomo no rastrea las descargas de archivos por omisión. Para almacenar estos datos junto a las visitas de los archivos HTML de un sitio web hay que hacer dos pequeñas modificaciones en el código de la web: introducir ciertos atributos en los enlaces de descarga y añadir un pequeño código JavaScript en las páginas con enlaces.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://matomo.org">Matomo</a> es el servidor de estadísticas de código abierto más usado en sitios web. Es relativamente fácil de instalar y actualizar en un servidor propio. Es una solución poco exigente en cuanto a recursos de hardware, y tiene una comunidad sólida y un modelo de negocio que hace el proyecto viable económicamente. Permite almacenar los datos de visitas a un sitio web, que contienen datos sensibles, en un servidor propio, y evita los <a href="https://matomo.org/blog/2022/06/google-analytics-privacy-issues/">problemas de privacidad de soluciones como Google Analytics</a>.</p>



<p class="wp-block-paragraph">Matomo no rastrea las descargas de archivos por omisión. Para <a href="https://www.linkedin.com/pulse/how-track-pdf-file-downloads-custom-event-tracking-margub-alam-3kmac/">almacenar los datos de descargas junto a las visitas de los archivos HTML de un sitio web</a> hay que hacer dos pequeñas modificaciones en el código de la web: introducir ciertos atributos en los enlaces de descarga y añadir un pequeño código JavaScript en las páginas con enlaces.</p>



<h2 class="wp-block-heading">Modificar los enlaces de descarga</h2>



<p class="wp-block-paragraph">En los enlaces de descarga de los PDF o imágenes hay que incluir una clase que definirá los enlaces a rastrear, y ciertos meta datos usando atributos estándares <code>data-*</code> que contendrán información adicional a enviar al servidor de estadísticas para tener informes más completos y legibles. Por ejemplo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;/archivos/informe.pdf&quot; class=&quot;track-pdf&quot; data-name=&quot;Informe importante&quot; data-size=&quot;2048&quot;&gt;Descargar informe&lt;/a&gt;
</pre></div>


<h2 class="wp-block-heading">Incluir el código de rastreo de los archivos descargables</h2>



<p class="wp-block-paragraph">El siguiente código JavaScript escucha eventos de click en los enlaces etiquetados con la clase adecuada y envía los datos al servidor de estadísticas:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
document.querySelectorAll(&#039;.track-pdf&#039;).forEach(function (el) {
    el.addEventListener(&#039;click&#039;, function () {
        var name = el.dataset.name || &#039;PDF&#039;;
        var size = parseInt(el.dataset.size) || 0;
        _paq.push(&#x5B;&#039;trackEvent&#039;, &#039;PDF Downloads&#039;, &#039;Download&#039;, name, size]);
    });
});
</pre></div>


<p class="wp-block-paragraph">Este código está pensado para archivos PDF. Si se quiere tener diferentes eventos para diferentes tipos de archivo, por ejemplo PDF e imágenes por separado, la clase de los enlaces dependerá del tipo de archivo y se incluirán dos código JavaScript diferentes, cada uno escuchando la clase adecuada.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/weblogs/rastrear-archivos-pdf-jpg-png-web-servidor-matomo/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Obtener en WordPress un listado de contenidos modificados tras una fecha determinada con wp-cli</title>
		<link>https://voragine.net/wordpress/wp-cli-listar-posts-modificados-tras-fecha-determinada</link>
					<comments>https://voragine.net/wordpress/wp-cli-listar-posts-modificados-tras-fecha-determinada#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Wed, 20 May 2026 07:53:51 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[date_query]]></category>
		<category><![CDATA[WP-CLI]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=8609</guid>

					<description><![CDATA[wp-cli es útil para automatizar muchas tareas de mantenimiento y administración de un sitio WordPress que se pueden hacer manualmente desde el panel de administración. Pero desde mi punto de vista, cuando despliega todo su potencial, es cuando permite realizar tareas u obtener información que no se puede obtener de otra manera. Y además lo [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">wp-cli es útil para automatizar muchas tareas de mantenimiento y administración de un sitio WordPress que se pueden hacer manualmente desde el panel de administración. Pero desde mi punto de vista, cuando despliega todo su potencial, es cuando permite realizar tareas u obtener información que no se puede obtener de otra manera. Y además lo suele permitir de manera elegante, con un único comando.</p>



<p class="wp-block-paragraph">Hoy he necesitado saber cuantos contenidos habían sido modificados después de una fecha determinada, el 1 de noviembre de 2025, en un sitio web.</p>



<p class="wp-block-paragraph">El siguiente comando de wp-cli devuelve un CSV con el ID, el título y la fecha de modificación de cada uno de los elementos del tipo de contenido post que han sido modificados después del 1 de noviembre de 2025 para un sitio web:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
wp post list --post_type=post --orderby=modified --fields=ID,post_title,post_modified --date_query=&#039;&#x5B;{&quot;column&quot;:&quot;post_modified_gmt&quot;,&quot;after&quot;:&quot;November 1st, 2025&quot;}]&#039; --format=csv &gt; 260520-posts.modified.after.1nov2025.csv
</pre></div>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/wordpress/wp-cli-listar-posts-modificados-tras-fecha-determinada/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Convertir coordenadas geográficas de grados, minutos y segundos (DMS) a sistema decimal (DD) en Python</title>
		<link>https://voragine.net/scripting/python-coordenadas-geograficas-grados-minutos-segundos-dms-sistema-decimal-dd</link>
					<comments>https://voragine.net/scripting/python-coordenadas-geograficas-grados-minutos-segundos-dms-sistema-decimal-dd#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Fri, 21 Nov 2025 10:13:39 +0000</pubDate>
				<category><![CDATA[Mapas]]></category>
		<category><![CDATA[Scripting y programación]]></category>
		<category><![CDATA[coordenadas geográficas]]></category>
		<category><![CDATA[dd]]></category>
		<category><![CDATA[DMS]]></category>
		<category><![CDATA[expresiones regulares]]></category>
		<category><![CDATA[grados minutos y segundos]]></category>
		<category><![CDATA[mapas]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=8168</guid>

					<description><![CDATA[En mapas web se suele usar el sistema decimal (Decimal Degrees) para los valores de latitud y longitud. Si se tienen los valores en grados, minutos y segundos (Degrees Minutes Secons) será necesario convertirlos.

En python se puede hacer con dos líneas de código, usando el paquete de expresiones regulares (re).]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">En mapas web se suele usar el sistema decimal (<a href="https://en.wikipedia.org/wiki/Decimal_degrees">Decimal Degrees</a>) para los valores de latitud y longitud. Si se tienen los valores en grados, minutos y segundos (<a href="https://en.wikipedia.org/wiki/Degree_(angle)#Subdivisions">Degrees Minutes Secons</a>) será necesario convertirlos.</p>



<p class="wp-block-paragraph">En python se puede hacer con dos líneas de código, usando el paquete de expresiones regulares (re). Empaquetándolo en una función quedaría:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
import re

def degMinSec2decDeg(degMinSec):
    &quot;&quot;&quot;Convierte coordenadas grados minutos y segundos (DMS) a sistema decimal (DD).&quot;&quot;&quot;
    deg, minutes, seconds, direction =  re.split(&#039;&#x5B;°\&#039;&quot;]&#039;, degMinSec)
    return (float(deg) + float(minutes)/60 + float(seconds)/(60*60)) * (-1 if direction in &#x5B;&#039;W&#039;, &#039;S&#039;] else 1)
</pre></div>


<p class="wp-block-paragraph"><a href="https://stackoverflow.com/a/54294962/3495761">Visto en este hilo de stackoverflow</a>.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/scripting/python-coordenadas-geograficas-grados-minutos-segundos-dms-sistema-decimal-dd/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Por qué usar nvm para configurar un entorno de desarrollo y ejecución Node.js en Linux Debian</title>
		<link>https://voragine.net/weblogs/nvm-entorno-desarrollo-ejecucion-nodejs-npm-linux-debian</link>
					<comments>https://voragine.net/weblogs/nvm-entorno-desarrollo-ejecucion-nodejs-npm-linux-debian#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Tue, 28 Oct 2025 11:58:10 +0000</pubDate>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Infraestructura digital]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[node.js]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[nvm]]></category>
		<category><![CDATA[sysadmin]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=8054</guid>

					<description><![CDATA[En Linux Debian, no se pueden instalar paquetes con npm globalmente en el sistema (npm install -g) sin usar sudo. Es una medida de seguridad necesaria que puede provocar problemas de permisos para usuarios sin permisos sudo cuando algún paquete se instala globalmente usando sudo, o que implica tener que instalar cada paquete como dependencia de cada repositorio. Esto puede tener sentido con dependencias del proyecto que se está desarrollando, pero no tanto con paquetes del entorno de desarrollo que se usan en todos los proyectos (linters, revisores de código, typescript...). Esto se soluciona usando nvm que permite crear un entorno Node.js específico para cada usuario del sistema, de manera que los paquetes instalados globalmente son globales para el usuario que los instala. nvm se puede instalar sin usar sudo, así que un usuario no necesita contactar al administrador del sistema.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">TLDR; En Linux Debian, no se pueden instalar paquetes con <a href="https://nodejs.org/en/learn/getting-started/an-introduction-to-the-npm-package-manager#introduction-to-npm">npm</a> globalmente en el sistema (<code>npm install -g</code>) sin usar sudo. Es una medida de seguridad necesaria que puede provocar problemas de permisos para usuarios sin permisos sudo cuando algún paquete se instala globalmente usando sudo, o que implica tener que instalar cada paquete como dependencia de cada repositorio. Esto puede tener sentido con dependencias del proyecto que se está desarrollando, pero no tanto con paquetes del entorno de desarrollo que se usan en todos los proyectos (linters, revisores de código, typescript&#8230;). Esto se soluciona usando <a href="https://github.com/nvm-sh/nvm">nvm</a> que permite crear un entorno <a href="https://nodejs.org">Node.js</a> específico para cada usuario del sistema, de manera que los paquetes instalados globalmente son globales para el usuario que los instala. <strong>nvm se puede instalar sin usar sudo</strong>, así que un usuario no necesita contactar al administrador del sistema.</p>



<h2 class="wp-block-heading">Instalar Node Version Manager (nvm)</h2>



<p class="wp-block-paragraph">En el repositorio oficial de nvm se puede descargar un script de bash que descarga nvm y añade la configuración necesaria al archivo de perfil del usuario (<code>~/.bashrc</code>, <code>~/.bash_profile</code>, <code>~/.zshrc</code>, o <code>~/.profile</code>). Es recomendable consultar el repositorio para instalar la última versión. En el momento de escribir este tutorial era la 0.40.3:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
=&gt; Downloading nvm from git to &#039;/home/skotperez/.nvm&#039;
=&gt; Clonando en &#039;/home/skotperez/.nvm&#039;...
remote: Enumerating objects: 383, done.
remote: Counting objects: 100% (383/383), done.
remote: Compressing objects: 100% (326/326), done.
remote: Total 383 (delta 43), reused 180 (delta 29), pack-reused 0 (from 0)
Recibiendo objetos: 100% (383/383), 391.78 KiB | 2.67 MiB/s, listo.
Resolviendo deltas: 100% (43/43), listo.
* (HEAD desacoplado en FETCH_HEAD)
  master
=&gt; Compressing and cleaning up git repository

=&gt; Appending nvm source string to /home/skotperez/.zshrc
=&gt; Appending bash_completion source string to /home/skotperez/.zshrc
=&gt; You currently have modules installed globally with `npm`. These will no
=&gt; longer be linked to the active version of Node when you install a new node
=&gt; with `nvm`; and they may (depending on how you construct your `$PATH`)
=&gt; override the binaries of modules installed with `nvm`:

/usr/local/lib
├── @vue/cli@5.0.8
└── npm-check-updates@16.13.2
=&gt; If you wish to uninstall them at a later point (or re-install them under your
=&gt; `nvm` node installs), you can remove them from the system Node as follows:

     $ nvm use system
     $ npm uninstall -g a_module

=&gt; Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR=&quot;$HOME/.nvm&quot;
&#x5B; -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;&amp; \. &quot;$NVM_DIR/nvm.sh&quot;  # This loads nvm
&#x5B; -s &quot;$NVM_DIR/bash_completion&quot; ] &amp;&amp; \. &quot;$NVM_DIR/bash_completion&quot;  # This loads nvm bash_completion
</pre></div>


<p class="wp-block-paragraph">Para que nvm esté disponible hay que cerrar terminal y abrir una nueva.</p>



<h2 class="wp-block-heading">Instalar Node Package Manager (npm) usando nvm</h2>



<p class="wp-block-paragraph">Antes de instalar node con nvm puede ser que node esté ya instalada en el sistema de manera global. Para comprobarlo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ node -v
v20.19.5
$ npm -v
9.2.0
</pre></div>


<p class="wp-block-paragraph">En Debian Trixie, en el momento de escribir este tutorial, la última versión disponible de node es la 20.19.5, y de npm la 9.2.0.</p>



<p class="wp-block-paragraph">Para instalar la última versión de node usando nvm:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ nvm install node
Downloading and installing node v25.0.0...
Downloading https://nodejs.org/dist/v25.0.0/node-v25.0.0-linux-x64.tar.xz...
############################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v25.0.0 (npm v11.6.2)
Creating default alias: default -&gt; node (-&gt; v25.0.0)
</pre></div>


<p class="wp-block-paragraph">La primera versión de node instalada con nvm se configura como la versión a usar por omisión.</p>



<p class="wp-block-paragraph">Si ahora hacemos la comprobación de la versión de node y de npm disponibles por omisión para este usuario:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ node -v
v25.0.0
$ npm -v
11.6.2
</pre></div>


<p class="wp-block-paragraph">Para otro usuario que no haya instalado nvm, la versiones disponibles seguirán siendo las instaladas desde los repositorios de Debian.</p>



<p class="wp-block-paragraph">Para instalar una versión específicamente:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ nvm install 22.21.0
Downloading and installing node v22.21.0...
Downloading https://nodejs.org/dist/v22.21.0/node-v22.21.0-linux-x64.tar.xz...
############################################################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v22.21.0 (npm v10.9.4)
</pre></div>


<p class="wp-block-paragraph">Al instalar una nueva versión, ésta se activa automáticamente en esa terminal. Sin embargo, la versión por omisión sigue siendo la primera que se instaló. Múltiples versiones de node pueden convivir para un usuario, que podrá elegir la que quiere usar en cada caso. Para ver todas las versiones instaladas:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ nvm ls-remote
</pre></div>


<p class="wp-block-paragraph">Para seleccionar una versión de node diferente en un momento dado:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ nvm use 22.21.0
</pre></div>


<h2 class="wp-block-heading">Instalar paquetes en un entorno node instalado con nvm</h2>



<p class="wp-block-paragraph">Al instalar un paquete de manera global en un entorno node instalado con nvm, <strong>el paquete estará globalmente disponible para el usuario</strong>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
$ npm install -g @google/gemini-cli
</pre></div>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/weblogs/nvm-entorno-desarrollo-ejecucion-nodejs-npm-linux-debian/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo instalar Virtualbox 7.2 y vagrant 2.4.9 en Debian 13 Trixie</title>
		<link>https://voragine.net/infraestructura-digital/instalar-virtualbox-7-2-vagrant-2-4-9-debian-13-trixie</link>
					<comments>https://voragine.net/infraestructura-digital/instalar-virtualbox-7-2-vagrant-2-4-9-debian-13-trixie#comments</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Wed, 08 Oct 2025 14:28:32 +0000</pubDate>
				<category><![CDATA[Infraestructura digital]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Debian Trixie]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[Vagrant]]></category>
		<category><![CDATA[Virtualbox]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=7988</guid>

					<description><![CDATA[Actualmente en Debian 13, incluso con los repositorios unstable activos la versión más reciente de Virtualbox que se puede instalar es la 7.0. A mí me está dando muchos problemas ya que no se compila bien el kernel 6.16. La única manera que he conseguido de arreglarlo es instalar Virtualbox 7.2. Como uso Vagrant para gestionar las máquinas virtuales creadas con Virtualbox, he necesitado actualizar a Vagrant 2.4.9 ya que las versiones anteriores no son compatibles con Virtualbox 7.2. La versión más reciente en los repositorios de Debian es la 2.3.7, así que la versión 2.4.9 hay que instalarla desde otras fuentes.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Actualmente en Debian 13, incluso con los repositorios unstable activos la versión más reciente de Virtualbox que se puede instalar es la 7.0. A mí me está dando muchos problemas ya que <a href="https://9to5linux.com/virtualbox-7-1-10-is-out-with-initial-support-for-linux-6-15-and-6-16-kernels">no se compila bien el kernel 6.16</a>. La única manera que he conseguido de arreglarlo es instalar Virtualbox 7.2. Como uso Vagrant para gestionar las máquinas virtuales creadas con Virtualbox, he necesitado actualizar a Vagrant 2.4.9 ya que las versiones anteriores no son compatibles con Virtualbox 7.2. La versión más reciente en los repositorios de Debian es la 2.3.7, así que la versión 2.4.9 hay que instalarla desde otras fuentes.</p>



<h2 class="wp-block-heading">Instalar Virtualbox 7.2 en Debian Testing Trixie</h2>



<p class="wp-block-paragraph">Hay que añadir el repositorio de Oracle para poder instalar la última versión 7.2. <a href="https://www.virtualbox.org/wiki/Linux_Downloads">En la página oficial de Virtualbox se puede encontrar el procedimiento</a>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
deb &#x5B;arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian trixie contrib
</pre></div>


<p class="wp-block-paragraph">En mi caso uso la nueva sintaxis de fuentes de apt. Si es el caso hay que crear el archivo <code>virtualbox.sources</code> en <code>/etc/apt/sources.list.d/</code> con el siguiente contenido:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
Types: deb
URIs: https://download.virtualbox.org/virtualbox/debian
Suites: trixie
Components: contrib
Signed-By: /usr/share/keyrings/oracle-virtualbox-2016.gpg
</pre></div>


<p class="wp-block-paragraph">Luego hay que descargar la clave pública del repositorio de Oracle y añadirla al keyring de apt:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
wget -O- https://www.virtualbox.org/download/oracle_vbox_2016.asc | sudo gpg --yes --output /usr/share/keyrings/oracle-virtualbox-2016.gpg --dearmor
</pre></div>


<p class="wp-block-paragraph">Y por último actualizar los índices de paquetes de apt e instalar Virtualbox 7.2:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt update
sudo apt install virtualbox
</pre></div>


<p class="wp-block-paragraph">En el repositorio de Oracle están disponibles las versiones 7.1 y 7.2, así que se puede instalar también la 7.1, aunque a mí no me solucionaba el problema.</p>



<h2 class="wp-block-heading">Instalar Vagrant 2.4.9 en Debian Testing Trixie</h2>



<p class="wp-block-paragraph">Para instalar la versión 2.4.9 de Vagrant hay que añadir el repositorio de hashicorp. En la página de Hashicorp, la empresa que desarrolla Vagrant, se puede encontrar el <a href="https://developer.hashicorp.com/vagrant/install">procedimiento para añadir sus repositorios e instalar Vagrant</a>.</p>



<p class="wp-block-paragraph">Primero añadir la nueva fuente a apt:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
echo &quot;deb &#x5B;arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP &#039;(?&lt;=UBUNTU_CODENAME=).*&#039; /etc/os-release || lsb_release -cs) main&quot; | sudo tee /etc/apt/sources.list.d/hashicorp.list
</pre></div>


<p class="wp-block-paragraph">En mi caso, de nuevo, con la nueva sintaxis de apt, en vez del comando anterior hay que crear el archivo <code>vagrant.sources</code> en <code>/etc/apt/sources.list.d/</code>:</p>



<p class="wp-block-paragraph">Luego hay que descargar la clave pública del repositorio de Hashicorp y añadirla al keyring de apt:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
</pre></div>


<p class="wp-block-paragraph">Actualizamos ahora los índices de paquetes de apt:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt update
sudo apt install vagrant
</pre></div>


<p class="wp-block-paragraph">En mi caso, como tengo configurado también el repositorio unstable de Debian para ciertos paquetes, para poder instalar vagrant desde el repositorio de hashicorp es necesario darle a éste prioridad sobre el unstable, porque si no se seguirá teniendo como última versión la 2.3.7 y no la 2.4.9. Para ello hay que incluir la excepción en un archivo con un nombre cualquiera, por ejemplo <code>vagrant.preferences</code>, en la carpeta <code>/etc/apt/preferences.d/</code>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Package: vagrant
Pin: release a=trixie
Pin-Priority: 1200
</pre></div>


<p class="wp-block-paragraph">El valor de Pin-Priority tiene que ser mayor que el del repositorio unstable.</p>



<p class="wp-block-paragraph">Para instalarlo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt install -t trixie vagrant
</pre></div>


<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/infraestructura-digital/instalar-virtualbox-7-2-vagrant-2-4-9-debian-13-trixie/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Cómo descargar vídeos en mp4 o audio en mp3 de YouTube con yt-dlt</title>
		<link>https://voragine.net/linux/descargar-videos-mp4-audio-mp3-youtube-yt-dlt</link>
					<comments>https://voragine.net/linux/descargar-videos-mp4-audio-mp3-youtube-yt-dlt#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Tue, 30 Sep 2025 21:05:42 +0000</pubDate>
				<category><![CDATA[Activismo archivístico]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Software libre]]></category>
		<category><![CDATA[archivo digital]]></category>
		<category><![CDATA[youtube]]></category>
		<category><![CDATA[youtube-dl]]></category>
		<category><![CDATA[yt-dlt]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=7590</guid>

					<description><![CDATA[yt-dlt es un fork del proyecto youtube-dl, ya abandonado. Es una interfaz de línea de comandos muy completa que permite descargar vídeo y audio de Youtube y otras plataformas.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://github.com/yt-dlp/yt-dlp">yt-dlt</a> es un fork del proyecto <a href="https://github.com/ytdl-org/youtube-dl">youtube-dl</a>, ya abandonado. Es una interfaz de línea de comandos muy completa que permite descargar vídeo y audio de Youtube y otras plataformas.</p>



<h2 class="wp-block-heading">Instalar yt-dlt en Linux Debian</h2>



<p class="wp-block-paragraph">yt-dlc está en los repositorios oficiales de Debian. Se puede instalar usando apt:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo apt install yt-dlt
</pre></div>


<p class="wp-block-paragraph">yt-dlc es un paquete de Python, así que también se puede instalar con pip en un entorno virtual o con pipx.</p>



<h2 class="wp-block-heading">Descargar vídeo de Youtube en formato mp4</h2>



<p class="wp-block-paragraph">La sintaxis básica para descargar un vídeo es el comando seguido de la URL del vídeo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
yt-dlc https://www.youtube.com/watch?v=vagyIcmIGOQ
</pre></div>


<p class="wp-block-paragraph">Para <a href="https://unix.stackexchange.com/questions/272868/download-only-format-mp4-on-youtube-dl">descargar en formato mp4 con la mejor calidad posible</a>:</p>


<div class="wp-block-syntaxhighlighter-code lang-sh s-code-block"><pre class="brush: bash; title: ; notranslate">
yt-dlc -f &#039;bestvideo&#x5B;ext=mp4]+bestaudio&#x5B;ext=m4a]/mp4&#039; https://www.youtube.com/watch?v=vagyIcmIGOQ
</pre></div>


<h2 class="wp-block-heading">Descargar audio de Youtube en formato mp3</h2>



<p class="wp-block-paragraph">Para descargar música o un podcast de Youtube, se puede descargar únicamente la capa de audio del vídeo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
yt-dlp -x --audio-format mp3 https://www.youtube.com/watch?v=vagyIcmIGOQ
</pre></div>


<p class="wp-block-paragraph">Hay <a href="https://ostechnix.com/yt-dlp-tutorial/">muchas más opciones</a> que permiten descargar metadatos de los vídeos, descargar listas&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/linux/descargar-videos-mp4-audio-mp3-youtube-yt-dlt/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Sustituciones con expresiones regulares en una base de datos WordPress con WP-CLI</title>
		<link>https://voragine.net/wordpress/sustituciones-expresiones-regulares-base-datos-wordpress-wp-cli</link>
					<comments>https://voragine.net/wordpress/sustituciones-expresiones-regulares-base-datos-wordpress-wp-cli#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Wed, 27 Aug 2025 09:27:55 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[expresiones regulares]]></category>
		<category><![CDATA[WP-CLI]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=7857</guid>

					<description><![CDATA[Recientemente he tenido que desactivar y desinstalar en un sitio WordPress el plugin pdf-viewer, ya que está fuera de desarrollo y tiene vulnerabilidades que pueden ser explotadas para infectar el sitio WordPress. Lo he sustituido por el plugin PDF.js Viewer que hace exactamente lo mismo.

El plugin con vulnerabiliades usaba el sortcode [pdfviwer] para incluir un visor PDF en el contenido de un post; el sustituto usa el shortcode [pdfjs-viewer]. La sintaxis de ambos plugins es ligeramente diferente.

La sustitución del plugin implicaba sustituir todos los antiguos shortcodes por el nuevo. Para no hacer esto a mano he recurrido a la interfaz de línea de comandos de WordPress, WP-CLI. Se puede usar el comando search-replace con expresiones regulares. A continuación los pasos que he seguido.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Recientemente he tenido que desactivar y desinstalar en un sitio WordPress <a href="https://wordpress.org/plugins/pdf-viewer/">el plugin pdf-viewer</a>, ya que está fuera de desarrollo y tiene vulnerabilidades que pueden ser explotadas para infectar el sitio WordPress. Lo he sustituido por <a href="https://wordpress.org/plugins/pdfjs-viewer-shortcode/">el plugin PDF.js Viewer</a> que hace exactamente lo mismo.</p>



<p class="wp-block-paragraph">El plugin con vulnerabiliades usaba el sortcode <code>[pdfviwer]</code> para incluir un visor PDF en el contenido de un post; el sustituto usa el shortcode <code>[pdfjs-viewer]</code>. La sintaxis de ambos plugins es ligeramente diferente.</p>



<p class="wp-block-paragraph">La sustitución del plugin implicaba sustituir todos los antiguos shortcodes por el nuevo. Para no hacer esto a mano he recurrido a la interfaz de línea de comandos de WordPress, <a href="https://voragine.net/etiquetas/wp-cli">WP-CLI</a>. Se puede usar el comando search-replace con expresiones regulares. A continuación los pasos que he seguido.</p>



<h2 class="wp-block-heading">Hacer una copia de seguridad de la base de datos</h2>



<p class="wp-block-paragraph">Antes de hacer modificaciones automatizadas, copia de seguridad para poder restaurar inmediatamente si algo va mal:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
wp db export backup.base.de.datos.sql
</pre></div>


<h2 class="wp-block-heading">Probar la expresión de sustitución con <code>--dry-run</code></h2>



<p class="wp-block-paragraph">Antes de hacer las sustituciones es importante lanzar el comando de wp-cli con el modificador <code>--dry-run</code> para probarlo sin riesgo.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
wp search-replace &#039;\&#x5B;pdfviewer width=&quot;&#x5B;^&quot;]*&quot; height=&quot;(&#x5B;^&quot;]*)&quot;&#x5B;^\]]*&quot;\](&#x5B;^\&#x5B;]*)\&#x5B;/pdfviewer\]&#039; &#039;&#x5B;pdfjs-viewer url=\2 viewer_height=\1]&#039; wp_posts --include-columns=post_content --regex --regex-delimiter=# --dry-run
</pre></div>


<p class="wp-block-paragraph">Cosas a tener en cuenta sobre las expresiones regulares de search-replace:</p>



<ul class="wp-block-list">
<li>search-replace usa el motor <code>preg_replace()</code> de PHP.</li>



<li>El modificador <code>--regex-delimiter</code> define el carácter delimitador de la expresión regular. Si se define en el comando no hay que incluirlo en la expresión, WP-CLI lo añade después.</li>



<li>Una búsqueda con sustitución usando regex tarda entre 15 y 20 veces más que una búsqueda sin expresiones regulares. Es una buena idea limitar la búsqueda en base de datos por tablas y columnas si es posible. Si no es posible, se puede hacer al menos al lanzar las pruebas con <code>--dry-run</code>.</li>
</ul>



<h2 class="wp-block-heading">Lanzar el comando definitivo y borrar cachés</h2>



<p class="wp-block-paragraph">Una vez que se ha comprobado que el comando hace lo que queremos, se puede lanzar sin <code>--dry-run</code>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
wp search-replace &#039;\&#x5B;pdfviewer width=&quot;&#x5B;^&quot;]*&quot; height=&quot;(&#x5B;^&quot;]*)&quot;&#x5B;^\]]*&quot;\](&#x5B;^\&#x5B;]*)\&#x5B;/pdfviewer\]&#039; &#039;&#x5B;pdfjs-viewer url=\2 viewer_height=\1]&#039; wp_posts --include-columns=post_content --regex --regex-delimiter=#
</pre></div>


<p class="wp-block-paragraph">Antes de comprobar que todo ha ido bien, borrar todos los cachés. En mi caso, el caché de objetos que usa la web también tiene interfaz WP-CLI:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
wp cache flush
</pre></div>


<h2 class="wp-block-heading">Restaurar la copia de la base de datos si algo salió mal </h2>



<p class="wp-block-paragraph">Si algo no fue bien y no es reparable, siempre se puede restaurar la copia de base de datos que hicimos:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
wp db import backup.base.de.datos.sql
</pre></div>


<p class="wp-block-paragraph">Y en cualquier caso, <strong>si la copia se guardó en una ubicación públicamente accesible, es importante eliminarla o moverla a una ubicación segura.</strong></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/wordpress/sustituciones-expresiones-regulares-base-datos-wordpress-wp-cli/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Actualizar la BIOS en la placa base Gigabyte B550M DS3H</title>
		<link>https://voragine.net/infraestructura-digital/actualizar-bios-gigabyte-b550m-ds3h</link>
					<comments>https://voragine.net/infraestructura-digital/actualizar-bios-gigabyte-b550m-ds3h#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Sun, 24 Aug 2025 12:36:23 +0000</pubDate>
				<category><![CDATA[Infraestructura digital]]></category>
		<category><![CDATA[Gigabyte B550M DS3H]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[placa base]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=7838</guid>

					<description><![CDATA[La BIOS (Basic Input/Output System) es un tipo de software que se encarga de comprobar que el hardware de ordenadores PC está en buen estado y luego de arrancar el sistema operativo. La BIOS es diferente para cada fabricante y modelo de placa base. Como todo software, tiene que actualizarse a las nuevas versiones que vayan liberando los desarrolladores, para solucionar vulnerabilidades y hacer la placa base compatible con los nuevos modelos de otros componentes (procesadores CPU, memoria RAM, discos duros, tarjetas gráficas...) que se conectan a ella.

Mi PC de sobremesa funciona usando una placa base Gigabyte B550M DS3H. No la había actualizado desde que monté joy, mi ordenador actual. Esta placa viene con una interfaz muy cómoda de usar. Para actualizar la BIOS hay una herramienta integrada en ella que permite cargar la nueva versión desde un disco USB.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">La <a href="https://es.wikipedia.org/wiki/BIOS">BIOS</a> (Basic Input/Output System) es un tipo de software que se encarga de comprobar que el hardware de ordenadores PC está en buen estado y luego de arrancar el sistema operativo. La BIOS es diferente para cada fabricante y modelo de placa base. Como todo software, tiene que actualizarse a las nuevas versiones que vayan liberando los desarrolladores, para solucionar vulnerabilidades y hacer la placa base compatible con los nuevos modelos de otros componentes (procesadores CPU, memoria RAM, discos duros, tarjetas gráficas&#8230;) que se conectan a ella.</p>



<p class="wp-block-paragraph">Mi PC de sobremesa funciona usando una placa base Gigabyte B550M DS3H. No la había actualizado desde que monté joy, mi ordenador actual. Esta placa viene con una interfaz muy cómoda de usar. Para actualizar la BIOS hay una herramienta integrada en ella que permite cargar la nueva versión desde un disco USB.</p>



<p class="wp-block-paragraph">Para actualizar la BIOS de la placa base Gigabyte B550M DS3H he seguido estos tres pasos:</p>



<ol class="wp-block-list">
<li>Determinar el modelo de la placa base y la versión instalada de la BIOS. Esto se puede hacer entrando en la interfaz de la BIOS (pulsando la tecla Del al encender el ordenador, cuando salga en pantalla el logo de Gigabyte). En <em>System Information</em> revisar <em>Model Name</em> y <em>BIOS version</em>. Es importante también comprobar la versión del modelo porque las BIOS son diferentes.</li>



<li>Descargar la última versión de la BIOS de la página de Gigabyte. En el momento de escribir estas notas para el modelo B550M DS3H es la F20g. Se puede encontrar la lista de BIOS disponibles en la <a href="https://www.gigabyte.com/us/Motherboard/B550M-DS3H-rev-10-11-12-13/support#support-dl">página del modelo B550M DS3H, versión 1.1</a>, en la pestaña BIOS.</li>



<li>Entrar de nuevo en la BIOS, pulsar F8 para acceder a la herramienta Q-Flash. Una vez en ella se puede seleccionar el disco desde el que cargar la nueva versión. Q-Flash comprobará la integridad del archivo y tras pedir confirmación, comenzará la instalación.</li>
</ol>



<p class="wp-block-paragraph">En <a href="https://skipvids.com/?v=ulO5pCZ8rjk">el tutorial que he consultado</a> recomiendan actualizar versión a versión. Yo tenía la F12, así que he actualizado a la F13; luego F14, F15a&#8230; hasta la F20g.</p>



<p class="wp-block-paragraph">Gigabyte tiene una buena documentación de todas sus placas base. Se puede descargar desde la misma <a href="https://www.gigabyte.com/Motherboard/B550M-DS3H-rev-10-11-12-13/support#support-manual">página del modelo B550M DS3H, en la pestaña manual</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/infraestructura-digital/actualizar-bios-gigabyte-b550m-ds3h/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Plegado de código (folding) en vim con fold</title>
		<link>https://voragine.net/scripting/plegado-codigo-folding-vim-fold</link>
					<comments>https://voragine.net/scripting/plegado-codigo-folding-vim-fold#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Mon, 30 Jun 2025 07:54:55 +0000</pubDate>
				<category><![CDATA[Scripting y programación]]></category>
		<category><![CDATA[code folding]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vim fold]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=7786</guid>

					<description><![CDATA[He encontrado un poco de tiempo para configurar y probar fold, el sistema nativo de plegado de código de vim. Funciona muy bien cuando los archivos están formateados con sangrías. Si no lo están se puede configurar para que funcione por sintaxis y así detecte el lenguaje de programación del archivo. También dispone de un modo manual, para controlar los pliegues por líneas y adaptarlos al archivo concreto que se esté trabajando.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">He encontrado un poco de tiempo para configurar y probar <a href="https://vimhelp.org/fold.txt.html#fold.txt">fold</a>, el sistema nativo de <a href="https://en.wikipedia.org/wiki/Code_folding">plegado de código</a> de vim. Funciona muy bien cuando los archivos están formateados con sangrías. Si no lo están se puede configurar para que funcione por sintaxis y así detecte el lenguaje de programación del archivo. También dispone de un modo manual, para controlar los pliegues por líneas y adaptarlos al archivo concreto que se esté trabajando.</p>



<p class="wp-block-paragraph">vim tiene plugins que añaden plegado de código para lenguajes de programación específicos. Yo uso, por ejemplo, <a href="https://github.com/swekaj/php-foldexpr.vim">PHP-foldexpr</a>. Aunque es un plugin que no se actualiza desde hace más de diez años sigue funcionando perfectamente.</p>



<p class="wp-block-paragraph">Tras configurar fold he desactivado los plugins de plegado específicos. Es cierto que se pierden algunas funcionalidades específicas de cada lenguaje, como el plegado de funciones y clases de PHP con la documentación en línea integrada. Nada imprescindible para mí.</p>



<h2 class="wp-block-heading">Comandos del módulo fold de vim que más uso</h2>



<p class="wp-block-paragraph"><strong>zo</strong> Desplegar pliegue en el que esté el cursor<br><strong>zc</strong> Replegar pliegue en el que esté el cursor<br><strong>zO</strong> Desplegar de manera recursiva el pliegue en el que esté el cursor y los que contenga <br><strong>zC</strong> Replegar de manera recursiva el pliegue en el que esté el cursor y los que contenga <br><strong>zR</strong> Desplegar todos los pliegues<br><strong>zM</strong> Replegar todos los pliegues</p>



<h2 class="wp-block-heading">Configuración persistente del plegado de código nativo con fold en vim</h2>



<p class="wp-block-paragraph">Para que los pliegues aparezcan replegados cuando se abre un archivo se puede añadir la siguiente línea al archivo .vimrc:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
set foldenable
</pre></div>


<p class="wp-block-paragraph">Para que aparezcan desplegadas:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; auto-links: false; title: ; quick-code: false; notranslate">
set nofoldenable
</pre></div>


<p class="wp-block-paragraph">Para cambiar el criterio de plegado, y que vim gestione los pliegues en base a las sangrías, lo que vale para casi todos los casos, se puede incluir <code>foldmethod</code> en .vimrc:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; auto-links: false; title: ; quick-code: false; notranslate">
set foldmethod=indent
</pre></div>


<p class="wp-block-paragraph">Como todo en vim, fold tiene una documentación exquisita, a la que se puede acceder con <code>:help fold</code>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/scripting/plegado-codigo-folding-vim-fold/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Instalar, configurar y usar vim-plug, gestor de extensiones de vim</title>
		<link>https://voragine.net/linux/vim-plug-gestor-plugins-vim</link>
					<comments>https://voragine.net/linux/vim-plug-gestor-plugins-vim#respond</comments>
		
		<dc:creator><![CDATA[skotperez]]></dc:creator>
		<pubDate>Thu, 24 Apr 2025 12:33:18 +0000</pubDate>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Scripting y programación]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vim-plug]]></category>
		<guid isPermaLink="false">https://voragine.net/?p=6149</guid>

					<description><![CDATA[<p>Hace un par de años que cambié de gestor de extensiones en vim a <a href="https://github.com/junegunn/vim-plug">vim-plug</a>. Antes usaba <a href="https://github.com/VundleVim/Vundle.vim">Vundle</a>. Tenía estas notas que escribí entonces sobre cómo instalar, configurar y usar vim-plug y he encontrado algo el tiempo para publicarlas. Ya he olvidado por qué decidí cambiar. Tengo el recuerdo de luchar un poco con Vundle pero revisando mi archivo .vimrc veo que la sintaxis es muy similar.</p>]]></description>
										<content:encoded><![CDATA[<p>Hace un par de años que cambié de gestor de extensiones en vim a <a href="https://github.com/junegunn/vim-plug">vim-plug</a>. Antes usaba <a href="https://github.com/VundleVim/Vundle.vim">Vundle</a>. Tenía estas notas que escribí entonces sobre cómo instalar, configurar y usar vim-plug y he encontrado algo el tiempo para publicarlas. Ya he olvidado por qué decidí cambiar. Tengo el recuerdo de luchar un poco con Vundle pero revisando mi archivo .vimrc veo que la sintaxis es muy similar.</p>
<h2>Instalar vim-plug</h2>
<p>Para instalar vim-plug hay que descargar el archivo que lo continene y colocarlo en la carpeta autoload de vim:</p>
<pre class="brush: bash; title: ; notranslate">curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim</pre>
<h2>Configurar vim-plug</h2>
<p>Para activar vim-plug hay que añadir dos líneas al archivo de configuración de vim, .vimrc:</p>
<pre class="brush: bash; title: ; notranslate">call plug#begin(&#039;~/.vim/plugged&#039;)

call plug#end()</pre>
<p>La ruta entre paréntesis es la carpeta en la que se alojarán las extensiones descargadas. Todas las extensiones que se incluyan entre estas dos líneas serán descargadas y se podrán activar y gestionar usando vim-plug. Por ejemplo:</p>
<pre class="brush: bash; title: ; notranslate">call plug#begin(&#039;~/.vim/plugged&#039;)
&quot; lean &amp; mean status/tabline for vim that&#039;s light as air
&quot; https://github.com/vim-airline/vim-airline
Plug &#039;vim-airline/vim-airline&#039;
call plug#end()</pre>
<h2>Instalar y activar extensiones con vim-plug con :PlugInstall</h2>
<p>Para descargar una extensión basta incluir una nueva línea en l archivo <code>.vimrc</code> en la sección de vim-plug con la dirección de su repositorio precedida de <code>Plug</code>. Luego hay que recargar .vimrc y acceder a la interfaz de gestión de extensiones de vim-plug tecleando <code>:PlugInstall</code>.</p>
<p>Al teclear :PlugInstall en vim se descargarán y activarán todas las extensiones listadas en .vimrc.</p>
<p>Si se quiere actualizar las extensiones, se puede recurrir a <code>:PlugUpdate</code>. Y si se quiere actualizar vim-plug, <code>:PlugUpgrade</code>. Para borrar plugins que hayan sido eliminados de .vimrc, <code>:PlugClean[!]</code>. Para comprobar si hay nuevas versiones de los plugins instalados, <code>:PlugStatus</code>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://voragine.net/linux/vim-plug-gestor-plugins-vim/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
