linux vim javascript,VIM的JavaScript补全

VIM的JavaScript补全

最近微软出了个Visual Studio Code,听说很diao,尤其是对JavaScript的补全支持很令人惊艳!

如果你是一个vim党,那么请淡定!

在JavaScript开发过程中,使用vim内置的ins-completion再加上一些插件,我们同样可以获得很牛逼的completion支持!

ins-completion

vim其实已经提供了很好的代码补全支持。

整行

快捷键:

dfd1edf11aead729f4e4da7c62bca16a.gif

文件名

快捷键:

1218f16238f7dd212ec4bb2596d00c99.gif

当前文件中的关键字

快捷键:或

4001cde9b50553367f15e97614eb4ae9.gif

complete选项所指定的范围中的关键字

快捷键:或

20b468acda908661f3078d14952e041f.gif

、跟、类似,但是查找范围更广,不局限于当前文件。

如上图所示,我打开两个文件,在src/echarts.js中补全src/component.js中的关键字,就可以使用或。

具体查找范围由complete选项所规定,详见:help E535。

dictionary中的关键字

快捷键:

假设你有一个javascript.dict文件,其内容如下: 1

2

3

4

5Promise

Proxy

let

class

extends

设置:set dictionary+=/path/to/es6.dict之后就可以用来补全这些关键字了。

f12fab59f3a79722e030aa94b50556d7.gif

omni completion

快捷键:

这个是基于语义上的补全,vim会猜测光标之前的关键词,然后给出补全。

53147ea253bc2c296df0ff5a859de659.gif

更多补全方式,请看:help ins-completion。

YouCompleteMe

按键太多了,真不开心...

先上一个自动打开候选菜单的插件,再继续吹牛逼吧...

YouCompleteMe是一个不错的选择,补全速度比neocomplete快。

基本配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16let g:ycm_min_num_of_chars_for_completion = 3

let g:ycm_autoclose_preview_window_after_completion=1

let g:ycm_complete_in_comments = 1

let g:ycm_key_list_select_completion = ['', '']

let g:ycm_key_list_previous_completion = ['', '']

" 比较喜欢用tab来选择补全...

function! MyTabFunction ()

let line = getline('.')

let substr = strpart(line, -1, col('.')+1)

let substr = matchstr(substr, "[^ \t]*$")

if strlen(substr) == 0

return "\"

endif

return pumvisible() ? "\" : "\\"

endfunction

inoremap =MyTabFunction()

现在,对于关键字补全、路径补全、omni completion,YouCompleteMe可以自动打开补全菜单了。

eeba9826927eac25d9a2a9cc18f43536.gif

恩,看起来ins-completion还不错,但是跟vscode比起来还不够!

vim的omni completion实际上可以支持更牛逼的completion,于是有了tern。

tern_for_vim

tern_for_vim是ternjs给vim量身定做的插件,它实际上是给javascript实现了一个新的omnifunc,叫做tern#Complete。

当我们按下时,vim实际上就是调用omnifunc。

tern_for_vim改写了omnifunc,接管了vim的omni completion。

vim安装了tern_for_vim之后,在项目的根目录中新建一个配置文件.tern-project,以echarts为例,配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13{

"libs": [

"browser"

],

"plugins": {

"requirejs": {

"baseUrl": "./src",

"paths": {

"zrender": "bower_components/zrender/src"

}

}

}

}

libs字段指明要导入哪些库,tern内置了以下几种库:

browser

chai

ecma5,默认自动导入

ecma6

jquery

underscore

我们现在只配置了browser,看看会发生什么事情?

c80cc278a5d2e387e75913f276e771e1.gif

如果你的项目还用到了jquery,那么你可以把jquery加到.tern-project的libs字段中,效果如下:

404b4dfe2d3da51c07e15ac5c5a537fb.gif

plugins更猛,可以补全模块化的代码,tern支持以下几种插件:

angular.js

complete_string.js

component.js

doc_comment.js,默认自动启用

nodejs

requirejs

看看echarts项目配置了requirejs插件之后会怎么样?

ab5a0270dc511f550a6d9544aeab74fc.gif

碉堡了,有木有!

我们再也不用担心某个模块到底提供了哪些方法,require它,输入点号,然后提示,你所要做的就是选择!

如果第三方库在代码中提供足够的文档注释,我们甚至都不需要再去查文档了!

哦,稍等,听说vscode还支持nodejs的补全。

在nodejs项目下配置一下.tern-project:

1

2

3

4

5

6{

"libs": [],

"plugins": {

"node": {}

}

}

看看tern对nodejs项目的支持如何?

d5f2d51c2619ba698f72935abe87779a.gif

嗯,貌似还可以!

小结

如果你是一个vim粉丝,那希望本文对你有所帮助!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值