微信开发中 ACCESS TOKEN 过期失效的解决方案详解
1128
2022-10-27
Completor是vim8的一个异步代码完成框架
Completor
Completor is an asynchronous code completion framework for vim8. New features of vim8 are used to implement the fast completion engine with low overhead. For using semantic completion, external completion tools should be installed.
Requirements
vim8,compiled with python or python3
Install
vim8 builtin package manager:
$ mkdir -p ~/.vim/pack/completor/start$ cd ~/.vim/pack/completor/start$ git clone https://github.com/maralla/completor.vim.git
pack
$ pack install maralla/completor.vim
vim-plug
Plug 'maralla/completor.vim'
Completers
Filename
When the input matches a file path pattern the file name will be automatically completed.
Buffer
This is the fallback completer. When no semantic completer found the buffer completer will be used and will complete based on the current buffers.
Ultisnips and neosnippet
Ultisnips is supported by default. If ultisnips is installed, the snips candidates will show on the completion popup menu.
Use this plugin completor-neosnippet for neosnippet support.
Neoinclude
Neoinclude is supported by default. If neoinclude is installed, the include candidates will show on the completion popup menu.
dictionary
Dictionary completion is supported by completor-dictionary.
shell
You can add some complete functions with shell command by completor-shell.
tmux
Completion from words in tmux panes is supported by completor-tmux.
Python
Use jedi for completion. jedi should be installed for semantic completion. Install jedi to global environment or in virtualenv:
pip install jedi
The python executable can be specified using:
let g:completor_python_binary = '/path/to/python/with/jedi/installed'
Rust
Use racer for completion. Install racer first. To specify the racer executable path:
let g:completor_racer_binary = '/path/to/racer'
Javascript
Use tern for completion. To install tern you must have node and either npm or yarn installed. Then go to the completor.vim directory and run:
make js
The node executable path can be specified using:
let g:completor_node_binary = '/path/to/node'
If you're using vim-plug, you can just use post install hook to do this for you.
Plug 'ternjs/tern_for_vim', { 'do': 'npm install' }Plug 'maralla/completor.vim', { 'do': 'make js' }
c/c++
Use clang for completion. Clang should be installed first. To specify clang path:
let g:completor_clang_binary = '/path/to/clang'
To pass extra clang arguments, you can create a file named .clang_complete under the project root directory or any parent directories. Every argument should be in a single line in the file. This is an example file:
-std=c++11-I/Users/maralla/Workspace/src/dji-sdk/Onboard-SDK/lib/inc-I/Users/maralla/Workspace/src/dji-sdk/Onboard-SDK/sample/Linux/inc
The key mapping
map
go
Use gocode to provide omni completions. To specify the gocode executable path:
let g:completor_gocode_binary = '/path/to/gocode'
swift
Use completor-swift.
Elixir
Use alchemist.vim.
vim script
Use completor-necovim.
type script
Use completor-typescript.
other languages
For other omni completions completor not natively implemented, auto completion can still be used if an omni function is defined for the file type. But an option should be defined to specify the trigger for triggering auto completion. The option name pattern:
let g:completor_{filetype}_omni_trigger = '
For example to use css omnifunc:
let g:completor_css_omni_trigger = '([\w-]+|@[\w-]*|[\w-]+:\s*[\w-]*)$'
Tips
Config tern for javascript completion
This is simple .tern-project file:
{ "plugins": { "node": {}, "es_modules": {} }, "libs": [ "ecma5", "ecma6" ], "ecmaVersion": 6}
Use Tab to select completion
inoremap
Use Tab to trigger completion (disable auto trigger)
let g:completor_auto_trigger = 0inoremap
A better way:
" Use TAB to complete when typing words, else inserts TABs as usual. Uses" dictionary, source files, and completor to find matching words to complete." Note: usual completion is on
Complete Options (completeopt)
Completor try its best to not overwrite the config completeopt, so the config g:completor_complete_options is introduced to be the complete option when completor is triggered.
let g:completor_complete_options = 'menuone,noselect,preview'
If you explicitly set completeopt completor will not use this value for complete options.
Completor Actions
Jump to definition completor#do('definition')Show documentation completor#do('doc')Format code completor#do('format')Hover info (lsp hover) completor#do('hover')
noremap
Golang practices (without using lsp)
Use guru for jumping to definition:
let g:completor_go_guru_binary = 'guru'
Use goimports to format code:
let g:completor_go_gofmt_binary = 'goimports'
Format file after write to buffer:
autocmd BufWritePost *.go :call completor#do('format')
c/c++ practices (without using lsp)
Jump to completion placeholder:
map
Disable completion placeholder:
let g:completor_clang_disable_placeholders = 1
Enable LSP
let g:completor_filetype_map = {}" Enable lsp for go by using goplslet g:completor_filetype_map.go = {'ft': 'lsp', 'cmd': 'gopls'}" Enable lsp for rust by using rlslet g:completor_filetype_map.rust = {'ft': 'lsp', 'cmd': 'rls'}" Enable lsp for c by using clangdlet g:completor_filetype_map.c = {'ft': 'lsp', 'cmd': 'clangd-7'}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~