diff --git a/.vimrc b/.vimrc index 40fd83f..d536913 100644 --- a/.vimrc +++ b/.vimrc @@ -1,4 +1,4 @@ -" 更新时间:2014-2-28 16:12:00 +" 更新时间:2014-12-27 00:51:58 " 定义快捷键的前缀,即 let mapleader=";" @@ -200,8 +200,40 @@ nmap sch :AS " << +" >> +" 代码收藏 + +" 自定义 vim-signature 快捷键 +let g:SignatureMap = { + \ 'Leader' : "m", + \ 'PlaceNextMark' : "m,", + \ 'ToggleMarkAtLine' : "m.", + \ 'PurgeMarksAtLine' : "m-", + \ 'DeleteMark' : "dm", + \ 'PurgeMarks' : "mda", + \ 'PurgeMarkers' : "m", + \ 'GotoNextLineAlpha' : "']", + \ 'GotoPrevLineAlpha' : "'[", + \ 'GotoNextSpotAlpha' : "`]", + \ 'GotoPrevSpotAlpha' : "`[", + \ 'GotoNextLineByPos' : "]'", + \ 'GotoPrevLineByPos' : "['", + \ 'GotoNextSpotByPos' : "mn", + \ 'GotoPrevSpotByPos' : "mp", + \ 'GotoNextMarker' : "[+", + \ 'GotoPrevMarker' : "[-", + \ 'GotoNextMarkerAny' : "]=", + \ 'GotoPrevMarkerAny' : "[=", + \ 'ListLocalMarks' : "ms", + \ 'ListLocalMarkers' : "m?" + \ } + +" << + " >> " 代码导航 + +" 基于标签的代码导航 " 设置插件 indexer 调用 ctags 的参数 " 默认 --c++-kinds=+p+l,重新设置为 --c++-kinds=+l+p+x+c+d+e+f+g+m+n+s+t+u+v @@ -213,8 +245,11 @@ nmap tn :tnext " 反向遍历同名标签 nmap tp :tprevious -" 跳转到定义处 -"nmap gd +" 基于语义的代码导航 + +nnoremap jd :YcmCompleter GoToDeclaration +" 只能是 #include 或已打开的文件 +nnoremap je :YcmCompleter GoToDefinition " << @@ -268,6 +303,7 @@ let g:tagbar_type_cpp = { " 模板补全 " UltiSnips 的 tab 键与 YCM 冲突,重新设定 +let g:UltiSnipsSnippetDirectories=["mysnippets"] let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" let g:UltiSnipsJumpBackwardTrigger="" @@ -290,9 +326,7 @@ let g:ycm_confirm_extra_conf=0 " 开启 YCM 标签补全引擎 let g:ycm_collect_identifiers_from_tags_files=1 " 引入 C++ 标准库 tags -set tags+=/data/misc/software/misc./vim/stdcpp.tags -" 引入 libcurl 库 tags -set tags+=/usr/include/curl/curl.tags +set tags+=/data/misc/software/app/vim/stdcpp.tags " YCM 集成 OmniCppComplete 补全引擎,设置其快捷键 inoremap ; @@ -319,7 +353,7 @@ let g:syntastic_warning_symbol = '⚠' " 由接口快速生成实现框架 " 设置 pullproto.pl 脚本路径 -let g:protodefprotogetter='~/.vim/bundle/protodef/pullproto.pl' +let g:protodefprotogetter='~/.vim/bundle/vim-protodef/pullproto.pl' " 成员函数的实现顺序与声明顺序一致 let g:disable_protodef_sorting=1 diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py new file mode 100644 index 0000000..23baf6a --- /dev/null +++ b/.ycm_extra_conf.py @@ -0,0 +1,152 @@ +# This file is NOT licensed under the GPLv3, which is the license for the rest +# of YouCompleteMe. +# +# Here's the license text for this file: +# +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# For more information, please refer to + +import os +import ycm_core + +# These are the compilation flags that will be used in case there's no +# compilation database set (by default, one is not set). +# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. +flags = [ + '-std=c++11', + '-Werror', + '-Weverything', + '-Wno-documentation', + '-Wno-deprecated-declarations', + '-Wno-disabled-macro-expansion', + '-Wno-float-equal', + '-Wno-c++98-compat', + '-Wno-c++98-compat-pedantic', + '-Wno-global-constructors', + '-Wno-exit-time-destructors', + '-Wno-missing-prototypes', + '-Wno-padded', + '-Wno-old-style-cast', + '-x', + 'c++', + '-I', + '.', + '-I', + '/usr/include/', + '-I', + '/usr/include/c++/4.8/' +] + + +# Set this to the absolute path to the folder (NOT the file!) containing the +# compile_commands.json file to use that instead of 'flags'. See here for +# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html +# +# Most projects will NOT need to set this to anything; you can just change the +# 'flags' list of compilation flags. Notice that YCM itself uses that approach. +compilation_database_folder = '' + +if compilation_database_folder: + database = ycm_core.CompilationDatabase( compilation_database_folder ) +else: + database = None + +SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ] + +def DirectoryOfThisScript(): + return os.path.dirname( os.path.abspath( __file__ ) ) + + +def MakeRelativePathsInFlagsAbsolute( flags, working_directory ): + if not working_directory: + return list( flags ) + new_flags = [] + make_next_absolute = False + path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ] + for flag in flags: + new_flag = flag + + if make_next_absolute: + make_next_absolute = False + if not flag.startswith( '/' ): + new_flag = os.path.join( working_directory, flag ) + + for path_flag in path_flags: + if flag == path_flag: + make_next_absolute = True + break + + if flag.startswith( path_flag ): + path = flag[ len( path_flag ): ] + new_flag = path_flag + os.path.join( working_directory, path ) + break + + if new_flag: + new_flags.append( new_flag ) + return new_flags + + +def IsHeaderFile( filename ): + extension = os.path.splitext( filename )[ 1 ] + return extension in [ '.h', '.hxx', '.hpp', '.hh' ] + + +def GetCompilationInfoForFile( filename ): + # The compilation_commands.json file generated by CMake does not have entries + # for header files. So we do our best by asking the db for flags for a + # corresponding source file, if any. If one exists, the flags for that file + # should be good enough. + if IsHeaderFile( filename ): + basename = os.path.splitext( filename )[ 0 ] + for extension in SOURCE_EXTENSIONS: + replacement_file = basename + extension + if os.path.exists( replacement_file ): + compilation_info = database.GetCompilationInfoForFile( + replacement_file ) + if compilation_info.compiler_flags_: + return compilation_info + return None + return database.GetCompilationInfoForFile( filename ) + + +def FlagsForFile( filename, **kwargs ): + if database: + # Bear in mind that compilation_info.compiler_flags_ does NOT return a + # python list, but a "list-like" StringVec object + compilation_info = GetCompilationInfoForFile( filename ) + if not compilation_info: + return None + + final_flags = MakeRelativePathsInFlagsAbsolute( + compilation_info.compiler_flags_, + compilation_info.compiler_working_dir_ ) + else: + relative_to = DirectoryOfThisScript() + final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) + + return { + 'flags': final_flags, + 'do_cache': True + } diff --git "a/pics/\345\217\257\350\247\206\345\214\226\344\271\246\347\255\276.gif" "b/pics/\345\217\257\350\247\206\345\214\226\344\271\246\347\255\276.gif" index d9bc16f..1427440 100644 Binary files "a/pics/\345\217\257\350\247\206\345\214\226\344\271\246\347\255\276.gif" and "b/pics/\345\217\257\350\247\206\345\214\226\344\271\246\347\255\276.gif" differ diff --git "a/pics/\345\237\272\344\272\216\350\257\255\344\271\211\347\232\204\345\257\274\350\210\252.gif" "b/pics/\345\237\272\344\272\216\350\257\255\344\271\211\347\232\204\345\257\274\350\210\252.gif" new file mode 100644 index 0000000..f665260 Binary files /dev/null and "b/pics/\345\237\272\344\272\216\350\257\255\344\271\211\347\232\204\345\257\274\350\210\252.gif" differ diff --git "a/pics/\346\226\207\344\273\266\345\210\227\350\241\250.gif" "b/pics/\346\226\207\344\273\266\345\210\227\350\241\250.gif" new file mode 100644 index 0000000..add38cc Binary files /dev/null and "b/pics/\346\226\207\344\273\266\345\210\227\350\241\250.gif" differ diff --git "a/pics/\346\240\207\347\255\276\345\210\227\350\241\250.gif" "b/pics/\346\240\207\347\255\276\345\210\227\350\241\250.gif" new file mode 100644 index 0000000..058b46c Binary files /dev/null and "b/pics/\346\240\207\347\255\276\345\210\227\350\241\250.gif" differ diff --git "a/pics/\347\213\254\347\253\213\344\271\246\347\255\276\345\222\214\345\210\206\347\261\273\344\271\246\347\255\276.png" "b/pics/\347\213\254\347\253\213\344\271\246\347\255\276\345\222\214\345\210\206\347\261\273\344\271\246\347\255\276.png" new file mode 100644 index 0000000..c9edd2c Binary files /dev/null and "b/pics/\347\213\254\347\253\213\344\271\246\347\255\276\345\222\214\345\210\206\347\261\273\344\271\246\347\255\276.png" differ