工欲善其事,必先利其器,我是一个C的小白,要说学过c语言,只能是大一上学期学了一个月,经过这几年的工作,发现基础比较重要,而且在java上感觉进步也不是太大了,想多了解一些底层原理和语言之间的差别,也许有人问为什么不学go,其实我也想过,不过仔细思考了现在自己的一个程度,其实语言并不是什么问题,因为在这之前简单的搞过python、php、js等语言,基本到能写业务代码也就几天而已。学c是为了先了解底层各种原理和基础,毕竟基础决定了你能够走多远。
还有一个原因导致了我学c语言,看了大部分Spring源码和完整的RocketMQ的源码,了解实现机制。忽然有了一些思维方式,为了加强自己的思维方式,打算阅读nginx源码,不过在这之前,打算阅读一些著名的小型开源项目做铺垫,一次吃一个大象肯定是吃不完的,只能一天天吃。
第一篇是先打造一个好用的Vim,废话不多说先上代码。
首先安装Vim的插件,其中vim-scripts是vim的一些基本插件,包括语法高亮的支持、缩进等等。vim-doc是帮助文档vim中文帮助文档tar包下载地址:
http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
解压后其中有个doc文件夹, 将其中的内容全部复制到~/.vim/doc, 或者vim安装目录下的doc目录中, 此时vim中的help信息已经是中文的了
yum install vim vim-scripts vim-doc
vim ~/.vimrc
输入下面内容
if has("syntax")
syntax on
endif
colorscheme ron
filetype on
filetype plugin on
set background=dark
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
filetype plugin indent on
endif
set ignorecase " 搜索模式里忽略大小写
set smartcase
set autowrite "自动把内容写回文件: 如果文件被修改过"
set autoindent "设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置"
set smartindent
set tabstop=4 "设置制表符(tab键)的宽度"
set softtabstop=4
set shiftwidth=4
set cindent "" 使用 C/C++ 语言的自动缩进方式"
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式"
set backspace=2 " 设置退格键可用"
set showmatch " 设置匹配模式,显示匹配的括号"
set linebreak " 整词换行"
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去"
set mouse=a " Enable mouse usage (all modes) 使用鼠标"
set number " Enable line number 显示行号"
set previewwindow " 标识预览窗口"
set history=50 " set command history to 50 历史记录50条"
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行"
set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。"
set showcmd " 命令行显示输入的命令"
set showmode " 命令行显示vim当前模式"
set incsearch " 输入字符串就显示匹配点"
set hlsearch
重启之后就能看到效果啦
ctags可以建立源码树的标签索引(标签就是一个标识符被定义的地方,如函数定义),使程序员在编程时能迅速定位函数、变量、宏定义等位置去查看原形
yum install -y ctags
##向vim注册索引文件tags的路径
vim ~/.vimrc
##输入如下字符串
map :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate
imap :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . :TlistUpdate
set tags=tags;/
##上面安装好之后,可以下载一个c的源码来尝试一下效果
wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz
tar -zxvf webbench-1.5.tar.gz
cd webbench-1.5
###建立索引
ctags -R *
使用方式如下:
Ctrl+] 跳到当前光标下单词的标签
Ctrl+O 返回上一个标签
Ctrl+T 返回上一个标签
Ctrl+W + ] 新窗口显示当前光标下单词的标签,光标跳到标签处
:pclose 关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。
从http://www.vim.org/scripts/script.php?script_id=273下载安装包
##进入vim的目录中
cd ~/.vim_runtime
##解压
unzip taglist_46.zip
##配置vim
vim ~/.vimrc
#加入下面两行
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
在Vim命令行下运行TlistToggle命令就可以打开Taglist窗口,再次运行TlistToggle则关闭
下载地址
http://www.vim.org/scripts/script.php?script_id=95
##进入vim的目录中
cd ~/.vim_runtime
unzip winmanager.zip
cp winmanager/plugin/* plugin/
cp winmanager/doc/* doc/
##配置vim
vim ~/.vimrc
#加入下面代码
"设置winmanager的宽度,默认为25"
let g:winManagerWidth = 30
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle
"定义打开wm的方式是F8"
nmap :WMToggle
在普通模式下 顺序按wm就会弹出来,或者按F8
git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
cd ~/.vim/bundle
git clone https://github.com/Valloric/YouCompleteMe.git
安装需要的依赖并且手动下载完后检查仓库的完整性,切换到 YouCompleteMe 目录下,输入如下命令
yum install -y cmake
yum install -y python-devel
git submodule update --init --recursive
如果需要支持C#,添加 –omnisharp-complete。如果需要支持Go添加–gocode-completer
cd ~/.vim/bundle/YouCompleteMe
./install.sh --clang-completer
安装成功后进行配置vim ~/.vimrc
filetype off "required!
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Plugin 'Valloric/YouCompleteMe'
filetype plugin indent on " required!
let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
添加搜索的头部文件位置
vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
###添加下述内容到flag的集合中
'-isystem',
'/usr/local/include',
Ctrl+P 向前切换成员
Ctrl+N 向后切换成员
Ctrl+E 表示退出下拉窗口, 并退回到原来录入的文字
Ctrl+Y 表示退出下拉窗口, 并接受当前选项
其他补全方式:
Ctrl+X Ctrl+L 整行补全
Ctrl+X Ctrl+N 根据当前文件里关键字补全
Ctrl+X Ctrl+K 根据字典补全
Ctrl+X Ctrl+T 根据同义词字典补全
Ctrl+X Ctrl+I 根据头文件内关键字补全
Ctrl+X Ctrl+] 根据标签补全
Ctrl+X Ctrl+F 补全文件名
Ctrl+X Ctrl+D 补全宏定义
Ctrl+X Ctrl+V 补全vim命令
Ctrl+X Ctrl+U 用户自定义补全方式
Ctrl+X Ctrl+S 拼写建议