javascriptvimjscs

How can I integrate jscs autofix feature into vim?


I'm trying to get a command I can run within vim to get jscs auto correct formatting issues in my code. So far I've come up with :

:nmap <F5> :!jscs -x .<CR>

which is ok, but it runs it on the entire directory and I need to confirm to vim that I want to reload the buffer. Is there a way to get vim to fix the current file only and didsplay the changes without reloading?


Solution

  • This will pipe the current file through jscs's fix mode whenever you save the file (your mileage may vary using this in practice!):

    function! JscsFix()
        "Save current cursor position"
        let l:winview = winsaveview()
        "Pipe the current buffer (%) through the jscs -x command"
        % ! jscs -x
        "Restore cursor position - this is needed as piping the file"
        "through jscs jumps the cursor to the top"
        call winrestview(l:winview)
    endfunction
    command! JscsFix :call JscsFix()
    
    "Run the JscsFix command just before the buffer is written for *.js files"
    autocmd BufWritePre *.js JscsFix
    

    It also creates a command JscsFix which you can run whenever you want with :JscsFix. To bind it to a key (in this case <leader>g) use noremap <leader>g :JscsFix<cr>.