æ®å¿µãªãããVimã§ã®äœæ¥çµéšãå¢ããŠããããããšãã¥ã¬ãŒã·ã§ã³ã¢ãŒãã®Qt Creatorã®ãšãã£ã¿ãŒã¯æ¬¡ç¬¬ã«ç§ã«ãµãããããªããªããŸããã
éçºç°å¢ããèªåãæã4ã€ã®ããšãæŠèª¬ããŸããããVimã§å®å šã«åãæ¿ããã«ã¯ããã§ååã§ãã
1.èªåè£å®
2.ã³ãŒãããã²ãŒã·ã§ã³
3.ç°å¢ããçŽæ¥ãããã°ãã
4. Gitãšã®çµ±åïŒç¹ã«ããšãã£ã¿ãŒã§ã®çŽæ¥ã®éé£ãããã³Git GrepïŒ
Vimã®ãªãŒãã³ã³ããªãŒãã¯è§£æ±ºãããåé¡ã§ããã YouCompleteMeãœãªã¥ãŒã·ã§ã³ã®ååã§ãã ããã¯éåžžã«é«å質ã®ãã©ã°ã€ã³ã§ãããå€æ°ã®ããã°ã©ãã³ã°èšèªãç¹ã«Pythonããã³C ++ã®èªåè£å®ãå®è£ ããŠããŸãã ãããã«ãããšãGoogle YouCompleteMeå ã§ã¯ã³ãŒãããã²ãŒã·ã§ã³ã®2çªç®ã®åé¡ã解決ãããŸãããã€ã³ããã¯ã¹äœæã«ã¯Googleã®å éšããŒã«ã䜿çšãããŸãã
Gitãšã®çµ±åã¯ã vim-fugitiveã䜿çšããŠããçšåºŠè§£æ±ºãããŸããã ããã¯ãJet BrainsãVisual Studioã§çºçãããããªè€éãªçµ±åã§ã¯ãããŸããããQt CreatorãæäŸãããã®ã«å¹æµããŸãã ç§ãå¿ èŠãšãã2ã€ã®ã¹ã¯ãªããïŒblameãšgrep-ããŸããããŸãã
ãããã°ãšããã²ãŒã·ã§ã³ã¯ãåé¡ãã¯ããã«æªåãããŸããã ãã®èšäºã§ã¯ãC ++ã³ãŒããããã²ãŒãããããã«äœæãããã©ã°ã€ã³ã«ã€ããŠèª¬æããŸãã èšäºã®æåŸã§ãçµ±åãããã¬ãŒã䜿çšããŠåé¡ã解決ããæ¹æ³ã«ã€ããŠã説æããŸãã
ãã¡ãããåè¿°ããããã«ãããã²ãŒã·ã§ã³ã«CTagã䜿çšããããšãã§ããŸãããCTagã䜿çšããå Žåãåé¡ã解決ã§ããªãããšãããããŸãã C ++ããŒãµãŒã¯éåžžã«åŒ±ããå€ãã®å ŽåãCTagsã¯ã³ãŒãã®å®å šã«èª€ã£ãã»ã¯ã·ã§ã³ãæ€åºããŸãã
ã€ã³ã¿ãŒãããã§ã¯ãæ°å¹ŽåãšçŸåšã®äž¡æ¹ã§ãC ++ã³ãŒããä»ããããã²ãŒã·ã§ã³ã®ãããã¯ã«é¢ããå¯äžã®ãã®ã¯ãã®èšäºã§ãã ãã®ãã©ã°ã€ã³ãæ§æããåºæ¬çã«æ©èœããŸããã ããããå€ãã®èŠæ ãããããã®ãã¡2ã€ãæ倧ã§ããïŒ
1.ã€ã³ããã¯ã¹äœæããã»ã¹ã¯æåã§éå§ããå¿ èŠããããŸã
2.ååã§ã·ã³ãã«ãèŠã€ããããšãã§ããŸãã
æåŸã«ãVimçšã®ç¬èªã®ãã©ã°ã€ã³ã®éçºã§ãã¹ãŠãçµãããŸãããããã«ãããC ++ã³ãŒããããã²ãŒãã§ããŸãã ã³ã³ãã€ã«ããŒã¿ããŒã¹ãå¿ èŠã§ãã ãããžã§ã¯ãã§CMakeã䜿çšããŠããå ŽåããããååŸããã«ã¯ã
cmake . -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ãã以å€ã®å Žåã¯ã Bearã䜿çšããããæã§ãã«ãã§ããŸãã圢åŒã¯éåžžã«ç°¡åã§ãã
ãã©ã°ã€ã³ã¯CtrlKãšåŒã°ãã次ã®ããšãå®è¡ã§ããŸãã
1.ã«ãŒãœã«ã®äžã®ãã£ã©ã¯ã¿ãŒå®çŸ©ã«ç§»åããŸãã
2.ã«ãŒãœã«ã®äžã®æåã®ãã¹ãŠã®åºçŸãæ€çŽ¢ããŸãã
3.ååã§ãã£ã©ã¯ã¿ãŒãæ€çŽ¢ããŸãïŒããã«ã¯FuzzyFinderã䜿çšãããŸãããæ®å¿µãªããæ€çŽ¢ã¯ãã¡ãžãŒã§ã¯ãªããéšåæååã®ã¿ã§è¡ãããŸãïŒã æ€çŽ¢ã¯ãé¢æ°ãã¡ãœãããã¯ã©ã¹ãã°ããŒãã«å€æ°ããã¯ããããã«ã¯é¢æ°ã®åŒæ°ãããŒã«ã«å€æ°ã«å¯ŸããŠãæ©èœããŸãã
4.ã«ãŒãœã«ãã¹ããŒã¿ã¹ããŒã«ããé¢æ°ã®ååã衚瀺ããŸãã ã¢ããŠã³ã¹ãç»é¢å€ã«ãããšãã«å€§ããªæ©èœãç·šéããå Žåã«éåžžã«äŸ¿å©ã§ãã
ããã«ãã«ãŒãœã«ã®äžã®ã·ã³ãã«ã®å®çŸ©ãåžžã«è¡šç€ºãããå¥ã®ãŠã£ã³ããŠã衚瀺ããå®éšçãªæ©äŒããããŸãã Source Insightç°å¢ã§ãã®ãããªæ©äŒãèŠãã ãã§ããã®æçšæ§ã¯è°è«ã®äœå°ãããããã«èŠããŸãããéåžžã«äŸ¿å©ã ãšæããŸãã
ãã©ã°ã€ã³ã¯ãã³ãŒãã®è§£æã«libclangã䜿çšããã€ã³ããã¯ã¹ã«leveldbã䜿çšããŸãã
YouCompleteMeãšåæ§ã«ããã©ã°ã€ã³ã¯ãµãŒããŒããŒããšã¯ã©ã€ã¢ã³ãã§æ§æãããŸãã ããã§ããµãŒããŒéšåãšã¯ãVimãšäžŠè¡ããŠå®è¡ãããVimãšéä¿¡ããããã»ã¹ãæããŸãã ã€ã³ã¹ããŒã«ã«ã€ããŠã¯ãYCMãšã¯å°ãç°ãªãæ¹æ³ã§è¡ã£ãã YouCompleteMeãVundleãä»ããŠã€ã³ã¹ããŒã«ããåŸã«æã§Makeãå®è¡ããããã«èŠæ±ããå Žåã代ããã«pipãä»ããŠãµãŒããŒåŽãã€ã³ã¹ããŒã«ããŸããã
æåã¯ããã©ã°ã€ã³å šäœãPythonã§èšè¿°ã§ãããµãŒããŒåŽã§ã¯å®è¡ã§ããªãããã«èŠããŸããããpythonã®clangã©ã€ãã©ãªãä»ããå€æ°ã®ãã¡ã€ã«ã®è§£æé床ã¯éåžžã«é ããC ++ã§èšè¿°ããªããã°ãªããŸããã§ãããã€ã³ã¹ããŒã«ãè€éã«ãªããŸãã
ãã®çµæãã€ã³ã¹ããŒã«ã¯ãPythonã©ã€ãã©ãªclangãleveldbãããã³ctrlkã®ãµãŒããŒåŽã®ã€ã³ã¹ããŒã«ã«èŠçŽãããŸãã
sudo pip install leveldb sudo pip install clang sudo pip install ctrlk
ïŒsudo pip install ctrlkãæ©èœããªãã£ãå ŽåïŒ
æŽå²çã«ãctrlkã®pipããã±ãŒãžã¯ç§ã«ã¯å±ããŠããŸããã çŸåšã®ããã±ãŒãžã«ã¯2ã€ã®æ¬ ç¹ããããŸã-ez_setupãžã®äŸåã¯ç€ºãããŠããããæåã§è§£æ±ºã§ããŸã
ãŸããclangããããŒãã¡ã€ã«ãšã©ã€ãã©ãªã¯ãããŸããã clang / llvmã®æšæºã€ã³ã¹ããŒã«ã§ã¯ãã³ã³ãã€ã©ããã³ããªãã§ããããèŠã€ããå Žæã«ããããé 眮ããªããããããã¯ããããã³ã³ãã€ã«ãšã©ãŒã«ã€ãªããã§ãããã
ãããã®åé¡ã¯äž¡æ¹ãšããªããžããªã§è§£æ±ºãããŠããŸããããããŸã§ã®ãšãããpipããã±ãŒãžã¯æŽæ°ãããŠããŸããã sudo pip install ctrlkãã³ã³ãã€ã«ãšã©ãŒã§ã¯ã©ãã·ã¥ããå Žåã¯ãåã«æåã§ã€ã³ã¹ããŒã«ã§ããŸã
sudo pip install ez_setup
ãŸããclangããããŒãã¡ã€ã«ãšã©ã€ãã©ãªã¯ãããŸããã clang / llvmã®æšæºã€ã³ã¹ããŒã«ã§ã¯ãã³ã³ãã€ã©ããã³ããªãã§ããããèŠã€ããå Žæã«ããããé 眮ããªããããããã¯ããããã³ã³ãã€ã«ãšã©ãŒã«ã€ãªããã§ãããã
ãããã®åé¡ã¯äž¡æ¹ãšããªããžããªã§è§£æ±ºãããŠããŸããããããŸã§ã®ãšãããpipããã±ãŒãžã¯æŽæ°ãããŠããŸããã sudo pip install ctrlkãã³ã³ãã€ã«ãšã©ãŒã§ã¯ã©ãã·ã¥ããå Žåã¯ãåã«æåã§ã€ã³ã¹ããŒã«ã§ããŸã
git clone https://github.com/SkidanovAlex/py-ctrlk.git cd py-ctrlk python setup.py build sudo python setup.py install
ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããŸãïŒCtrlKãäŸåããL9ãšFuzzyFinderãåæ§ïŒã ãããè¡ãæãç°¡åãªæ¹æ³ã¯ã Vundleã䜿çšããããšã§ã ã
Plugin 'L9' Plugin 'FuzzyFinder' Plugin 'SkidanovAlex/CtrlK'
ãããŠãvimrcãå°ã調æŽããŸã
let g:ctrlk_clang_library_path="/home/user/llvm/lib" nmap <F3> :call GetCtrlKState()<CR> nmap <Ck> :call CtrlKNavigateSymbols()<CR> nmap <F2> :call CtrlKGoToDefinition()<CR> nmap <F12> :call CtrlKGetReferences()<CR>
ããã§ãg_ctrlk_clang_library_pathã¯libclang.soãžã®ãã¹ãæãå¿ èŠããããŸãã ããšãã°ã次ãå®è¡ããŠèŠã€ããããšãã§ããŸã
locate libclang.so
ãã®åŸãã³ã³ãã€ã«ããŒã¿ããŒã¹ãã£ã¬ã¯ããªïŒãŸãã¯ãã®ãµããã£ã¬ã¯ããªïŒããèµ·åãããvimã¯ãã¡ã€ã«ã®ã€ã³ããã¯ã¹äœæãéå§ãããã°ãããããšãã¡ã€ã«ã®ããã²ãŒããéå§ã§ããŸãã F3ã¯ããŒãµãŒã®çŸåšã®ã¹ããŒã¿ã¹ã衚瀺ããCtrl + Kã¯æåãæ€çŽ¢ã§ããFuzzyFinderãéããF2ã¯æåå®çŸ©ã«ãžã£ã³ãããF12ã¯ã«ãŒãœã«ã®äžã®æåã䜿çšãããŠããã³ãŒãå ã®ãã¹ãŠã®å Žæã衚瀺ããŸãã
ã¹ããŒã¿ã¹ããŒã«çŸåšã®é¢æ°ã®ååã衚瀺ããå Žåã¯ãããšãã°æ¬¡ã®ããã«æ§æã§ããŸãã
hi User1 ctermbg=darkgreen ctermfg=black guibg=darkgreen guifg=black hi User2 ctermbg=gray ctermfg=black guibg=gray guifg=black hi User3 ctermbg=darkgray ctermfg=gray guibg=darkgray guifg=gray set statusline=%1*\ %{CtrlKGetCurrentScope()}\ %2*\ %F%m%r%h\ %w\ \ %3*\ %r%{getcwd()}%h%=%l:%c set laststatus=2
äœæ¥ã®äŸã2ã€ç€ºããŸãã æåã®äŸã§ã¯ããããžã§ã¯ããã©ã«ããŒããVimãèµ·åããCtrl + KãæŒããŠããã¡ã€ã«ã«ç§»åããŸãã ããã¯ããŸãè¯ãäŸã§ã¯ãããŸããããã¡ãžãŒãã¡ã€ã³ããŒãŸãã¯CtrlPã䜿çšããŠãã¡ã€ã«ã«ç°¡åã«ç§»åã§ããŸãããCtrlKã§ã¯åãæ¹æ³ã§ä»»æã®ã¯ã©ã¹ãŸãã¯ä»ã®æåã«ç§»åã§ããŸãã
2çªç®ã®äŸã§ã¯ãããäžåºŠCtrl + Kã䜿çšããŠRestoreStartWorkeré¢æ°ãèŠã€ãããã®äžã®CodePrinterã¯ã©ã¹ã«ã«ãŒãœã«ã眮ããF12ãæŒããŠã³ãŒãå ã®ãã®ã¯ã©ã¹ãžã®ãã¹ãŠã®åç §ãèŠã€ããŸãã F2ãæŒããšãVimã¯ããã«ã¯ã©ã¹ã®å®çŸ©ã«ãžã£ã³ãããŸãã
ãã®äŸã§ã¯ããã¹ãŠã®çºçãèŠã€ããã®ã«ããããªé 延ããããŸãã å®éãããã«åäœããŸããããã¡ã€ã«ãæåã«éããåŸã解æã«1ã3ç§ãããã解æãçµäºãããŸã§ããšã³ããªã®æ±ºå®ãšæ€çŽ¢ãžã®ç§»è¡ã¯æ©èœããŸããã
çµè«ãšããŠããããã°ã«ã€ããŠå°ã説æããŸãã ãããã°çšã®ãã©ã°ã€ã³ãããã€ãããããããã¯ãã¹ãŠéåžžã«æªãã§ãã ç§ã¯æ°æ¥ãéãããŸããããããã§ãPyClewnãã€ã³ã¹ããŒã«ããŠåäœãããããšãã§ããŸããã PyClewnã䜿çšãããšããã¬ãŒã¯ãã€ã³ãã®èšå®ãããŒã«ã«å€æ°ã®ç¢ºèªãVimããã®ããã°ã©ã åºåã®çŽæ¥ç£èŠãGDBã®ã³ãã³ãã®å ¥åãã§ããŸãã ããã¯ãããšãã°QtCreatorãä»ã®æ¬æ Œçãªéçºç°å¢ãšã®çµ±åãããã¯ããã«äŸ¿å©ã§ã¯ãããŸããããGDBãå¥ã®ã¿ãŒããã«ã§å®è¡ããããããããã«åªããŠããŸãã PyClewnã¯äžè¬ã«åé¡ã解決ããŸãããããã£ãšæ¬²ããã£ãã§ãã
ç§ã®ååã¯ãTMuxã䜿çšããŠ1ã€ã®ç»é¢ã§Vimã®é£ã«GDBãèµ·åããVimããçŽæ¥å¶åŸ¡ããïŒããšãã°ããã¬ãŒã¯ãã€ã³ããèšå®ããå€æ°å€ãèŠãïŒããŸãã¯GDBãŠã£ã³ããŠã«åãæ¿ããŠGDBãæäœããVimã®ãã©ã°ã€ã³ãäœæããŸããã ããŒã«ã«å€æ°ãŸãã¯ãªããžã§ã¯ããã£ãŒã«ãã¯ããªã¿ã¯ããªãŒã®ããªãŒãšããŠè¡šç€ºã§ããŸãã æ®å¿µãªããããã©ã°ã€ã³ã«ã¯ããã¥ã¡ã³ãããããŸããããã€ã³ã¹ããŒã«ã¯éåžžã«ç°¡åã§ãã Vundleãä»ããŠ2ã€ã®ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããvimrcãæ§æããå¿ èŠããããŸãã
Plugin 'ManOfTeflon/exterminator' Plugin 'ManOfTeflon/nerdtree-json'
æšæºã®nerdtreeãæ¢ã«äœ¿çšãããŠããå Žåã¯ãåé€ããå¿ èŠããããŸãã nerttree-jsonã¯nerdtreeã®ãã©ãŒã¯ã§ãããããã«ããæ©èœãæ¡åŒµããããªãŒèŠçŽ ã®é 延èšç®ãè¡ãããšãã§ããŸãã
次ã«ããã©ã°ã€ã³ã®äœæè ã«ãã害è«é§é€åšã®æ§æã®äŸã瀺ããŸãã
é衚瀺ã®ããã¹ã
$ PATH_TO_EXECUTABLEããã³./executableã¯ããããã°ããã°ã©ã ãžã®ãã¹ãšãã®ååã§ãã
function! s:get_range() " Why is this not a built-in Vim script function?! let [lnum1, col1] = getpos("'<")[1:2] let [lnum2, col2] = getpos("'>")[1:2] let lines = getline(lnum1, lnum2) let lines[-1] = lines[-1][: col2 - (&selection == 'inclusive' ? 1 : 2)] let lines[0] = lines[0][col1 - 1:] return join(lines, "\n") endfunction nnoremap <silent> & :exec 'VimGrep ' . expand('<cword>')<cr> vnoremap <silent> & :exec 'VimGrep ' . s:get_range() comm! -nargs=0 -range GdbVEval exec 'GdbEval ' . s:get_range() nnoremap <silent> <F6> :exec "GdbEval " . expand("<cword>")<CR> vnoremap <silent> <F6> :GdbVEval<cr> nnoremap <silent> <F5> :GdbLocals<CR> nnoremap <silent> <F4> :GdbNoTrack<CR> nnoremap <silent> <Insert> :GdbContinue<cr> nnoremap <silent> <End> :GdbBacktrace<cr> nnoremap <silent> <Home> :GdbUntil<cr> nnoremap <silent> <S-Up> :GdbExec finish<cr> nnoremap <silent> <S-Down> :GdbExec step<cr> nnoremap <silent> <S-Right> :GdbExec next<cr> nnoremap <silent> <S-Left> :GdbToggle<cr> noremap <silent> <PageUp> :GdbExec up<cr> noremap <silent> <PageDown> :GdbExec down<cr> function! s:start_debugging(cmd) cd $PATH_TO_EXECUTABLE exec 'Dbg ' . a:cmd endfunction command! -nargs=1 DbgWrapper call s:start_debugging(<f-args>) nnoremap <silent> <leader>B :DbgWrapper ./executable<cr>
$ PATH_TO_EXECUTABLEããã³./executableã¯ããããã°ããã°ã©ã ãžã®ãã¹ãšãã®ååã§ãã
TMuxããVimãå®è¡ãããã®æ§æã§ã¯ã\ Bãããããã°ãéå§ã§ããŸãããã®çµæãTMuxã¯ç»é¢ã2ã€ã«åå²ãã2çªç®ã«VDé¢é£ã®GDBãèµ·åããŸãã ç¹ã«ãGDBã§ãã¬ãŒã ãããã²ãŒããããšããVimã¯çŸåšã®ãã¬ãŒã ã®ã³ãŒãã衚瀺ããVimããããããããŒã䜿çšããŠãã¬ãŒã ãããã²ãŒããããã¬ãŒã¯ãã€ã³ããèšå®ããããã°ã©ã ã段éçã«å®è¡ããnerdtreeã§å€æ°ã®å€ã衚瀺ã§ããŸãã ç¹ã«ãF5ã¯ãã¹ãŠã®ããŒã«ã«å€æ°ã®å€ã衚瀺ããF6ã¯ã«ãŒãœã«ã®äžã®å€æ°ã衚瀺ããŸãã
C ++ãšãã®ãµãŒããŒåŽãããã²ãŒãããããã®ãã©ã°ã€ã³ã³ãŒãã¯å ¬éãããŠãããMITã©ã€ã»ã³ã¹ã®äžã§GitHubã§å©çšã§ããŸãã
https://github.com/SkidanovAlex/CtrlK
https://github.com/SkidanovAlex/py-ctrlk
ãããã°ãã©ã°ã€ã³ã³ãŒããå ¬éãããŠãããWTFPLã©ã€ã»ã³ã¹ã§å©çšã§ããŸãã
https://github.com/ManOfTeflon/exterminator