将Vim打造成服务器端IDE
来源:互联网 发布:matlab周期方波编程 编辑:程序博客网 时间:2024/06/08 02:23
仔细想了下,服务器端编程由于服务器(一般都是Linux)并不会装Eclipse,Visual Studio之类的IDE,所以用Vim还是比较好的选择,还能提高Coding(敲键盘)能力,固化编程式思维。
爱上Coding!
- .vimrc
这个是vim的配置文件,每次vim启动时都会逐条执行里面的配置选项。贴下我的通用配置 (还没有包含插件,按照下面的步骤增加插件会增加.vimrc中的内容):
nmap wt :Tlist<CR>" my own settingssyn on "语法支持set laststatus=2 "始终显示状态栏set tabstop=4 "一个制表符的长度set softtabstop=4 "一个制表符的长度(可以大于tabstop)set shiftwidth=4 "一个缩进的长度set expandtab "使用空格替代制表符set smarttab "智能制表符set autoindent "自动缩进set smartindent "智能缩进set number "显示行号set ruler "显示位置指示器set backupdir=/tmp "设置备份文件目录set directory=/tmp "设置临时文件目录set ignorecase "检索时忽略大小写set hls "检索时高亮显示匹配项set helplang=cn "帮助系统设置为中文set foldmethod=syntax "代码折叠set nobackup "不生成备份文件set guifont=Courier\ New:h15 "设置字体set nowrap "长句在一行显示set encoding=utf-8colorscheme pablo" Tlistlet Tlist_Ctags_Cmd='/usr/local/bin/ctags'let Tlist_Show_One_File=1let Tlist_Exit_OnlyWindow=1let Tlist_Use_Right_Window=1let Tlist_Sort_Type = "name"let Tlist_Auto_Open=1nmap wt :Tlist<CR> " MiniBufExplorerlet g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplMapWindowNavArrows = 1 let g:miniBufExplMapCTabSwitchBufs = 1 let g:miniBufExplModSelTarget = 1 let g:miniBufExplMoreThanOne=0nmap be :MiniBufExplorer<CR>" NERDTreelet g:NERDTree_title="[NERDTree]"function! NERDTree_Start() exec 'NERDTree'endfunctionfunction! NERDTree_IsValid() return 1endfunction" WinManagerlet g:winManagerWindowLayout="NERDTree"nmap wm :WMToggle<CR>" Cscope:set cscopequickfix=s-,c-,d-,i-,t-,e-
- ctags
tags文件是由ctags程序产生的一个索引文件, ctags程序其是叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 并且比它功能强大, 是大多数Linux发行版上默认的ctags程序. 那么tags文件是做什么用的呢? 如果你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 怎么办呢? 用grep? 那会搜出很多不相干的地方. 现在流行用是的<C-]>, 谁用谁知道呀, 当光标在某个函数或变量上时, 按下"Ctrl+]", 光标会自动跳转到其定义处。
(原配ctags是在/usr/bin/, 安装的Exuberant Ctags会在/usr/local/bin/)
下载地址:http://ctags.sourceforge.net
到项目最上层 ctags -R
:set tags=<path>/tags
跳转到定义: Ctrl + ]
跳转回 : Ctrl + t
不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令 ctags -R, 使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>了.
注意: 对于Python,如果ctags不支持的话(反正在我这是支持的。。)可以用Python自带的ptags.py
脚本的目录是python源码下的Tool/script/ptags.py。如果不想去找,可以直接copy一份,http://svn.python.org/projects/python/trunk/Tools/scripts/ptags.py,放在你方便的位置,然后使用ptags.py生成tag。
为当前目录生成tag文件 : ptags.py *.py
为整个项目生成tag文件:find . -name \*.py -print | xargs ptags.py
然后就有tag了。在vim的配置文件中导入tag文件的目录就可以了。
比如在.vimrc 中添加:
set tags+=tags
set autochdir
- TagList
下载地址:http://vim-taglist.sourceforge.net/download.html
安装: 在 ~/.vim 目录下解压taglist_xx.zip
配置: 参考之前的.vimrc
- WinManager
下载地址:http://www.vim.org/scripts/script.php?script_id=95
安装: 在 ~/.vim 目录下解压winmanager.zip
配置: 参考之前的.vimrc
- NERD_tree
下载地址:http://www.vim.org/scripts/script.php?script_id=1658
安装: 在 ~/.vim 目录下解压NERD_tree.zip
配置: 参考之前的.vimrc
注意:
" NERD_tree need this. 按wm打开WinManager时会有一个空白窗口,要把他关闭。
打开winmanager.vim,找到函数function! <SID>ToggleWindowsManager(),加入两行,修改后整个函数如下:
function! <SID>ToggleWindowsManager() if IsWinManagerVisible() call s:CloseWindowsManager() else call s:StartWindowsManager() exe 'q' //添加 end endfunction
- MiniBufExplorer
下载地址:http://www.vim.org/scripts/script.php?script_id=159
安装: 将minibufexpl.vim放到./.vim/plugin/
配置: 参考之前的.vimrc
使用:
Tab 向右循环选择标签
Shift+Tab 向左循环选择标签
Enter 选择
d 关闭当前选择的标签
另外,有了这个MiniBufExplorer,就可以用 Ctrl + h,j,k,l 来在不同窗口见移动了
- YouCompleteMe
安装vundle: https://github.com/VundleVim/Vundle.vim#quick-start
cd ~/.vim/bundle/
git clone--recursive https://github.com/Valloric/YouCompleteMe.git 获取最新的仓库,而后使用git submodule update --init --recursive
确认仓库的完整性。
在.vimrc中添加:
call vundle#begin(). . . Plugin 'Valloric/YouCompleteMe'. . .call vundle#end()
编译YCM:
brew install CMake
cd ~/.vim/bundle/YouCompleteMe
./install.sh --clang-completer
vim
:BundleInstall
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.vim/
vim ~/.vim/.ycm_extra_conf.py
加上这些:
'-isystem',
'/usr/include',
'-isystem',
'/usr/local/include',
'-isystem',
'/Library/Developer/CommandLineTools/usr/include',
'-isystem',
'/Library/Developer/CommandLineTools/usr/bin/../lib/c++/v1',
注释掉:
# try:
# final_flags.remove( '-stdlib=libc++' )
# except ValueError:
# pass
return { 'flags': final_flags, 'do_cache': True }
vim .vimrc
" YouCompleteMe
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项
"youcompleteme 默认tab s-tab 和自动补全冲突
"let g:ycm_key_list_select_completion=['<c-n>']
let g:ycm_key_list_select_completion = ['<Down>']
"let g:ycm_key_list_previous_completion=['<c-p>']
let g:ycm_key_list_previous_completion = ['<Up>']
let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示
let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎
let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全
nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> "force recomile with syntastic
"nnoremap <leader>lo :lopen<CR> "open locationlist
"nnoremap <leader>lc :lclose<CR> "close locationlist
inoremap <leader><leader> <C-x><C-o>
"在注释输入中也能补全
let g:ycm_complete_in_comments = 1
"在字符串输入中也能补全
let g:ycm_complete_in_strings = 1
"注释和字符串中的文字也会被收入补全
let g:ycm_collect_identifiers_from_comments_and_strings = 0
let g:clang_user_options='|| exit 0'
nnoremap <C-g> :YcmCompleter GoToDefinitionElseDeclaration<CR> " (Ctrl + g)跳转到定义处
" 另外:YCM提供的跳跃功能采用了vim的jumplist,
往前跳和往后跳的快捷键为Ctrl+O
以及Ctrl+I。
解决头文件找不到的问题:
在~/.vim/.ycm_extra_conf.py文件中加入:
# nginx
'-isystem',
'/Users/zhangyaodong/Documents/Projects/Open/nginx-1.12.1/src/core',
'-isystem',
'/Users/zhangyaodong/Documents/Projects/Open/nginx-1.12.1/src/http',
'-isystem',
'/Users/zhangyaodong/Documents/Projects/Open/nginx-1.12.1/src/mail',
'-isystem',
'/Users/zhangyaodong/Documents/Projects/Open/nginx-1.12.1/src/os/unix',
'-isystem',
'/Users/zhangyaodong/Documents/Projects/Open/nginx-1.12.1/src/event',
'-isystem',
'/Users/zhangyaodong/Documents/Projects/Open/nginx-1.12.1/src/stream'
echofunc
http://www.vim.org/scripts/script.php?script_id=1735
下下来后直接扔 ~/.vim/plugin/, 需配合ctags,ctags -R --fields=+lS
MAC includes: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/
indentLine
Bundle 'Yggdroot/indentLine'
let g:indentLine_char ='|'
Syntastic
" syntastic,vundle是从git上下载插件的,配置中scrooloose是作者名,后面是repo
Bundle 'scrooloose/syntastic'
vim ~/.vimrc
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
" 关闭Syntastic窗口: :lclose (在代码窗口,不是在Syntastic执行)
" 打开Syntastic窗口: :lopen
- pylint
sudo easy_install pylint
vim ~/.vimrc
Bundle 'vim-scripts/pylint.vim'
let g:syntastic_python_checkers=['pylint']
let g:syntastic_python_pylint_args='--disable=C0111,R0903,C0301'
待研究
cscope (需要吗?)
easymotion
- 将Vim打造成服务器端IDE
- 将vim打造成IDE
- [Vim笔记]将vim打造成IDE
- 将vim打造成IDE编程环境
- 将VIM打造成一个IDE
- 将VIM打造成强大的IDE
- 将vim打造成IDE编程环境
- 将vim打造成IDE总结(一)
- 将自己的vim打造成IDE
- 将vim打造成IDE(二)
- vim打造成IDE
- vim打造成IDE
- 将vim打造成类似source insight的IDE
- 将vim打造成集成开发环境(IDE)
- 将vim打造成类似source insight的IDE
- 将vim打造成类似source insight的IDE
- 如何将Vim打造成一个成熟的IDE
- 如何将Vim打造成一个成熟的IDE
- 吃货福利get-今日美食food微信小程序
- 文章标题
- 博士之路
- [LeetCode]526. Beautiful Arrangement
- PHP服务器的网页显示空白
- 将Vim打造成服务器端IDE
- Bean 后处理器
- LVS(Linux virtual Server)
- 二维数组中的查找
- 1011. World Cup Betting (20)
- ThinkPHP中集成阿里大于短信发送SDK
- maven实战(八)Maven web项目的目录结构
- Redis的备份方式
- PHP本地进行API接口测试