vimrcのset formatoptionsは無視されます


9

挿入モードでEnterキーを押すと、Vimは自動的にコメントを続行します。

ただし、通常モードで「o」を押してコメントの末尾の下に新しい行を挿入した後、コメントを続けたくありません。

オプションoをmyから削除する必要があることを読んだformatoptionsので、vimrcファイルの最後に次の行を挿入します。

set formatoptions-=o

しかし、何も変わっていません:set formatoptions。vimのisideから実行すると、formatoptionsがであることがわかりますcroql

「o」を取り除くにはどうすればよいですか?

編集:

佐藤桂のコメントで指摘されたいくつかのステップを踏みました:

ソリューションは:verb set fo、formatoptionsが最後に変更された場所を確認するための実行から始まります。

出力はverb set fo次のとおりです。

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


1
@DJMcMayhemそれは私の問題を解決しません。ご覧のとおり、私はその質問の回答で推奨されているアプローチを採用しており、vimの動作に変更はありません。
theonlygusti

1
はい、わかりました。私は近い投票で急いでいたので、今撤回しました。ただし、現在はの問題の.vimrcようですので、投稿するまでサポートできません。プラグインがそれを変更するか、正しくソースされていないようです。
ジェームズ

2
基本的に、質問は「なぜset formatoptions-=ovimrc の行が機能しないのですか?」であり、これが押されたときにコメントが無効になるということoです:-)
Martin Tournoij

@Carpetsmokerええかなり...編集が必要ですか?
theonlygusti

回答:


8

ときにvim起動すると、それが実行さ$VIMRUNTIME/ftdetect.vimを見つけるためにあなたが編集しているファイルの種類。次に、'ftplugin'設定している場合は、$VIMRUNTIME/ftplugin.vimどのソースをソースします$VIMRUNTIME/ftplugin/&filetype.vim(詳細は:help startupを参照)。

あなたは変更または上書きすることができます$VIMRUNTIME/ftplugin.vim$VIMRUNTIME/ftplugin/&filetype.vim。という名前のホームディレクトリにフォルダとサブフォルダを作成します.vim/after

すべてのファイルタイププラグインのformatoptionsをオーバーライドする場合は、編集します$HOME/.vim/after/ftplugin.vim。それ以外の場合は編集します$HOME/.vim/after/ftplugin/lua.vim(またはluaいずれかの言語に置き換えます-あなたの場合はvim)。これがどのように機能するかの適切な説明については、:help 'runtimepath'(および:help :runtime)を参照してください。

次の内容をファイルに入れます。

set formatoptions-=o

を実行することで、動作するかどうかを確認できます:scriptnames。次のようなリストが表示されます。

  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

11行目と12行目に注意してください。ファイルパスは少し異なります。


1
これは誰かに役立つかもしれません。私の状況では、私はvim-plugを使用し、一部のプラグイン(どちらかわかりません)がを変更しましたがformatoptions.vim/afterこれらはこれらのプラグインの後に供給されます...
voldikss

正しいコマンドだと思います:scriptnames
Jari Turkia

試行錯誤で、強制しようformatoptionsとしても~/.vim/after/ftplugins.vimうまくいかないことを知りました。それから、この理由を説明するこの議論に遭遇しました。
Stabledog

3

自動コマンドを使用してその場しのぎのソリューションを提供できることがわかりました。

.vimrcファイルの次の行は、すべての場所に新しいformatoptionsを適用する必要があります。

autocmd FileType * set formatoptions-=o

ただし、これで問題が解決するわけではありません。なぜ単純なsetだけでは不十分なのかはまだわかりません。コメントで指摘されているように、このソリューションは理想的ではありません。


1
これはうまくいくかもしれませんが、非常に慎重で、私が推奨する解決策ではありません。
ジェームズ

@DJMcMayhemうーん、このソリューションを使用するとどのような問題が発生する可能性がありますか?より良い解決策を提供する回答を投稿してください。私は明らかにそれを好みます:)
theonlygusti

1
なぜ@DJMcMayhemでないのですか?ファイルタイプセットの1つformatoptions(Perl、Ruby、および他のいくつかがこれを設定するなど)が原因で問題がほぼ確実に発生します。これは許容できる解決策のようですか?
Martin Tournoij 16

@Carpetsmoker公正だと思います。私はそのことを考えていませんでした。直接設定するのではなく、autocmdで設定を変更するのは奇妙に思えます。
ジェームズ

2
@佐藤桂どうするかによると思います。一部の人々oは、ファイルタイプに関係なく使用するときにコメント文字を決して追加しないことを好むかもしれません。その場合、これは適切に思われます。
Martin Tournoij、2016

2

OPと同じような経験をしました。

故意に無効にしようとしたにもかかわらずt、追加されていることがわかりましformatoptionsた。

を使用:verbose set foして.vimrcからのものであることを確認した後、.vimrcファイルのformatoptionsのどこに配置するかによって動作が異なるように見えました。set nocompatibleファイルのどこに配置したかが原因で発生していることがわかりました。

