definir formações no vimrc está sendo ignorado


9

O Vim continua automaticamente um comentário quando pressiono Enter no modo Inserir, o que acho útil.

No entanto, não quero que o comentário continue depois de pressionar 'o' no modo normal para inserir uma nova linha abaixo do final do comentário.

Eu li que preciso remover a opção odo meu formatoptions, então coloquei esta linha no final do meu arquivo vimrc:

set formatoptions-=o

Mas não mudou nada e, quando executo :set formatoptionsdo lado de vim, mostra-me minhas formações croql.

Como faço para me livrar do 'o'?

Editar:

Eu segui alguns passos apontados nos comentários de Sato Katsura:

A solução começa com a execução :verb set fopara ver onde as formações foram modificadas pela última vez.

Aqui está a saída para verb set fo:

  formatoptions=croql
        Last set from /usr/share/vim/vim73/ftplugin/vim.vim


1
@DJMcMayhem Isso não resolve o meu problema. Como você pode ver, adotei as abordagens recomendadas pelas respostas para essa pergunta, e o comportamento do vim não mudou.
theonlygusti

1
Sim, eu vejo isso. Eu estava muito apressado com meu voto apertado, então me retraí agora. No entanto, agora parece um problema com o seu .vimrc, por isso não podemos ajudar até que você o publique. Suponho que um plugin o altere ou não está sendo fonte corretamente.
James

2
Basicamente, a questão é "por que não a linha set formatoptions-=ono meu trabalho vimrc?", Que isso desativa comentários quando prementes oé coincidência :-)
Martin Tournoij

@Carpetsmoker yeah praticamente ... precisa de edição?
theonlygusti

Respostas:


8

Quando viminicia, ele é executado $VIMRUNTIME/ftdetect.vimpara descobrir que tipo de arquivo você está editando; depois, se você 'ftplugin'definiu, ele fornece as $VIMRUNTIME/ftplugin.vimfontes $VIMRUNTIME/ftplugin/&filetype.vim(consulte :help startuppara obter mais detalhes).

Você pode alterar ou substituir $VIMRUNTIME/ftplugin.vimou $VIMRUNTIME/ftplugin/&filetype.vim. Crie uma pasta e subpasta no seu diretório pessoal chamado .vim/after.

Se você deseja substituir as formações de todos os plug-ins de tipo de arquivo, edite $HOME/.vim/after/ftplugin.vimou edite $HOME/.vim/after/ftplugin/lua.vim(ou substitua luapor qualquer idioma - no seu caso vim). Para uma explicação adequada de como isso funciona, consulte :help 'runtimepath'(e :help :runtime).

Coloque o seguinte conteúdo no arquivo:

set formatoptions-=o

Você pode ver se funcionou executando :scriptnames. Você deve obter uma lista como a seguir:

  1: H:\script\vim\vimrc
  2: H:\script\vim\syntax\syntax.vim
  3: H:\script\vim\syntax\synload.vim
  4: H:\script\vim\syntax\syncolor.vim
  5: H:\script\vim\filetype.vim
  6: ~\vimfiles\ftdetect\log.vim
  7: ~\vimfiles\ftdetect\rdp.vim
  8: ~\vimfiles\ftdetect\scratch.vim
  9: ~\vimfiles\ftdetect\sqlite.vim
 10: ~\vimfiles\ftdetect\todo.vim
 11: H:\script\vim\ftplugin.vim
 12: ~\vimfiles\after\ftplugin.vim
 13: ~\vimfiles\colors\desert.vim
 14: H:\script\vim\defaults.vim
 15: H:\script\vim\plugin\getscriptPlugin.vim
 16: H:\script\vim\plugin\gzip.vim
 17: H:\script\vim\plugin\logiPat.vim
 18: H:\script\vim\plugin\manpager.vim
 19: H:\script\vim\plugin\matchparen.vim
 20: H:\script\vim\plugin\netrwPlugin.vim
 21: H:\script\vim\plugin\rrhelper.vim
 22: H:\script\vim\plugin\spellfile.vim
 23: H:\script\vim\plugin\tarPlugin.vim
 24: H:\script\vim\plugin\tohtml.vim
 25: H:\script\vim\plugin\vimballPlugin.vim
 26: H:\script\vim\plugin\zipPlugin.vim
 27: H:\script\vim\syntax\lua.vim
 28: H:\script\vim\ftplugin\lua.vim

