Como faço para que o Vim ignore toda a configuração do usuário, como se tivesse sido instalada recentemente?

21

Para garantir que o comportamento não seja afetado pela minha configuração pessoal, desejo iniciar o Vim de maneira a ignorar todos os meus arquivos de configuração instalados pelo usuário, como se o Vim tivesse sido instalado pela primeira vez pela primeira vez e o usuário o executasse imediatamente.

Isso é abordado na FAQ, que sugere que a resposta é iniciar o Vim com o seguinte comando:

vim -u NONE -U NONE -N -i NONE

Isso ocorre na maior parte do caminho, mas a runtimepathopção ainda contém ~/.vime, principalmente, ~/.vim/after(por exemplo, se eu ativar a detecção de tipo de arquivo posteriormente e alterar o tipo de arquivo, o código ~/.vim/after/syntax/the_relevant_filetype.vimserá executado).

Posso solucionar esse problema específico invocando os seguintes comandos na inicialização *:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

... mas não tenho certeza se:

  1. Esta é uma solução robusta: esses são os únicos caminhos que podem fazer com que a configuração do usuário entre em vigor? Existe mais alguma coisa que eu não tenha pensado?
  2. Existe uma maneira melhor de alcançar o resultado desejado.

* Ao usar --cmdou -u vimrcargumentos shell, ou simplesmente digitando-los manualmente.

Edição : Aqui está um exemplo específico do tipo de problema que estou tentando corrigir. (Embora eu queira que a solução corrija outros possíveis problemas que ainda não tenha contado.):

  1. Crie um arquivo ~ / .vim / after / ftplugin / c.vim, contendo o conteúdo:

    noremap i :echom "This is not default behaviour"<CR>
    

    Agora, temos algumas configurações instaladas pelo usuário que queremos ignorar. Vamos testar a solução sugerida pelo FAQ.

  2. Execute o Vim com o comando:

    vim -u NONE -U NONE -N -i NONE
    
  3. Digite os comandos:

    :filetype plugin on
    :set ft=c
    i
    

Comportamento desejado : o Vim deve entrar no modo Inserir. Isso é o que faria se não existisse configuração do usuário.

Comportamento observado : o Vim imprime "Este não é um comportamento padrão"

Rico
fonte
Em um sistema semelhante ao Unix, e se você fizer HOME=/dev/null vim -u NONE:?
Muru
Boa idéia, e provavelmente vale a pena adicionar como resposta, mas não é perfeito . Você obviamente perde a capacidade de :cd ~, por exemplo , mas também o local padrão do viminfoarquivo está em $ HOME, o que pode causar o E138. Acho que criar um diretório novo e vazio e usá-lo para $ HOME pode ser a melhor solução.
Rich
@muru Apenas me ocorreu que, se você está definindo $ HOME, presumivelmente não precisa especificar -u NONE?
Rich
11
nesse caso, /tmppoderia ser melhor, foi o meu primeiro pensamento, mas depois escolhi / dev / null como um buraco negro. ... Ou algo assim HOME=$(mktemp -d) vim ....
Muru
Não vai ler o sistema vimrc se você não usar -u NONE? Depende do comportamento que você precisa, suponho.
Muru

Respostas:

16

A partir do Vim 8.0.1554 (infelizmente ainda não o Neovim), você pode usá-lo vim --clean. Este método é recomendado por :help bugs.

:help --clean docs:

Semelhante a "-u DEFAULTS -U NONE -i NONE":
- as inicializações de arquivos e variáveis ​​de ambiente são ignoradas
- 'runtimepath' e 'packpath' são configurados para excluir entradas do diretório inicial (isso não ocorre com -u DEFAULTS).
- o | defaults.vim | o script é carregado, o que implica 'nocompatible': use default Vim
- no | gvimrc | script carregado
- nenhum arquivo viminfo é lido ou gravado

jasonszhao
fonte
11
Agradável! Isso é muito mais simples do que brincar com a $HOMEvariável. Desenvolvedores do Goodjob Vim. E obrigado pela resposta!
Rich Rich
11
--cleantambém funciona com o neovimmaster agora ( github.com/neovim/neovim/commit/… , a ser incluído no 0.4.0), mas não exclui o diretório inicial.
Christian Clason
(ainda, esse patch está aguardando para ser portado)
Christian Clason
11

