I'm aim at making coding in C++ fast, fluent, and correct, so I choose vim as my editor because its shortcut keys often only require single press. However, I want more...
This project has two parts:
- Complete vim environment installer.
- Vim plugin for coding C++
Vim environment includes some tools below:
- g++
- git
- cmake
- python2
and some plugins below:
- Vundle
- YouCompleteMe
- NerdTree
- Airline
- taglist
- vim-snippet
You can run the script autoconf/install
to install all of the vim environment I provide. It will automatically install all of the tools and plugins above. If you are in China, it takes only 4 minutes.
If you want use the complete cppenv
, please follow the instruction below:
- clone this git repository
- change work directory to
autoconf
and run script./install
with the user that you coding with - wait about 4 minutes
- if you want coding golang, run script
./go.sh
- if you want coding c++, run script
./install_cpp.sh
The script will install _vimrc
, .ycm_extra_conf.py
and other plugins in ~/.vim
.
But, if you want use the plugin cppenv
only, you can install cppenv
to you vim runtime path.
And add code execute cppenv#infect()
into your .vimrc
when open c++ code files.
Look likes:
au BufNewFile,BufRead *.h,*.hpp,*.inl,*.ipp,*.cpp,*.c,*.cc,*.go execute cppenv#infect()
cppenv
provides some simple auto complete. And others, supported by YouCompleteMe
.
Auto complete brackets:
This feature supports class
, struct
, union
, function
, lambda
and C++ coroutine lambda
.
The C++ coroutine lambda
refers to https://github.com/yyzybb537/cpp_features
Auto complete class-methods definitions:
This feature supports all of combination class
and method
types below:
normal class
template class
and
normal method
template method
static method
static template method
cppenv
provides some shortcut keys for jump between c/c++ header file
and c/c++ source file
.
gs
gns
gS
gvs
gvns
Use gs
can jump between header
and source
if there were in a same folder. If the two files have the same parent folder, you can use gns
to jump between there. If the two files were not in a same folder and have not the same parent folder, the gs
cannot work, here, you can use gS
. gS
will use locate
command to find the files in all of your file-system, and show the results in quickfix
window when the results more than one.
gvs
, gvns
are as same as gs
, gns
nearly. Difference was the shortcut key including v
will split the window vertical, and show the other file buffer on right.
If you install the complete vim environment, the _vimrc
taken effect. It will give you a lot of shortcut key to boost your coding efficiency.
YouCompleteMe
provides syntax complete and check.
NerdTree
provides show the files tree.
TagList
provides show the functions in current file.
I used ;
as the vim leader charactor, so seted below:
-
;b
jump to begin of line. as^
-
;e
jump to end of line. as$
-
;w
save to file. as:w
-
;q
quit the buffer. as:quit
-
;Q
quit the vim. as:quitall
-
;hw
jump to left window. as<C-w>h
-
;jw
jump to under window. as<C-w>j
-
;kw
jump to over window. as<C-w>k
-
;lw
jump to right window. as<C-w>l
-
;/
cancel highlight. as:nohls<CR>
-
;
as"
, e.g. you can use;ay
to copy selection intoa
register, and use;ap
to pastea
register words into cursor position. -
F3
toggle theNerdTree
window, show the files tree. -
F4
static syntax check current source file.
gy
jump to the word on the cursor definition or declaration. as call the YCM methodGoToDefinitionElseDeclaration
.gY
show the word on the cursor definition or declaration on right window.gl
jump to last buffer. as:b#<CR>
gL
jump to last buffer and show current buffer on right window
<C-h>
jump to previous tabpage. as:tabprevious<CR>
<C-l>
jump to next tabpage. as:tabnext<CR>
F7
build current file, outputout.exe
F5
build and run. outputout.exe
F8
build and run with libboost. outputout.exe
<C-j>
trigge the snippet.
Support snippet trigger list below:
-
time
the output for e.g:2015-11-20 23:56:18
-
date
output for e.g:2015-11-20
-
namespace <name>
e.g.
input:
namespace ucorf
output:
namespace ucorf { } //namespace ucorf
-
GNU License <name>
Make gnu license copyright header in source file. -
def <class name>
First, you must save your class definition. Then, inputdef <class name>
, will output all method definitions of the class.