update
[linguofeng.github.com.git] / pages / tools / vim.textile
blob86b039d259fe28d7f3c18a393ff86a640a9bcb6d
1 ---
2 layout: page
3 title: Vim
4 description: 很强大的文本编辑器
5 update: 2013-03-25
6 ---
8 <section>
9     <div class="page-header">
10         <h3>安装</h3>
11     </div>
12 <pre>
13 $ sudo apt-get install vim vim-gtk cscope
14 </pre>
15     <p>%(label label-info).vimrc%</p>
16 <pre>
17 set tabstop=4               " 设置tab键的宽度
18 set shiftwidth=4            " 换行时行间交错使用4个空格
19 set autoindent              " 自动对齐
20 set backspace=2             " 设置退格键可用
21 set cindent shiftwidth=4    " 自动缩进4空格
22 set smartindent             " 智能自动缩进
23 set ai!                     " 设置自动缩进
24 set nu!                     " 显示行号
25 set showmatch               " 显示括号配对情况
26 set hlsearch                " 开启高亮显示结果
27 set incsearch               " 开启实时搜索功能
28 set nowrapscan              " 搜索到文件两端时不重新搜索
29 "set cursorline             " 突出显示当前行
30 "set hidden                 " 允许在有未保存的修改时切换缓冲区
31 "set list                   " 显示Tab符,使用一高亮竖线代替
32 syntax enable               " 打开语法高亮
33 syntax on                   " 开启文件类型侦测
34 filetype on                 " 
35 filetype indent on          " 针对不同的文件类型采用不同的缩进格式
36 filetype plugin on          " 针对不同的文件类型加载对应的插件
37 set nobackup                " 设置无备份文件
38 set nocompatible            " 不使用vi兼容的模式
39 </pre>
40 </section>
42 <section>
43     <div class="page-header">
44         <h3>插件</h3>
45     </div>
46     <p>%(label label-info)Taglist% 标签查看插件</p>
47 <pre>
48 先安装ctags:sudo apt-get install exuberant-ctags
49 下载:http://www.vim.org/scripts/script.php?script_id=273
50 安装:解压到 ~/.vim/
51 生成帮助标签:helptags ~/.vim/doc(在Vim命令中执行)
52 启动:TlistToggle(在Vim命令中执行)
53 </pre>
54     <p>%(label label-info)Eclim% 把Eclipse的功能集成到Vim中的插件</p>
55 <pre>
56 参考:http://eclim.org/install.html
57 </pre>
59     <p>%(label label-info)CommandT% 快速打开文件的插件</p>
60 <pre>
61 下载:http://www.vim.org/scripts/download_script.php?src_id=18167
62 $ rvm install 1.8.7 // 必须使用1.8.7
63 $ rvm use 1.8.7
64 $ vim command-t-1.4.vba // :so %
65 $ cd ~/.vim/ruby/command-t
66 $ ruby extconf.rb
67 $ make
68 </pre>
70     <p>%(label label-info)Pathogen% 自动加载插件</p>
71     <p>@安装@</p>
72 <pre>
73 $ mkdir -p ~/.vim/autoload ~/.vim/bundle
74 $ curl -so ~/.vim/autoload/pathogen.vim https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim
75 </pre>
76     <p>@$ vim .bashrc@</p>
77 <pre>
78 call pathogen#infect()
79 </pre>
80     <p>@生成bundle目录下插件的帮助文档@</p>
81 <pre>
82 :Helptags
83 </pre>
85     <p>%(label label-info)NERDTree% 文件浏览插件</p>
86 <pre>
87 $ cd ~/.vim/bundle
88 $ git clone https://github.com/scrooloose/nerdtree.git
89 </pre>
90 <p>@:Helptags@ 生成帮助文档</p>
91 <p>@:help NERD_tree.txt@ 查看帮助文档</p>
93     <p>插件安装</p>
94 <pre>
95 $ mkdir ~/.vim && cd ~/.vim
96 $ git init
97 $ git add .
98 $ git commit -m 'init'
99 $ git remote add origin git@github.com:linguofeng/vim.git
100 $ git push origin master
101 $ mkdir ~/.vim/bundle
102 $ git submodule add git://github.com/tpope/vim-pathogen.git bundle/vim-pathogen
103 $ vim ~/.vimrc
104 </pre>
105 <pre>
106 runtime bundle/vim-pathogen/autoload/pathogen.vim
107 call pathogen#infect()
108 </pre>
110     <p>@bufexplorer@</p>
111 <pre>
112 $ git submodule add https://github.com/vim-scripts/bufexplorer.zip.git bundle/bufexplorer
113 $ git add .
114 $ git commit -m 'install bufexporer plugin'
115 </pre>
117     <p>@生成插件文档@</p>
118 <pre>
119 $ vim >> :Helptags  # 启动vim后执行Helptags命令
120 $ vim ~/.vim/.gitmodules
121 >>  [submodule "bundle/vim-pathogen"]
122 >>      path = bundle/vim-pathogen
123 >>      url = git://github.com/tpope/vim-pathogen.github
124 >>      ignore = untracked      // 添加此项不提交生成的帮助文件
125 </pre>
127     <p>@升级插件@</p>
128 <pre>
129 $ cd ~/.vim/bundle/xxx && git pull origin master                # 更新某个插件
130 $ cd ~/.vim/ && git submodule foreach git pull origin master    # 更新所有插件
131 </pre>
133     <p>@删除插件@</p>
134 <pre>
135 $ cd ~/.vim && git rm bundle/xxx
136 </pre>
138     <p>@同步到github@</p>
139 <pre>
140 $ git add .
141 $ git commit -m '添加插件'
142 $ git push origin master
143 </pre>
145     <p>@同步到另一台电脑@</p>
146 <pre>
147 $ git clone git@github.com:linguofeng/vim.git ~/.vim
148 $ ln -s ~/.vim/vimrc ~/.vimrc
149 $ cd ~/.vim
150 $ git submodule init
151 $ git submodule update
152 </pre>
154     <h4>安装cscope与vim插件</h4>
155 <pre>
156 $ sudo apt-get install cscope
157 $ curl -so ~/.vim/bundle/cscope/plugin/cscope_maps.vim http://cscope.sourceforge.net/cscope_maps.vim
158 $ cscope -Rbkq ~/test/vimtest/zombie_game # 此时在zombie_game文件夹中生成cscope.out文件
159 $ gvim                      # 启动gvim(下面都是vim命令)
160     :pwd                    # 查看当前vim的工作目录
161     :cd ~/workspace         # 改变当前vim的工作目录为workspace
162     :cs add ~/test/vimtest/zombie_game/cscope.out ~/test/vimtest/zombie_game    # 添加cscope.out到cscope数据库中,对应路径,否则会出现找不到文件的错误。
163     :cs show                # 查看已经连接的数据库
164     :cs kill cscope.out     # 断开已经连接的数据库
165     :cs f g symbol          # 对应快捷键 Ctrl+]
166 </pre>
167  <p>@Ctrl+]@ :进入这个函数</p>
168  <p>@Ctrl+T@ :返回搜索前的位置</p>
170     <h4>生成工程的cscope.files并生成cscope.out</h4>
171 <pre class="prettyprint">
172 # 切换当前vim工作目录为工程目录
173 $ cd /path/to/project
175 # 搜索当前目录下所有.h、.c、.cpp文件并生成cscope.files文件列表
176 $ find . -name '*.h' -o -name '*.c' -o -name '*.cpp' > cscope.files
178 $ cscope -b
179 # 根据cscope.files生成cscope.out数据库文件
181 $ vim # 在当前工程里启动vim,然后执行下面的命令连接cscope.out数据库,在前面加上的路径是(.)
182     :cs add cscope.out .
183 </pre>
184 </section>
186 <section>
187     <div class="page-header">
188         <h3>三、技巧</h3>
189     </div>
190     <h4><small>3.1</small> 替换(substitute)</h4>
191 <div class="lgf-command">:[range]s/source/destination/[option]</div>
192 <pre class="lgf-command-description">
193 range: 范围
194     1,20    从第1行到20行
195     %       整个文件
196     .,$     从当前行到末尾
197     1,$     从第1行到末尾
199 s: 替换操作
201 source: 原内容
203 destination: 目标内容
205 option: 参数,省略时显替换第一个匹配的词
206     g:      全局替换
207     c:      需要确认替换
208     p:      逐行替换
209     i:      不区分大小写
210     e:      不显示error
211 </pre>
212     
213     <h4><small>3.2</small> 去掉^M字符</h4>
214 <div class="lgf-command">:%s/^M//g</div>
215 <pre class="lgf-command-description">
216 ^M是由 Ctrl-V + Ctrl-M 生成的。
217 </pre>
219     <h4><small>3.3</small> tab替换成空格 <small>http://vim.wikia.com/wiki/Converting_tabs_to_spaces</small></h4>
220 <div class="lgf-command">
221 :set tabstop=4          ==
222 :set shiftwidth=4       ||=> 添加到.vimrc配置文件中,则可直接执行retab
223 :set expandtab          ==
224 :retab
225 </div>
226 <pre class="lgf-command-description">
227 tabstop     tab键的宽度
228 shiftwidth  换行时使用4个空格
229 expandtab   使用空格替换tab
230 retab       把所有tab替换成tabstop宽度的空格
231 </pre>
233     <h4><small>3.4</small> 文件格式</h4>
234 <div class="lgf-command">
235 :set fileformat=unix
236 :set fileformat=dos
237 :set fileformat=mac
238 </div>
239 <div class="lgf-command-description">
240 unix        表示是unix下的文件格式
241 dos         windows下的文件格式
242 mac         苹果下的文件格式
243 </div>
245     <h4><small>3.5</small> 窗口管理快捷键</h4>
246 <pre>
247 ctrl + w, h     -->     选择左边窗口,存在的话
248 ctrl + w, j     -->     选择下边窗口
249 ctrl + w, k     -->     选择上边窗口
250 ctrl + w, l     -->     选择右边窗口
251 ctrl + w, w     -->     逆时针选择窗口
252 ctrl + w, s     -->     水平拆分窗口
253 ctrl + w, v     -->     垂直拆分窗口
254 ctrl + w, n     -->     新建一个窗口
255 ctrl + w, q     -->     关闭窗口
256 </pre>
257 </section>
259 <section>
260     <ul class="history">更新历史
261         <li>2013-03-25: 更新cscope插件部分</li>
262         <li>2012-12-06: ...</li>
263     </ul>
264 </section>