【问题标题】:JSHint doesn't work in vimJSHint 在 vi​​m 中不起作用
【发布时间】:2018-09-30 05:08:16
【问题描述】:

在调用:SyntasticInfo:

Syntastic 版本:3.8.0-94(Vim 800、Linux、GUI)
文件类型的信息:javascript
全局模式:活动
文件类型 javascript 处于活动状态
当前文件将被自动检查
可用检查器:jshint
当前启用的检查器:jshint

我已经通过 vim-pathogen 安装了 JSHint 和 Syntastic。

为了使语法检查起作用,应该配置什么?

Syntastic's documentation on JSHint中,除了

这个检查器是使用“makeprgBuild()”函数初始化的,并且 因此它接受描述的标准选项 |syntastic-config-makeprg|。

附带说明,语法检查确实适用于 TypeScript,使用 Syntastic。

.vimrc:

syntax on
colorscheme industry

execute pathogen#infect()
filetype plugin on

set textwidth=0
set softtabstop=4
let &shiftwidth=&softtabstop
set autoindent
set number

" Used for using buffers and tabs the right way.
set hidden

" Enable airline
let g:airline#extensions#tabline#enabled = 1

" Use powerline fonts
let g:airline_powerline_fonts = 1

"Open NERDTree on startup
"autocmd vimenter * NERDTree

map <C-n> :NERDTreeToggle<CR>

:let mapleader = "/"

" Mappings to access buffers (don't use "\p" because a
" delay before pressing "p" would accidentally paste).
" \l       : list buffers
" \b \f \g : go back/forward/last-used
" \1 \2 \3 : go to buffer 1/2/3 etc
nnoremap <Leader>l :ls<CR>
nnoremap <Leader>b :bp<CR>
nnoremap <Leader>f :bn<CR>
nnoremap <Leader>g :e#<CR>
nnoremap <Leader>1 :1b<CR>
nnoremap <Leader>2 :2b<CR>
nnoremap <Leader>3 :3b<CR>
nnoremap <Leader>4 :4b<CR>
nnoremap <Leader>5 :5b<CR>
nnoremap <Leader>6 :6b<CR>
nnoremap <Leader>7 :7b<CR>
nnoremap <Leader>8 :8b<CR>
nnoremap <Leader>9 :9b<CR>
nnoremap <Leader>0 :10b<CR>
" It's useful to show the buffer number in the status line.
"set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

" Enable color highlighting by Powerline in vim.
set t_Co=256

" Display buffer number in Airline
 let g:airline#extensions#tabline#buffer_nr_show = 1

" Enable tab support in Airline
let g:airline#extensions#tabline#enabled = 1

autocmd BufNewFile,BufRead *.ts setlocal filetype=typescript

" Close a buffer without closing its window
map <Leader>q :bp<bar>sp<bar>bn<bar>bd<CR>

" Split a window without resizing the others
set noequalalways

" Don't autoindent when editing text files --- no suffix filenames.
set noautoindent
augroup vimrc_indent
    au!
    autocmd FileType * set autoindent
augroup END

"Toggle scrolling by display lines instead of file lines.
noremap <silent> <Leader>w :call ToggleWrap()<CR>
function ToggleWrap()
  if &wrap
    echo "Wrap OFF"
    setlocal nowrap
    set virtualedit=all
    silent! nunmap <buffer> <Up>
    silent! nunmap <buffer> <Down>
    silent! nunmap <buffer> <Home>
    silent! nunmap <buffer> <End>
    silent! iunmap <buffer> <Up>
    silent! iunmap <buffer> <Down>
    silent! iunmap <buffer> <Home>
    silent! iunmap <buffer> <End>
  else
    echo "Wrap ON"
    setlocal wrap linebreak nolist
    set virtualedit=
    setlocal display+=lastline
    noremap  <buffer> <silent> <Up>   gk
    noremap  <buffer> <silent> <Down> gj
    noremap  <buffer> <silent> <Home> g<Home>
    noremap  <buffer> <silent> <End>  g<End>
    inoremap <buffer> <silent> <Up>   <C-o>gk
    inoremap <buffer> <silent> <Down> <C-o>gj
    inoremap <buffer> <silent> <Home> <C-o>g<Home>
    inoremap <buffer> <silent> <End>  <C-o>g<End>
    noremap  <buffer> <silent> k gk
    noremap  <buffer> <silent> j gj
    noremap  <buffer> <silent> 0 g0
    noremap  <buffer> <silent> $ g$
  endif
endfunction

"Disable folding
set foldenable

"JS syntax checking
let g:syntastic_javascript_checkers = ['jshint']

【问题讨论】:

  • 向我们展示您的.vimrc,尤其是与您的 Syntastic 设置相关的内容。
  • 那么,你做了什么,你预期会发生什么,而发生了什么?你是怎么断定它不起作用的?
  • @lcd047 例如,为了检查其功能,我在函数定义中省略了右括号。这不会触发 Syntastic 的错误。其他形式的不正确语法也是如此。
  • @ChristianGibbons 我已经添加了我的 .vimrc。 :)
  • 当您使用与 syntastic 相同的选项对同一文件运行 jshint 时,是否会触发错误?你知道,Syntastic 本身并不关心 JavaScript 语法。

标签: vim syntax-highlighting jshint


【解决方案1】:

您没有让 Syntastic 运行的任何配置。您可以从运行:help syntastic-recommended 时列出的推荐设置开始:

set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

您也可以使用 :SyntasticCheck 手动调用 Syntastic

如果您希望按照其中一个 cmets 中的建议进行即时 linting,那么您应该从 Syntastic 切换到 ALE(我一般推荐 ALE)

【讨论】:

  • ALE 就像一个魅力。 :) 太糟糕了 Syntastic 不支持实时语法检查。
  • Syntastic 是在 vim 集成作业控制之前设计的,以允许异步操作。这对当时可用的东西来说很棒。 ALE 从一开始就拥有可使用的作业控制功能,并且是专门围绕此功能设计的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2023-03-15
  • 1970-01-01
  • 2012-09-20
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多