Eu posso usar vim -u filename
para usar em filename
vez do meu padrão .vimrc
. Estou usando esse método ao alternar contextos de usuário ( su
) para usar o meu .vimrc
mesmo sendo executado como superusuário.
Como posso obter o mesmo também para a pasta que por padrão é ~/.vim
para que eu possa apontar o Vim da linha de comando para uma pasta alternativa?
O que eu quero alcançar
Ok, suponha usuário joe
( HOME=/home/joe
) e usuário root
( HOME=/root
). O usuário joe
tem um alias definido para o vim
qual se parece com isso (mas originalmente definido usando a $HOME
variável para tornar isso dinâmico):
alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'
Em seguida, o usuário joe
faz algo como sudo su -
(mas com mágica adicionada), resultando no carregamento de .bashrc
outros itens . O usuário agora tem exatamente o mesmo alias para definir, como mostrado acima./home/joe
root
root
vim
O problema é que isso .vimrc
é usado em vários sistemas e em vários cenários. Muitas vezes, a conta de Joe é chamada joe
, mas às vezes será algo parecido local.joe
ou qualquer outra coisa, resultando em um valor diferente para $HOME
. Portanto, codificar um caminho absoluto para a ~/.vim
pasta não parece ser uma boa ideia. No entanto, em nosso cenário acima, o usuário root
não possui uma pasta /root/.vim
que, no entanto, é esperada que exista por padrão através do carregado .vimrc
( /home/joe/.vimrc
).
O que eu quero alcançar - de preferência na linha de comando - é fazer com que o Vim use plugins etc. por baixo /home/joe/.vim
quando iniciado como root
(assumindo que o alias
está definido como mostrado - outros casos podem ser ignorados). Se houver algum método dinâmico via VimScript, forneça ponteiros. Mas usar variáveis como a $HOME
que levaria a um problema 22, eu acho.
fonte
ln
. como 'mv ~ / .vim ~ / .vim-qualquer coisa && ln -s ~ / .vim-qualquer coisa ~ / .vim`, faça o mesmo para.vimrc
. embrulhar tudo isso com algum apelido festa para que você possa facilmente alternar uma forma ou de outraRespostas:
O Vim procura em ~ / .vim porque esse diretório está na lista padrão em 'runtimepath', abreviado como 'rtp'. Para dizer ao Vim para procurar em outro lugar, você precisará especificar completamente um valor 'rtp' diferente ou editar o padrão usando uma chamada para substituir (), por exemplo. Se você deseja que o Vim procure primeiro em um local diferente seus arquivos de configuração, não se importe com a aparência em ~ / .vim e não se preocupe com a aparência do diretório alternativo após, o comando é bem simples:
Vejo
Substituir .vim pelo seu diretório alternativo requer um pouco mais de digitação.
Tentei substituir
~/.vim
por outro caminho, mas não consegui igualar o~
, então fui em frente e postei o que tinha.Editar
O motivo pelo qual não pude corresponder o
~
valor no 'rtp' é que, quando o valor é obtido como o valor de&rtp
e não como a saída de:set rtp?
, ele~
é expandido para o nome do caminho completo do diretório inicial do usuário. Não existe~
no resultado.Os seguintes trabalhos.
fonte
\\~
faz o trabalho. Uma fuga para Bash, eu acho? De qualquer forma, isso ainda não funciona, porque algo é diferente sobre como o VimScript lida com o~
.:set rtp?
mostra "~ / .vim", mas que se:echo &rtp
expande~
para o nome do caminho completo. O seguinte parece funcionar: `vim --cmd 'let & rtp = substitute (& rtp, $ HOME." / \. Vim "," alternate "," g ")'. Vou atualizar minha resposta.No .vimrc que você escolher, você pode especificar o caminho de tempo de execução:
Se você estiver usando sua pessoa
.vimrc
, poderá configurá-la no seu.vim
diretório pessoal e ele deve funcionar tanto quanto nasu
sua conta normal.fonte
$HOME
então, em minha própria conta, isso resolveria,/home/joe
mas como raiz ainda é/root
... então nada é ganho. Isto.vimrc
é suposto para trabalhar em todas as plataformas e versões vim e definir um caminho absoluto quebra totalmente isso. Obrigado por reservar um tempo para responder, no entanto..bashrc
, você pode definir uma variável, por exemplo$REALHOME
, isenta da variávelsudo
reset_env
e usá-la como basertp
?alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'