Puedo usar vim -u filenamepara usar en filenamelugar de mi predeterminado .vimrc. Estoy usando este método al cambiar los contextos de usuario ( su) para usar mi .vimrc aunque se ejecute como superusuario.
¿Cómo puedo lograr lo mismo también para la carpeta, que por defecto es ~/.vimpara poder apuntar Vim desde la línea de comandos a una carpeta alternativa?
Lo que quiero lograr
De acuerdo, supongamos usuario joe( HOME=/home/joe) y usuario root( HOME=/root). El usuario joetiene un conjunto de alias para vimeste aspecto (pero originalmente configurado usando la $HOMEvariable para hacer esta dinámica):
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Luego, el usuario joehace algo en la línea de sudo su -(pero con magia adicional), lo que resulta en que se carguen las .bashrcotras golosinas . El usuario ahora tiene exactamente el mismo alias para establecer como se muestra arriba./home/joerootrootvim
El problema es que esto .vimrcse usa en varios sistemas y en varios escenarios. A menudo se llama a la cuenta de Joe joe, pero a veces será algo similar local.joeo lo que sea, lo que da como resultado un valor diferente para $HOME. Así que codificar una ruta absoluta a la ~/.vimcarpeta no parece ser una buena idea. Sin embargo, en nuestro escenario anterior, el usuario rootno tiene una carpeta /root/.vimque, sin embargo, se espera que exista de forma predeterminada a través de loaded .vimrc( /home/joe/.vimrc).
Lo que quiero lograr, preferiblemente en la línea de comando, es hacer que Vim use complementos, etc., desde abajo /home/joe/.vimcuando se inicia como root(suponiendo que aliasse configure como se muestra, se pueden ignorar otros casos). Si hay algún método dinámico a través de VimScript, proporcione punteros. Pero $HOMEcreo que usar variables como las que conducirían a una captura 22.
fuente

ln. como 'mv ~ / .vim ~ / .vim-whatever && ln -s ~ / .vim-whatever ~ / .vim', haga lo mismo para.vimrc. envuelva todo eso con un poco de alias bash para que pueda cambiar fácilmente de una forma u otraRespuestas:
Vim busca en ~ / .vim porque ese directorio está en la lista predeterminada en 'runtimepath', abreviado como 'rtp'. Para decirle a Vim que busque en otro lado, tendrá que especificar completamente un valor 'rtp' diferente, o editar el valor predeterminado usando una llamada a sustituto (), por ejemplo. Si solo desea que Vim busque primero en un lugar diferente para sus archivos de configuración, no le importe que también se vea en ~ / .vim, y no le importe que no se vea en su alternativa después del directorio, el comando es bastante simple:
Ver
Reemplazar .vim con su directorio alternativo requiere un poco más de escritura.
Intenté reemplazarlo
~/.vimpor otro camino, pero no pude igualarlo~, así que seguí adelante y publiqué lo que tenía.Editar
La razón por la que no pude coincidir
~con el valor de 'rtp' es que cuando el valor se obtiene como el valor en&rtplugar de la salida de:set rtp?,~se expande al nombre de ruta completo del directorio de inicio del usuario. No hay~en el resultado.Los siguientes trabajos.
fuente
\\~hace el trabajo. Un escape para Bash, supongo. De todos modos, esto todavía no funciona, porque algo es diferente acerca de cómo VimScript maneja el~.:set rtp?muestra "~ / .vim" pero que se:echo &rtpexpande~al nombre completo de la ruta. Lo siguiente parece funcionar: `vim --cmd 'let & rtp = sustitute (& rtp, $ HOME." / \. Vim "," alternate "," g ")'. Actualizaré mi respuesta.En el .vimrc que elija, puede especificar la ruta de tiempo de ejecución:
Si está utilizando a su persona
.vimrc, puede configurarlo en su.vimdirectorio personal y debería funcionar tanto comosusu cuenta normal.fuente
$HOMEen mi propia cuenta, se resolvería,/home/joepero como root todavía/root... así que no se gana nada. Se.vimrcsupone que esto funciona en todas las plataformas y versiones de Vim y establecer una ruta absoluta lo rompe por completo. Sin embargo, gracias por tomarse el tiempo de responder..bashrc, ¿podría establecer una variable, por ejemplo$REALHOME, que esté exenta de lasudoreset_envy luego usarla como basertp?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'