Vim使用经验

本贴汇总了以前写的几个有关于vim使用的帖子,这样看起来方便点。以后也尽量总结在这个帖子中。

 

 

1.vim中使用winmanage 显示目录结构

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"

 

 

2.vim中使用 minibuf

minibufexpl.vim

http://vim.sourceforge.net/scripts/script.php?script_id=159

这是一个vim的插件,可以再网上下到。  放到

~/.vim/plugin/ 目录下面

很好使的说。

 

 

3.vim 中的单词补全

编辑时,使用 Ctrl-n  可以补全

 

4.在vim中使用taglist

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 跳回上层

 

 

6.使用vi以二进制方式编辑文本

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!

可以编辑二进制文件了 哈

 

7.vim tip: 如何去掉Dos/Windows文件的^M

Dos/windows使用了一种很愚蠢的方案来结束文件的每一行:居然使用了两个符号RETURN/LINEFEED,而Unix likeOS就明智的多,使用一个NEWLINE(就是LINEFEED)。因此,如果在Linux下面阅读Dos/Windows文件,每一行会显示一个讨厌的^M,怎么办?
在vim里面打:
[ESC]:%s/[Ctrl-v][Enter]//g
就可以了。

解释一下:

Ctrl-v的作用是,使得接着输入的回车键被认为是一个特殊字符,而不是vim命令的结束。

 

 

8.vim中使用cscope

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>

 

 

9.源文件与头文件之间的切换

用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窗口

20.用Gvim建立IDE编程环境

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-与上一命令相反,告诉拼写检查器该单词是拼写错误的




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值