Uma maneira de eliminar arquivos específicos do usuário seria usar um valor diferente de $HOME. Para permitir que nada seja lido ou gravado (como viminfo), você pode usar /dev/null:

HOME=/dev/null vim -u NONE

Isso causará erros viminfo, portanto, você pode criar uma pasta temporária ou usar uma existente (como /tmp):

HOME=$(mktemp -d) vim -u NONE

Com isso $HOME, -u NONEpode não ser necessário, dependendo do que o administrador adicionou ao sistema vimrc. Por exemplo, em todos os sistemas de laboratório I administram, eu adicionei um /etc/vim/vimrc.local(origem por padrão do Vim embalados /etc/vim/vimrc) que tem nocompatible, syntaxetc., set, e filetype onbem.

muru
fonte
3
vim -i NENHUM para impedir o carregamento de viminfo
Christian Brabandt
1

Não posso responder muito disso, mas um ponto que não vejo mencionado, e estou respondendo a uma interpretação do que está no título

Como faço para que o Vim ignore toda a configuração do usuário, como se tivesse sido instalada recentemente?

alguns sugeriram vim -u NONE ouvim -u NORC

de certa forma, isso é um pouco mais barebones do que nenhum arquivo vimrc. Quando digito 'i', ele não diz 'inserir'. Você ainda pode querer dizer 'inserir'. Se você iniciou o vim com o arquivo vimrc em branco, ele mostraria insert

isso ocorre porque o vim carrega uma configuração padrão primeiro.

Você pode apontar o vim para esse arquivo padrão para obter o efeito do seu arquivo vimrc em branco. Verifique se você possui /etc/vim/vimrcou pode fazer vim -u /etc/vim/vimrc ou no osx, o arquivo padrão é/usr/share/vim/vicmrc

barlop
fonte
Eu acho que é exatamente isso que o vim --clean fará por você.
quemeraisc
@quemeraisc vim --cleanirá carregar defaults.vim. Esta resposta está se referindo ao sistema vimrc (veja :help system-vimrc.), Que acho que não está carregado vim --clean.
Rich
@barlap: Para confusão evitar com defaults.vim (ver :help defaults.vim), pode ser melhor para mudar o texto default configpara system vimrcnesta resposta. Ou melhor ainda, discuta os dois na resposta!
Rich
0

Do Vim-FAQ 2.5 :

2.5 Eu tenho um problema "xyz" (alguns) com o Vim. Como determino que há um problema na minha instalação ou no Vim? / Encontrei um bug no Vim?

Primeiro, você precisa descobrir se o erro está nos arquivos de tempo de execução reais ou em qualquer plug-in distribuído com o Vim ou se é um efeito colateral simples de qualquer opção de configuração do seu .vimrc ou .gvimrc. Então, primeiro, inicie o vim assim:

vim -u NONE -U NONE -N -i NONE

isso inicia o Vim no modo nocompatível (-N), sem ler o arquivo viminfo (-i NONE), sem ler nenhum arquivo de configuração (-u NONE por não ler o arquivo .vimrc e -U NONE por não ler o arquivo .gvimrc) ou mesmo plugin.

mMontu
fonte
11
Apesar de estar no FAQ, isso realmente não funciona, pelos motivos mencionados na pergunta.
Rich
@ Rich Do seu comentário à pergunta: ensure that none of the behaviour I'm seeing is caused by user config- parece que você está tentando fazer exatamente o que está sendo explicado nesta FAQ. Reli sua pergunta e ainda não entendo quais são as razões que você mencionou.
MMontu
Na verdade, estou tentando fazer exatamente o que está sendo explicado no FAQ. Mas a solução fornecida não funciona, devido à runtimepathconfiguração.
Rich
O que exatamente está errado sobre o runtimepath? Parece o padrão para esta opção, conforme explicado em :help rtp. Como esse valor está afetando seu teste?
MMontu
@ Rich Quero dizer, você vê alguma diferença ao comparar com uma nova instalação depois de ativar a detecção de tipo de arquivo?
MMontu