" Open menu
:CodeQueryMenu Unite Full
" Or query directly
:CodeQuery Definition get_user_id
This Vim plugin is built on top of the great tool CodeQuery created by ruben2020, and aims at providing three primary functions to help you to:
- Search source code gracefully within Vim.
- You can find:
definition, call, caller, callee, symbol, class, parent, child
and more for a string. - Convenient menus are created for you.
- Well-formated results are shown in a custom Quickfix window with usable key bindings.
- You can find:
- Manage your database easily.
- Load, make and move your database file by custom Vim commands.
Note: CodeQuery's SQLite database is built on top of ctags and cscope.
- Know your code more instantly.
- (TBD)
-
Python
😎 -
Javascript
-
Ruby
-
Go
-
Java
-
C, C++
Choose a query from menu ➙ Get results
... ➙ Switch to different query ➙ Get results ... ➙ Filter them ➙ Get Results ➙ Undo ➙ Redo
This project is almost ready to be released.
Main TODO:
- Use Vim8's new features to enhance usability.
- Do lazy-loading.
- Fix some bugs
Completeness: 92%
v1.0 Release Date: Mid-SeptemberIt is Ok to try it! 👌
echo mkdir mv cut find awk stat git(optional)
- Follow installation guide in CodeQuery project.
- Enter
cqsearch -h
in your terminal and view the result. Make surecqsearch
accepts-u
option.
If not, you will have to pull latest CodeQuery code and then build it yourself.
Language | Tools | How to install |
---|---|---|
Python | PyCscope | sudo pip install pycscope |
Javascript | Starscope | sudo gem install starscope |
Ruby | Starscope | sudo gem install starscope |
Go | Starscope | sudo gem install starscope |
Java | N/A | |
C | N/A | |
C++ | N/A |
Starscope has been packaged for Arch Linux
- Use your favorite plugins manager: pathogen, Vundle, Plug, NeoBundle, Dein, ...
- Take Plug as an example:
" Recommemded => it helps vim-codequery to build DB asynchrously without blocking Vim
Plug 'tpope/vim-dispatch'
" Recommemded => if you don't have an :Ack (or :Ag) liked command => install it !
Plug 'mileszs/ack.vim'
" Highly Recommemded => if you want to use my custom Unite menu
Plug 'Shougo/unite.vim'
" The Must Have One
Plug 'devjoe/vim-codequery'
- Go to the (git) root directory of your project. Open vim and type:
" Indexing Python files
:CodeQueryMakeDB python
" Or indexing Python + Javascript files
:CodeQueryMakeDB python javascript
- That's all!
python.db
,javascript.db
... will be created in the root directory. - It's recommended that you should use
:CodeQueryMoveDBToGitDir python
to hide the DB file to.git/codequery/
directory. If you do so, next time you can call:CodeQueryMakeDB
directly in any opened Python buffer to rebuild the DB file.
- Find symbol under cursor
:CodeQuery
- Find
?
under cursor
:CodeQuery [SubCommand]
" Supported SubCommands are: `Symbol, Text, Call, Caller, Callee, Class, Parent, Child, Member, FunctionList, FileImporter`.
- Find arbitrary word
:CodeQuery [SubCommand] [word]
- Find
?
again with the same word
:CodeQueryAgain [SubCommand]
- With fuzzy Option
:CodeQuery [SubCommand] [word] -f
" [word] can be: get_* or *user_info or find_*_by_id
- With append Option (results will be added to current Quickfix)
:CodeQuery [SubCommand] [word] -a
- Filter Search Results
:CodeQueryFilter [string]
" [string] can be a regex
- Move your cursor inside Quickfix window to use these key bindings
Key | Action | Note |
---|---|---|
s | :CodeQueryAgain Symbol |
|
x | :CodeQueryAgain Text |
use :Ack! by default. #1 |
c | :CodeQueryAgain Call |
|
r | :CodeQueryAgain Caller |
|
e | :CodeQueryAgain Callee |
|
d | :CodeQueryAgain Definition |
|
C | :CodeQueryAgain Class |
|
M | :CodeQueryAgain Member |
|
P | :CodeQueryAgain Parent |
|
D | :CodeQueryAgain Child |
|
m | :CodeQueryMenu Unite Magic |
|
q | :cclose |
|
\ | :CodeQueryFilter |
|
p | <CR><C-W>p |
Preview |
u | :colder | CodeQueryShowQF |
Older Quickfix Result |
<C-R> | :cnewer | CodeQueryShowQF |
Newer Quickfix Result |
#1 You can override
g:codequery_find_text_cmd
to change it.
- Show Quickfix with above key bindings
:CodeQueryShowQF
" This command can also be used to **patch** standard Quickfix.
Currently, vim-codequery only provides Unite menu because I love and use it a lot ⭐. There are two types of menu:
- Open a complete Unite menu
:CodeQueryMenu Unite Full
" The string between :: and :: is the word under cursor
" [F] means this action is for 'function variable only'
" [C] is for 'class variable only'
- Open a magic Unite menu
:CodeQueryMenu Unite Magic
" This menu changes dynamically:
" 1. If word under cursor is capital (possible be class): remove [F] actions
" 2. If word under cursor is non-capital (possible be function): remove [C] actions
" 3. Show reasonable actions only within Quickfix
nnoremap <space>c :CodeQueryMenu Unite Full<CR>
nnoremap <space>; :CodeQueryMenu Unite Magic<CR>
" Or enable typing (to search menu items) by default
nnoremap <space>\ :CodeQueryMenu Unite Magic<CR>A
nnoremap <space><CR> :CodeQuery Symbol<CR>
" Chain commands! To find possible tests (for python)
nnoremap <space>t :CodeQuery Caller<CR>:CodeQueryFilter test_<CR>
" Set tags option
set tags=./javascript_tags;/
set tags+=./python_tags;/
set tags+=./ruby_tags;/
set tags+=./go_tags;/
set tags+=./java_tags;/
set tags+=./c_tags;/
" It accpepts a list of your languages written in lowercase
let g:codequery_enable_auto_clean_languages = ['python']
" Make sure to generate a python.db or xxxx.db file as a result
let g:codequery_build_python_db_cmd = '...'
let g:codequery_build_javascript_db_cmd = '...'
let g:codequery_build_ruby_db_cmd = '...'
let g:codequery_build_go_db_cmd = '...'
let g:codequery_build_java_db_cmd = '...'
let g:codequery_build_c_db_cmd = '...'
Because I need it.
I already shared the story of making this plugin in local Python user groups Taipei.py and Tainan.py.
Slides are available here: Taipei.py / Tainan.py (Language: Traditional Chinese)
Read what @ruben2020 the author of CodeQuery said: Link
In addittion, vim-codequery provides:
- Good interface.
- Separated Database Management Mechanism.
(You can open as many projects as you wish in a single Vim session without worrying about messing up Ctags or Cscope files or getting wrong result!)for Vim users.
Ask here or create an issue.
And give me feedback or bug report.
And give me PR. It would be better if you open an issue and discuss with me before sending PR.
If you like it. 👍
Thank all for working on these great projects!