Projectionist

The Projectionist plugin makes it easy to define navigation commands. Projectionist uses a simple JSON format for configuration. Here’s the full listing for the blog-classic project:

 
blog-classic/.projections.json
​ 	{
"app/app.js": { "type": "main" },
"app/models/*.js": { "type": "model" },
"app/adapters/*.js": { "type": "adapter" },
"app/serializers/*.js": { "type": "serializer" }
 	}

Running :EModel author will open the right author model depending on the projectioist configuration. Other commands are :SType for horizontal split, :VType for vsplit, :Ttype for new tab

Alternate files

Projectionist allows to add alternate files, such as a matching unit test, extending the projections config like so

{
"app/models/*.js": {
"type": "model",
"alternate": "tests/unit/models/{}-test.js"
 	  },
"tests/unit/models/*-test.js": {
"type": "modelTest",
"alternate": "app/models/{}.js"
 	  },
 	}
 

The :A command can be used to move to the alternate file

Dispatch

The :Dispatch command also allow you to quickly use multiple compilers in the same project without having to switch back and forward using various invocations to :compiler x followed by :make or :Make. It is possible to provide a default, dictionaries to provide alias to Dispatch

let g:dispatch_compilers={}
let g:dispatch_compilers['npm run lint']='tslint'
// set a default
​:let b:dispatch='npm run lint'

ALE

Asynchronous linting engine, support a configuration file. Most likely replaced by LSP these days?

Grepper

While the built-in :grep command runs synchronously, the Grepper plugin makes it possible to run grep asynchronously. It also provides a common interface for multiple grep tools in Vim, such as git grep.

If you run the :Grepper command without any arguments, you’ll see a prompt where you can enter your query. The options depend on what you have set on the global config, for example if you run the following code

​=> 	​:echo g:grepper.rg.grepprg​
​<= 	rg -H --no-heading --vimgrep
​=> 	​:echo g:grepper.rg.grepformat​
​<= 	$f:$l:%c:%m

You could use ripgrep as a grep tool. You can add support for new tools just by adding the necessary keys to the g:grepper dictionary.

EditorConfig

The editorconfig plugin allows to create an .editorconfig file with specific preferences for file types about space, tabs, etc like so:

​ 	root = true
​ 	
​ 	[*]
​ 	end_of_line = lf
​ 	charset = utf-8
​ 	
​ 	[*.{js,json}]
​ 	indent_style = space
​ 	indent_size = 2
​ 	
​ 	[Makefile]
​ 	indent_style = tab

Once we have used the editor config, we can see effectively that if we check properties on a file, we get the values we expect:

​=> 	​:edit demo.js​
​=> 	​:set expandtab? shiftwidth?​
​<= 	  expandtab
​ 	  shiftwidth=2
​=> 	​:set fileformat? fileencoding?​
​<= 	  fileformat=unix
​ 	  fileencoding=utf-8

When you open a file, the EditorConfig plugin looks in that file’s directory for an .editorconfig file. It then checks for an .editorconfig file in the parent directory, and the grandparent directory, and so on. If you set root=true however the upstream search completes. Note that the editorconfig properties do not have the same name as vimconfig properties