Dizer ao Vim para usar custom .vimrc é fácil, mas como dizer para usar caminho alternativo ao invés de ~ / .vim?

14

Eu posso usar vim -u filename para usar filename em vez do meu padrão .vimrc . Estou usando esse método ao alternar os contextos do usuário ( su ) para usar meu .vimrc , embora seja executado como superusuário.

Como posso conseguir 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, considere o usuário joe ( HOME=/home/joe ) e usuário root ( HOME=/root ). O usuário joe tem um alias definido para vim , que se parece com isso (mas definido originalmente usando a variável $HOME para tornar essa dinâmica):

alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'

Em seguida, o usuário joe faz algo nos moldes de sudo su - (mas com mágica adicional), resultando na .bashrc e outras vantagens de /home/joe a serem carregadas para root . O usuário root tem agora exatamente o mesmo alias para vim definido como mostrado acima.

O problema é que esse .vimrc é usado em vários sistemas e em vários cenários. Muitas vezes, a conta de Joe chama-se joe , mas às vezes é algo como local.joe ou qualquer outra coisa, resultando em um valor diferente para $HOME . Tão difícil codificar um caminho absoluto para a pasta ~/.vim não parece ser uma boa ideia. No entanto, em nosso cenário acima, o usuário root não tem uma pasta /root/.vim , que, no entanto, deve existir por padrão pelo% 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 de debaixo de /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 $HOME levaria a uma captura 22, eu acho.

    
por 0xC0000022L 06.03.2013 / 02:18

2 respostas

8

O vim procura em ~ / .vim porque esse diretório está na lista padrão em 'runtimepath', abreviado como 'rtp'. Para que o Vim procure em outro lugar, você terá que especificar completamente um valor 'rtp' diferente, ou editar o padrão usando uma chamada para substituir () por exemplo. Se você quer apenas que o Vim procure em um lugar diferente pelos seus arquivos de configuração primeiro, não se preocupe se ele também aparece em ~ / .vim, e não se importa que ele não pareça em sua alternativa após o diretório, o comando é bem simples:

vim --cmd 'set rtp^=alternate_dir'

Veja

:help --cmd
:help :set^=

Substituir o .vim pelo diretório alternativo exige um pouco mais de digitação.

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'

Eu tentei substituir ~/.vim por outro caminho, mas não consegui igualar o ~ , então fui em frente e postei o que eu tinha.

Editar

O motivo pelo qual não consegui corresponder o ~ no valor de 'rtp' é que quando o valor é obtido como o valor de &rtp em vez da saída de :set rtp? , o ~ é expandido para o nome completo do caminho do diretório inicial do usuário. Não há ~ no resultado.

Os seguintes trabalhos.

vim --cmd 'let &rtp = substitute(&rtp, $HOME."/\.vim", "alternate", "g")'
    
por 06.03.2013 / 04:07
3

No arquivo .vimrc escolhido, você pode especificar o caminho de tempo de execução:

let &runtimepath=/path/to/specific/vim/folder

Se você estiver usando sua pessoa .vimrc , poderá definir isso como seu diretório .vim e deverá funcionar como su e sua conta normal.

    
por 06.03.2013 / 03:52