Observe as linhas 11 e 12. Seus caminhos de arquivo serão um pouco diferentes.


1
Isso pode ser útil para alguém. Na minha situação, eu uso o vim-plug, e alguns plugins (não sei qual) mudou o formatoptions, no entanto o meu .vim/afteré originado após esses plugins ...
voldikss

Eu acho que o comando correto é :scriptnames.
Jari Turkia

Por tentativa e erro, eu aprendi que tentando forçar formatoptionsem ~/.vim/after/ftplugins.vimnão funciona - então eu encontrei este argumento que espécie de explica o porquê.
precisa saber é o seguinte

3

Descobri que posso fornecer uma solução improvisada usando um comando automático.

A seguinte linha no seu .vimrcarquivo deve aplicar as novas formações em todos os lugares:

autocmd FileType * set formatoptions-=o

No entanto, isso não chega a resolver o problema; Ainda não entendo por que um simples setnão foi suficiente e, como foi apontado nos comentários, essa solução não é ideal.


1
Isso pode funcionar , mas é muito desleixado e não é a solução que eu recomendaria.
James

@DJMcMayhem hmm, que possíveis problemas eu poderia encontrar usando esta solução? Sinta-se livre para postar uma resposta fornecendo uma solução melhor, eu obviamente preferem que :)
theonlygusti

1
Por que não @DJMcMayhem? O problema é quase certamente porque um dos conjuntos de tipos de arquivos formatoptions(por exemplo, Perl, Ruby e vários outros definem isso). Parece uma solução aceitável?
Martin Tournoij 26/08/16

@Carpetsmoker Suponho que seja justo. Eu não tinha pensado nisso. Parece estranho alterar uma configuração em um autocmd, em vez de apenas defini-la diretamente.
James

2
@SatoKatsura Depende do que você quer, eu acho. Algumas pessoas podem preferir nunca adicionar um caractere de comentário ao usá-lo, oindependentemente do tipo de arquivo. Nesse caso, isso parece apropriado.
Martin Tournoij 27/08/16

2

Eu tive uma experiência semelhante ao OP.

Eu descobri que testava sendo adicionado ao meu, formatoptionsapesar de tentar deliberadamente desativá-lo.

Depois de usar :verbose set fopara ter certeza de que era proveniente de .vimrc, notei que o comportamento parecia depender de onde coloquei as formações no meu arquivo .vimrc. Eu descobri que isso estava acontecendo por causa de onde eu tinha colocado set nocompatibleno meu arquivo:

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

Acontece que isso é especificamente chamado em :help nocompatible:

                   'compatible' 'cp' 'nocompatible' 'nocp'
'compatible' 'cp'   boolean (default on, off when a |vimrc| or |gvimrc|
                    file is found, reset in |defaults.vim|)
            global
            {not in Vi}
    This option has the effect of making Vim either more Vi-compatible, or
    make Vim behave in a more useful way.

    This is a special kind of option, because when it's set or reset,
    other options are also changed as a side effect.
    NOTE: Setting or resetting this option can have a lot of unexpected
    effects: Mappings are interpreted in another way, undo behaves
    differently, etc.  If you set this option in your vimrc file, you
    should probably put it at the very start.

Depois de seguir este bom conselho, meus formatoptionsforam preservados conforme desejado. Não sei se o OP estava enfrentando esse problema exato ou se havia alguma outra interação, mas fiquei feliz em descobrir o que estava causando isso. Espero que isso ajude alguém a descobrir o que está (inicialmente inexplicavelmente) alterando suas configurações.

Também gosto do autocmd de theonlygusti - existem algumas opções que eu nunca quero definir, não importa o tipo de arquivo. Eu estou olhando para você t.


2

Como muitos de nós, usuários do Vim, estamos sofrendo com isso, investiguei um pouco mais.

Minha solução é criar o $HOME/.vim/after/ftplugin.vimcomo sugerido por @ abcq2 apenas para perceber, isso não vai mudar nada. Dada a lista fornecida por :scriptnames, esse arquivo é fonte muito cedo. No entanto, a segunda sugestão de criar um $HOME/.vim/after/ftplugin/lua.vimarquivo LUA ajuda.

