vimrcファイルをデバッグするにはどうすればよいですか?


80

Vimに問題があり、それがvimrcファイルにある可能性があります(または、ファイルである可能性があると言われていvimrcます)。

これを確認するにはどうすればよいですか?それ私のvimrcファイルである場合、問題が正確にどこにあるかをどのように知ることができますか?

回答:


79

最初に行うことは、デフォルト設定でVimを起動することです。

vim -u NONE -U NONE -N

-u NONEあなたのvimrcをロードすることを防止するVimは、-U NONEあなたのgvimrcを読み込みからVimを防ぎ、そして-N何の互換モードを使用しないようにVimを伝えます(これは必須ではありませんが、ほとんどのVimユーザーは「互換モード」に使用されていません)。ことに注意NONEされた必要なすべて大文字にします。

Windowsでは、新しいショートカットを作成してこれらのフラグ追加できます1

  • 問題が解決しない場合は、vimrcに問題がないことがわかります。

  • 問題が解消された場合、vimrcファイルの何かが原因です。

それは私のvimrcではありません!

ほら!行って質問してください。vimrcファイルなしでVimを起動しようとしたことを忘れないでください!

だから、それは私のvimrcです、今は何ですか?

まだ行っていない場合は、まずvimrcファイルのバックアップコピーを保存することをお勧めします。

プラグインを確認する

次に行う可能性があるのは、最初にすべてのプラグインを無効にすることです。プラグインはVimでかなり変更される可能性があります。これで問題が解決した場合は、プラグインを1つずつ有効にして、どのプラグインを見つけようとします 。どのプラグインが問題の原因であるかを特定したら、このプラグインのドキュメントを読むか、またはでタグ付けされた質問をすることで、それを試して修正できますplugin-<name>

それはならないプラグイン、そしてあなたが持っていないすべてのあなたの問題を引き起こしているもののアイデアを、それは試行錯誤の手順です。vimrcの1つ以上の行をコメントアウトし、Vimを起動して、問題が発生するかどうかを確認し、問題が発生しなくなるまでこの手順を繰り返します。これを行う最も速い方法は次のとおりです。

  1. vimrcファイルの約半分をコメントアウト(または削除)します。
  2. Vimを再起動するか、または新しいVimを開く(のvimrcをリロードすることはありません設定が解除されないよう、十分に良いです)。
  3. 問題はなくなりましたか?削除した部分を元に戻し(ここではVimを開いたまま、元に戻す機能を使用すると便利です)、追加した部分で手順1を繰り返します。
  4. 問題は引き続き発生しますか?手順1に進みます。

最後に、問題を引き起こす単一のオプションまたはいくつかのオプションの組み合わせが必要です。Vimのオプションの詳細については、次を使用して確認できます。

:help 'option_name'

ここで引用符は重要であり、通常は引用符なしでも機能しますが、引用符を省略すると間違ったページが表示されることがあります。

ヘルプページを読んでもまだ混乱している場合は、どこに質問すればよいかがわかります;-)

単一のプラグインのデバッグ

あなたはそれについて質問をするために、おそらく、単一のプラグインを特定したい場合は、できるだけ読み込みますがしたい、まだプラグインを読み込みます。Vimのパッケージ機能を使用して簡単にこれを行うことができます。これには、Vim 8またはNeovimの比較的最近のバージョンが必要です。

  1. 新しい空のディレクトリを作成します。~/pluginこの例ではパスを使用します。次に、プラグインを通常のpack/plugins/start/$nameディレクトリに配置します。例えば:

    git clone https://github.com/fatih/vim-go.git ~/plugin/pack/plugins/start/vim-go
    
  2. test-vimrc次の内容のファイルを作成します。これはVimがからプラグインをロードすることを保証します~/pluginディレクトリおよびない~/.vim ディレクトリ:

    set nocompatible
    set packpath=~/plugin,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,~/plugin/after
    packloadall!
    
    syntax on
    filetype plugin indent on
    
  3. Vimを起動するには:

    vim -U NONE -u ~/test-vimrc
    

    これで、この単一のプラグインを備えた最小限のvimrcができました。


脚注

1たとえば、64ビットWindowsでは、ショートカットは次のようになります"C:\Program Files (x86)\Vim\vim74\vim.exe" -u NONE -U NONE -N。作成するには、ショートカットを使用するファイルエクスプローラで右クリックし、[新規]-> [ショートカット]を選択して、ショートカットテキストを貼り付けます。Vimが別の場所にインストールされている場合は、Vimパスを変更する必要があります。


7
この手法は、バイナリ検索障害のローカリゼーションと呼ばれます。
-tommcdo

