本贴汇总了以前写的几个有关于vim使用的帖子,这样看起来方便点。以后也尽量总结在这个帖子中。
winmanager.zip 地址http://www.vim.org/scripts/download_script.php?src_id=754
下下来,拷贝到
~/.vim/plugin 下
在 ~/.vimrc中写
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>
使用
用gvim打开代码文件,normal状态下输入命令"wm"
minibufexpl.vim
http://vim.sourceforge.net/scripts/script.php?script_id=159
这是一个vim的插件,可以再网上下到。 放到
~/.vim/plugin/ 目录下面
很好使的说。
编辑时,使用 Ctrl-n 可以补全
taglist是一个可以再vim中显示函数列表,变量列表的工具。很好使
http://www.vim.org/scripts/script.php?script_id=273
下载taglist.zip 解压缩到 ~/.vim/目录下后
在.vimrc文件中 加上
nnoremap <silent> <F8> :TlistToggle<CR>
就可以在打开的vim窗口中 用F8来打开辅助窗口了。
5.vim中使用ctag
1. 首先在源文件的顶层目录中 运行
ctags -R
生成一个tags的文件
2. 在.vimrc中添加
set tags=/ws/wyang2/76/tags
3. 进入某个文件,将光标指向想要查找的symbol
^] 跳转到该symbol定义处
^t 跳回上层
http://lists.freebsd.org/pipermail/freebsd-questions/2003-July/012019.html
vi ~/mycat
<now editing in vi>
[esc] :%!xxd
<now editing mycat in hex>
<find some innocuous string or rcsid>
<change the values on the hex side>
[esc] :%!xxd -r
[esc] :wq!
可以编辑二进制文件了 哈
Dos/windows使用了一种很愚蠢的方案来结束文件的每一行:居然使用了两个符号RETURN/LINEFEED,而Unix likeOS就明智的多,使用一个NEWLINE(就是LINEFEED)。因此,如果在Linux下面阅读Dos/Windows文件,每一行会显示一个讨厌的^M,怎么办?
在vim里面打:
[ESC]:%s/[Ctrl-v][Enter]//g
就可以了。
解释一下:
Ctrl-v的作用是,使得接着输入的回车键被认为是一个特殊字符,而不是vim命令的结束。
1.建立cscope档案
#cscope -Rbkq
2.进入vim
3.vim中导入cscopedangan
:cs add cscope.out
4.vim中使用cscope
:cs find c|d|e|f|g|i|s|t name
0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件
或者增加 cscope_maps.vim到plugin目录,使用快捷键,也可直接将下面代码加入到.vimrc中
nmap <C-/>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-/>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-/>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-/>d :cs find d <C-R>=expand("<cword>")<CR><CR>
用a.vim插件 http://www.vim.org/scripts/script.php?script_id=31
作为一个C程序员, 日常Coding时在源文件与头文件间进行切换是再平常不过的事了, 直接用vim打开其源/头文件其实也不是什么麻烦事, 但是只用一个按键就切换过来了, 这是多么贴心的功能啊....
安装好a.vim后有下面的几个命令可以用了:
:A | 在新Buffer中切换到c/h文件 |
:AS | 横向分割窗口并打开c/h文件 |
:AV | 纵向分割窗口并打开c/h文件 |
:AT | 新建一个标签页并打开c/h文件 |
其他还有一些命令, 你可以在它的网页上看看, 我都没用过, 其实也都是大同小异, 找到自己最顺手的就行了.
我在~/.vimrc中增加了一句:
nnoremap <silent> <F12> :AV<CR>
10.用omnicppcomplete实现自动补全
下载http://www.vim.org/scripts/script.php?script_id=1520
解压缩到.vim目录下。
打开vim, :h omnicppcomplete 查看如何使用。
生成ctags时,使用特殊的option。参看帮助。
例如:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/GL/
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/SDL/
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ /usr/include/qt4/
tags for std c++
http://www.vim.org/scripts/script.php?script_id=2358
又从别的blog中看到,自动补全时,filetype相关的设置。 没有用过。
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
"autocmd FileType c set omnifunc=ccomplete#Complete
vim中其它的补全方式包括:
整行补全 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
补全vim命令 CTRL-X CTRL-V
用户自定义补全方式 CTRL-X CTRL-U
拼写建议 CTRL-X CTRL-S
11. 代码折叠
设置折叠方式,和折叠宽度(比想象的有用)
1. 折叠方式
可用选项 'foldmethod' 来设定折叠方式:set fdm=*****。
有 6 种方法来选定折叠:
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠
注意,每一种折叠方式不兼容,如不能即用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。
使用时,用:set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。
2. 折叠命令
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:
如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
zc 折叠
zC 对所在范围内所有嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内所有嵌套的折叠点展开
[z 到当前打开的折叠的开始处。
]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。
当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动之:)
我们可以使用下面的命令来创建和删除折叠:
zf 创建折叠,比如在marker方式下:
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd 删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zE 除去 (Eliminate) 窗口里“所有”的折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
3. 设置折叠宽度
set fdc=4
12.保留当前编辑的窗口,和其他设置
:set sessionoptions-=curdir "在session option中去掉curdir
:set sessionoptions+=sesdir "在session option中加入sesdir
:mksession vim70.vim "创建一个会话文件
:wviminfo vim70.viminfo "创建一个viminfo文件
:qa "退出vim
下次打开vim
:source ~/src/vim70/src/vim70.vim "载入会话文件
:rviminfo vim70.viminfo "读入viminfo文件
就恢复了上次的窗口内容,可以继续上次的编辑
13. ShowMarks 插件使用
从http://www.vim.org/scripts/script.php?script_id=152下载插件
在.vimrc中添加
""""""""""""""""""""""""""""""
" showmarks setting
""""""""""""""""""""""""""""""
" Enable ShowMarks
let showmarks_enable = 1
" Show which marks
let showmarks_include = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM
" Ignore help, quickfix, non-modifiable buffers
let showmarks_ignore_type = "hqm"
" Hilight lower & upper marks
let showmarks_hlline_lower = 1
let showmarks_hlline_upper = 1
显示的颜色可以自己设置,如将下面代码添加到colorscheme中,其实直接改showmarks.vim文件也可以
hi default ShowMarksHLl ctermfg=darkblue ctermbg=blue cterm=bold guifg=Black guibg=#FFDB72 gui=bold
hi default ShowMarksHLu ctermfg=darkblue ctermbg=blue cterm=bold guifg=Black guibg=#FFB3FF gui=bold
还可以添加下面的快捷键
<Leader>mt - 打开/关闭ShowMarks插件
<Leader>mo - 强制打开ShowMarks插件
<Leader>mh - 清除当前行的标记
<Leader>ma - 清除当前缓冲区中所有的标记
<Leader>mm - 在当前行打一个标记,使用下一个可用的标记名
14.c.vim插件的使用
太强大了,参见
http://hi.baidu.com/love214925/blog/item/48281fa70153bf9cd1435812.html
/if 添加函数
/im 添加主函数
/cfu 添加 一筐 注释
/p< 添加 include
/p" 添加 include
/nr 插入一段 代码片段, 该代码片段在~/.vim/c-support/codesnippets
15. mark.vim 高亮的插件
用法
/m mark or unmark
/n clear mark
/r search
/* 跳到下一个光标下的mark的字符串
/# 跳到上一个光标下的mark的字符串
// 跳到下一个mark处
/? 跳到上一个mark处
这里 / 是 mapleader 通过 set mapleader = "," 设置成逗号
16. lookupfile.vim 插件
http://easwy.com/blog/archives/advanced-vim-skills-lookupfile-plugin/
暴牛插件
a.安装, lookupfile.vim 和 genutils(必要的话)插件
http://www.vim.org/scripts/script.php?script_id=1581
http://www.vim.org/scripts/script.php?script_id=197
b. 生成文件查找的tag
echo -e "!_TAG_FILE_SORTED/t2/t/2=foldcase/" > filenametags "这表明该tag文件排序过
find . -not -regex '.*/./(png/|gif/)' -type f -printf "%f/t%p/t1/n" | sort -f >> filenametags
生成 filenametags
c. 告诉lookupfile插件,到指定的tag中找文件
:let g:LookupFile_TagExpr = '"./filenametags"'
d. 使用
按<F5>或者 :lookupfile 就可以查找了!
e.在查找文件时,输入的文件名是大小写敏感的。
在输入的字符串前,加 /c 就表示不区分大小写了
别人写的
17.自动补全之 括号 篇
在 vimrc中加, 里面我加了一个 补全"号的东东。貌似长得比较丑
"
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap /" <c-r>=ClosePair('"')<CR>
":inoremap < <><ESC>i
":inoremap > <c-r>=ClosePair('>')<CR>
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "/<Right>"
elseif getline('.')[col('.') - 1] == """
else
return a:char
endif
18. quickfix使用
最原始的使用方法,是将make或者gcc的错误输出保存到文件
然后 vi -q filename 就可以打开到第一个错误的地方。 不过貌似这个方法太弱了。
:cc 显示当前的错误信息
:cn 跳到下一跳错误
:cp 跳到上一条错误
:cfile 读入一个error的文件,并跳到第一个错误信息的地方
:cgetfile 这个和cfile一样,不过就是不自动跳到第一个错误的地方
:caddfile 增加一个error的文件
:copen 打开quickfix窗口显示 错误信息
:cclose 关闭quickfix窗口
:cw 也是打开quickfix窗口
19. 连接gdb -- pyclewn
http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/
:Cmapkeys 快捷键的映射
:Cdbgvar i 在watch窗口中 观察这个变量
:sb _dbgvar 显示这个watch窗口
http://hi.baidu.com/%D5%D4%BB%B6%C0%DA/blog/item/c8910555c13bef53d0090651.html
http://blog.csdn.net/wooin/archive/2007/10/31/1858917.aspx
http://easwy.com/blog/archives/advanced-vim-skills-advanced-move-method/
有空看看。
21. 在vim中查找替换
替换当前行第一个abc
:s/abc/efg/
替换当前行的所有abc
:s/abc/efg/g
替换n行到最后的每行第一个abc
:n,$s/abc/efg/
替换n行到最后的每行每一个abc
:n,$s/abc/efg/g
替换当前行到最后每一行的第一个abc,用.(点)表示当前行
:.,$s/abc/efg
可以用#代替/
:.,$#abc/#efg/#
22. 拼写检查
:set spell
打开单词检查。
这样会对有错误的单词做高亮处理
相关的命令:
]s-移到下一个拼写错误的单词
[s-作用与上一命令类似,但它是从相反方向进行搜索
z=-显示一个有关拼写错误单词的列表,可从中选择
zg-告诉拼写检查器该单词是拼写正确的
zw-与上一命令相反,告诉拼写检查器该单词是拼写错误的