Ao straceaprender, aprendi que os pós-plug-ins genéricos do tipo de arquivo são originados antes que os pós-plug-ins específicos do tipo e do tipo de arquivo sejam originados após o tipo de arquivo. Não é muito intuitivo, mas é assim que funciona.

Há mais informações no meu blog sobre isso.


Não sei por que você acha que after/ftpluginisso ajudaria. A melhor maneira é usar substituições específicas do tipo de arquivo (usando um comando automático FileType ou um after/<filetype>.vimarquivo específico ). Veja também a ajuda de:h ftplugin-overrule
Christian Brabandt 6/06/19

Eu estou pensando que iria ajudar, porque @ abcq2 sugeriu isso em sua resposta acima. Eu acho que estou usando after/<filetype>.vimna minha resposta.
Jari Turkia

0

Eu olhei para ver quais arquivos / caminhos que vimtentaram carregar, usando strace(como descrito aqui ), então criei um ~/.vim/after/plugin/diretório (foi o último local de configuração que vimtentou carregar) e, em seguida, coloquei meu link ~/.vimrcpara esse local:

mkdir -p ~/.vim/after/plugin/
ln -s ~/.vimrc ~/.vim/after/plugin/ 

O que eu fiz com strace:

Basicamente, eu corri:

strace -o ~/vim_strace vim

... saia imediatamente vim( :q!). Em seguida, carreguei ~/vim_strace( $ vim ~/vim_strace) e fui para o final ( :$). Então eu comecei a ler de baixo procurando por linhas começando com openat(AT_FDCWD, "/home/karl/......

A primeira coisa que vejo é:

openat(AT_FDCWD, "/home/karl/.viminfo", O_RDONLY) = 3

Mas não é aí que eu quero minhas opções de configuração. A próxima linha, logo acima da .viminfolinha, era:

openat(AT_FDCWD, "/home/karl/.vim/after/plugin/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (No such file or directory)

... "Esse arquivo ou diretório não existe", eh? Parece um vencedor. Então, esse foi o que eu escolhi.

Agora, funciona perfeitamente.

Espero que isso ajude alguém em algum lugar.


1
Desculpe, mas não vejo como isso é uma resposta a esta pergunta. Você pode esclarecer e explicar por que isso resolverá o problema com formações?
filbranden

Porque ele realmente vimhonra as opções no .vimrcarquivo. Releia e certifique-se de entender a pergunta e a minha resposta.
Karl Wilbur

1) Seu vimrc (inteiro) não deve ser executado no contexto de um plugin. 2) Algo como adicionar uma linha ~/.vim/after/plugin/formatoptions.vimcom set fo-=oé mais palatável ... Mas isso ainda não funciona quando um plug-in de tipo de arquivo substitui isso. Por exemplo, abra o Vim (sem arquivo ou um arquivo não relacionado) e use :epara abrir ou criar um *.vimarquivo. Você verá que as formações estão onele novamente, uma vez que está sendo definido para esse buffer ftplugin/vim.vime seu after/pluginarquivo não poderá substituí-lo.
filbranden

De qualquer forma ... Sua resposta não é totalmente clara sobre o que você está tentando realizar aqui. Eu posso ver (agora?) Que você está tentando carregar o vimrc pela última vez no processo de inicialização, depois de todos os plug-ins. Sua resposta não indica realmente isso, ajudaria se você explicasse isso ... Além disso, enquanto strace é bom e tudo, responder "qual diretório é o último" é bastante fácil, basta olhar para :set rtp?você ver que ~/.vim/afteré último. Mas, como mencionado anteriormente, isso realmente não funciona, pois foserá redefinido pelos plugins ft e esse é realmente o problema aqui.
filbranden

Absolutamente, e absolutamente funciona. Eu estava tendo exatamente o mesmo problema que o OP após atualizar para o Ubuntu 20.04. Minha solução o "consertou", pois carregou o meu ~/.vimrc depois que os outros plugins foram carregados, permitindo que eu ~/.vimrcsubstituísse os padrões, como pretendido.
Karl Wilbur
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.