2
バグを見つけたら、これは.vimrcをバージョン管理下に置くのに最適なタイミングです:)ほとんどの場合、それが最後に行った変更の1つになり、奇妙な動作をします。
escrafford

1
-U NONE持っている場合は必要ありません-u NONE
アントニー

@MartinTournoij 初めての読者が理解しやすいように編集提案しました。気に入ってくれるといいな。ありがとう!
jpaugh

1
ありがとう@jpaugh; その順序はもっと理にかなっていると思います。
マーティントゥルノイ

31

-Dスクリプトから最初のコマンドを実行した後、デバッグモードに移行するデバッグ専用のVimパラメーターがあります。

たとえば、プラグインなしでVimをデバッグモードで実行するには、次のように実行します。

vim --noplugin -D

n/ nextを入力して次の行を解析し、を押し続けEnterます。

そして、contまたはq背面に移動するにはvimインターフェース。

GUIバージョンを使用している場合guiは、vimrcにコマンドを入力して、そのコマンドの直後にデバッグを開始します。

使用可能なコマンドのリストを表示するには、Ctrl+ dを押します

続きを読む:


1
これは、エラーメッセージの原因となっている.vimrcファイルの単純な間違いを見つけるのに最も役立ちました。すぐにできるので、まずこれを試す価値があります。
-RichVel

1
@kenorbこのコマンドは驚くばかりです。別のエディターに行かないようにしてください。
TheLazyChap

11

すでに述べたように、まずvim -u NONE -U NONE -N、バニラvimが正常に機能することを確認してください。

その後、通常どおりにvimを起動して確認します

:messages

すべての警告とエラーを表示する問題の後にvim内部から。

最後に、次のコマンドでvimを起動します

vim -V9logfile.log

これはと呼ばれるログファイルが作成されますlogfile.log-V9ログレベルであり、あなたの問題を再現してみてください。


11

もう1つのヒント:穴居人のように見えるかもしれませんが、.vimrcに:echom "message"を追加して、実行されているものと実行されていないものを確認するのが好きです。

例えば

if executable('ag')
  :echom "AG FOUND"

  ...
endif

これは、ifブロックが実行されているかどうかなどをすばやく確認するのに役立ちます。vimを次に起動したときに、メッセージがコンソールに出力されます。


6
また、echom別の興味深いコマンドを使用する:messagesと、エコーされたメッセージの完全なログを取得できます。起動後にそれらを見ると便利な場合があります。
statox

これはほとんど私が必要とするもので、cpoptionsの値がvimrcのポイントにあることを確認したいのですが、 ":set cpoptions?"の出力をどのようにエコーしますか。?
マイク・リッペルト

10

私が見つけた助けの1つは、一部を切り替える変数のコレクションを保持する.vimrcことです。これにより、コメントアウトすることなく、その一部を無効または有効にできます。それはまたあなたの組織について考えることを強制する心地よい副作用を持っています.vimrc

" feature toggles in vimrc
let g:vimrc_feat_pathogen               = 1
let g:vimrc_feat_core_minimal           = 1
let g:vimrc_feat_matchit                = 1
let g:vimrc_feat_options                = 1
let g:vimrc_feat_colors_and_highlight   = 1
let g:vimrc_feat_key_rebinding_arpeggio = 1
let g:vimrc_feat_key_rebinding          = 1
let g:vimrc_feat_autocommand_group      = 1
let g:vimrc_feat_custom_definitions     = 1
let g:vimrc_feat_load_opam              = 1

以下で保護されたセクションの例を示しifます。

if g:vimrc_feat_core_minimal
    set nocompatible
    filetype plugin indent on
    syntax on
endif

1

私のvimrcの読み込み時間は非常に遅く、約400ミリ秒でした。次の行を削除するだけで20ミリ秒に短縮しました。

silent !mkdir ~/.config/nvim/backups > /dev/null 2>&1

そのような外部コマンドへの呼び出しがないことを確認してください。


1
サイトへようこそ!これは便利なヒントですが、非常に一般的な質問よりもかなり具体的です。たとえば、この質問への回答として追加した方がいいかもしれません。または、知識を共有したいだけなら、自分の質問に答えることができますか?
リッチ

0

始めるための簡単な手順を次に示します。

  1. .vimrcファイル全体の内容をコメント化する
  2. 実行して.vimrcをリロードする:source %か、:so $MYVIMRC
  3. ファイルの目立たない部分のコメントを外します(通常は先頭から開始)
  4. エラーが見つかるまで、手順2と3を繰り返します。
  5. エラーを修正します。

1
適切に大文字を使用し、句読点を付ければ、この答えははるかに良いものになります。

バイナリ検索でこれを行うことを強くお勧めします。
D.ベンノーブル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.