Vim-native "which" and "exec" functions targeted at local node project bin, falling back to which
, for easy vim integration with dev-depenendencies in node-based build processes.
Place autoload/nrun.vim
in your autoload directory, or add to your config with plugin tool of your choice (Plug 'jaawerth/nrun.vim'
with vim-plug, Plugin 'jaawerth/nrun.vim'
with Vundle, etc)
With vim + Syntastic
In your ~/.vimrc
or in a javascript ftplugin
au BufEnter *.js let b:syntastic_javascript_eslint_exec = nrun#Which('eslint')
This is my favorite setup. In your ~/<nvim-config>/init.vim
or ~/<nvim-config>/ftplugin/javascript.vim
:
" you can set your enabled makers globally (like below) or on the buffer level as part of an autocmd - see Neomake docs for details
let g:neomake_javascript_enabled_makers = ['eslint']
" when switching/opening a JS buffer, set neomake's eslint path, and enable it as a maker
au BufEnter *.js let b:neomake_javascript_eslint_exe = nrun#Which('eslint')
For more on Neomake config, see their docs - I like to combine the above with:�
au BufWinEnter,BufWritePost *.js,*.jsx,*.whateverelse Neomake
or simply
au BufWinEnter,BufWritePost * Neomake
A "which" that first tries to see if you're in a node project (traversing the current directly up looking for package.json
and node_modules/.bin/<command>
), falling back to "which" if root or home folders are hit without a match.
Executes the above and passes the results to system() for you. Throws if no command found.
Trim the whitespace around a string (used internally to account for the newline from which
)
To change the fallback command, pass it in as the second argument. For example, on Windows shell you may want to use where
: nrun#Which('tape', 'where')
To disable fallback so it only looks within the local project, pass in 0 as the second argumetN: nrun#Which('tape', 0)
g:nrun_which_cmd
can be set to globally set a fallback, and let g:nrun_disable_which = 1
will disable it unless overriden by the function call.
Eases the pain of integrating vim into your JavaScript/node build tools.
Many of the development and build processes inherent to node require the use of locally-installed executables for linting, testing, building, etc. While npm scripts often work well for this, it can be inconvenient to set an npm script for every runnable dependency. There's npm bin
to find your local bin directory, but it's noticeably slow, and can bog down vim plugins.
For a time I used a bash script, or the node-based npm-which, but preferred a self-contained vimscript implementation with no global dependencies (which
aside).