Puedo usar vim -u filename
para usar en filename
lugar 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 ~/.vim
para 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 joe
tiene un conjunto de alias para vim
este aspecto (pero originalmente configurado usando la $HOME
variable para hacer esta dinámica):
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Luego, el usuario joe
hace algo en la línea de sudo su -
(pero con magia adicional), lo que resulta en que se carguen las .bashrc
otras golosinas . El usuario ahora tiene exactamente el mismo alias para establecer como se muestra arriba./home/joe
root
root
vim
El problema es que esto .vimrc
se 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.joe
o lo que sea, lo que da como resultado un valor diferente para $HOME
. Así que codificar una ruta absoluta a la ~/.vim
carpeta no parece ser una buena idea. Sin embargo, en nuestro escenario anterior, el usuario root
no tiene una carpeta /root/.vim
que, 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/.vim
cuando se inicia como root
(suponiendo que alias
se 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 $HOME
creo 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
~/.vim
por 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&rtp
lugar 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 &rtp
expande~
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.vim
directorio personal y debería funcionar tanto comosu
su cuenta normal.fuente
$HOME
en mi propia cuenta, se resolvería,/home/joe
pero como root todavía/root
... así que no se gana nada. Se.vimrc
supone 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 lasudo
reset_env
y luego usarla como basertp
?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'