search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

vimでjavascriptが記述されたファイルを開くとエラーメッセージが表示される

環境

2016/12/28時点

  • macOS Sierra - version 10.12.2
  • vim - version 7.4.898

※ vim は Homebrewによりインストールしたもの。.vimrcが借り物。

障害

拡張子に.jsが付いたファイルを開くとエラーメッセージが表示されるが、リターンキー押下によりファイルを開ける。

Error detected while processing function <SNR>34_BufWritePostHook[4]..<SNR>34_UpdateErrors[15]..<SNR>34_CacheErrors[26]..31:
line    7:
E713: Cannot use empty key for Dictionary
Press ENTER or type command to continue

調査

状態を確認する

vimの現在のバッファのファイルタイプを確認するとjavascriptとして扱われている。

:echo &filetype
javascript

エラーメッセージでググる

"E713: Cannot use empty key for Dictionary"
※ 全文で一致しないので部分で探る。

エラーメッセージで検索すると、プラグインが原因のように思える。

障害の発生箇所を特定する

.vimrcファイルのプラグインを読み込む行を全てコメントアウトして起動するとエラーメッセージが表示されない。

一つずつコメントアウトを外して起動してエラーが発生するプラグインを探すと、NeoBundle 'pmsorhaindo/syntastic-local-eslint.vim'を有効するとエラーメッセージが表示された。

障害の詳細を調べる

syntastic-local-eslint.vimをググると、eslintによりjavascriptの構文チェックを行うプラグインらしい。

解決

eslintをインストールする

eslintが使えるか確認すると未インストールだったのでインストールを行い、eslint単体で実行できるようにする。

$ pwd
/Users/stupiddog/projects/node/app001

$ npm list -g eslint
/usr/local/lib
└── (empty)

npm ERR! code 1

$ npm list eslint
/Users/stupiddog/projects/node/app001
└── (empty)

npm ERR! code 1
$ npm install --save-dev eslint

$ npm list eslint
app001@0.1.0 /Users/stupiddog/projects/node/app001
└── eslint@3.12.2 

$ ./node_modules/.bin/eslint -v
v3.12.2

$ echo "{}" > .eslintrc.json

eslintの動作を確認する

次に、javascriptが記述されたファイルをチェックしてみる。
※ eslintの設定は取り敢えず動かすので空っぽ

$ echo "{}" > .eslintrc.json

$ cat main.js 
const {app, BrowserWindow} = require('electron');

$ ./node_modules/.bin/eslint main.js 

/Users/stupiddog/projects/node/app001/main.js
  1:1  error  Parsing error: The keyword 'const' is reserved

✖ 1 problem (1 error, 0 warnings)

障害の解消を確認する

vimで開いてエラーメッセージが表示されずチェックが行われることを確認した。

まとめ

借り物の.vimrcで実行してプラグインに必要なプログラムをインストールしていなかったというオチ。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0
Help us understand the problem. What are the problem?