set formatoptions=qj
set nocompatible

:set fo?
  formatoptions=tcq

これは特にで呼び出されていることがわかります: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.

この良いアドバイスに従った後、私formatoptionsは望み通りに保存されました。OPがこの正確な問題に直面していたのか、それとも他のやり取りであったのかはわかりませんが、何が原因であるのかを見つけてうれしく思います。うまくいけば、これが他の誰かが設定を変更している(最初は不可解)ものを理解するのに役立ちます。

また、onlygustiのautocmdも気に入っています。ファイルの種類に関係なく、設定したくないオプションがいくつかあります。私はあなたを見ていますt


2

私たちの多くのVimユーザーはこれに苦しんでいるので、私は行ってこれをもう少し調べました。

私の解決策は$HOME/.vim/after/ftplugin.vim、@ abcq2によって提案されたとおりにを作成することです。これを実現するには、何も変更されません。によって与えられたリストを考えると:scriptnames、そのファイルはソースの方法が早すぎます。ただし、$HOME/.vim/after/ftplugin/lua.vimLUAファイルのを作成するという2番目の提案は役立ちます。

straceING によって、ファイルタイプの一般的なアフタープラグインがファイルタイプの前に供給され、ファイルタイプ固有のアフタープラグインがファイルタイプの後に供給されることがわかりました。あまり直感的ではありませんが、そのように動作します。

これについては私のブログにもっと情報があります。


なぜあなたafter/ftpluginが助けになると思うのか分かりません。むしろ、より良い方法は、ファイルタイプ固有のオーバーライドを使用することです(FileTypeオートコマンドまたは特定のafter/<filetype>.vimファイルを使用)。ヘルプも参照してください:h ftplugin-overrule
クリスチャンブラバンド

@ abcq2が上記の彼の答えでそれを提案したので、私はそれが役立つと思います。私after/<filetype>.vimは私の答えで使用していると思います。
ヤリトゥルキア

0

ここで説明するようにvimを使用してロードしようとしたファイル/パスを確認し、次にディレクトリを作成し(ロードしようとした最後の構成場所でした)、その場所にシンボリックリンクしました。strace~/.vim/after/plugin/vim~/.vimrc

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

私がしたことstrace

基本的に、私は走った:

strace -o ~/vim_strace vim

...その後すぐに終了しますvim:q!)。次に、ロードして~/vim_strace$ vim ~/vim_strace)、最後まで行きました(:$)。次に、下から読み始め、で始まる行を探しましたopenat(AT_FDCWD, "/home/karl/.....

私が最初に目にするのは:

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

しかし、それは私の設定オプションが欲しいところではありません。上記の右隣の行、.viminfo行、でした。

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

...「そのようなファイルまたはディレクトリはありません」、え?勝者のようです。それで、それは私が選んだものです。

今、完全に動作します。

これが誰かを助けることを願っています。


1
申し訳ありませんが、これがこの質問に対する答えであるかはわかりません。これによりformatoptionsの問題が解決される理由を明確にして説明していただけますか?
filbranden

それは実際にファイルのvimオプションを尊重するため.vimrcです。もう一度読んで、質問と私の答えの両方を理解していることを確認してください。
Karl Wilbur

1)あなたの(全体の)vimrcは実際にはプラグインのコンテキストで実行することは想定されていません。2)で1行~/.vim/after/plugin/formatoptions.vimを追加するようなものset fo-=oはもっと口当たりがいいです...しかし、ファイルタイププラグインがそれをオーバーライドするとき、それはまだ機能しません。たとえば、Vimを開き(ファイルなし、または関連のないファイル)、次にを使用:eして*.vimファイルを開くか作成します。formatoptionsがo再びその中に含まれていることがわかります。これは、そのバッファに対して設定されてftplugin/vim.vimおり、after/pluginファイルで上書きできないためです。
filbranden

いずれにしても...あなたがここで何を達成しようとしているのか、あなたの答えは完全に明確ではありません。すべてのプラグインの後、起動プロセスの最後にvimrcをロードしようとしていることがわかります(今ですか?)あなたの答えはあなたにも...それを説明することで開始した場合straceのは、すべていいですとしながら、それだけを見て、「ディレクトリが最後である」とても簡単です答え、役立つだろう、という状態は本当にない:set rtp?ことがわかりますあなた~/.vim/afterです最終。しかし、前述のように、foftプラグインによってリセットされるため、これは実際には機能しません。これが実際に問題です。
filbranden

それは完全に機能し、完全に機能します。私が持っていた正確なのUbuntu 20.04にアップグレードした後にOPと同じ問題が。私の解決策はそれを「修正」しました。他のプラグインがロードされた~/.vimrc にロードされたので~/.vimrc、意図したようにデフォルトを上書きすることができました。
Karl Wilbur
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.