vim使用笔记+常用插件

来源:互联网 发布:网络兼职写手 编辑:程序博客网 时间:2024/06/05 22:48

http://newbiedoc.sourceforge.net/text_editing/vim.html.en

http://www.cnblogs.com/marchtea/archive/2012/10/17/2727852.html


移动

ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。

`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。


输入

c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。

]p:和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。
gd:到达光标所在处函数或者变量的定义处。

【guu 】 – 把一行的文字变成全小写。或是【Vu】
【gUU】 – 把一行的文件变成全大写。或是【VU】
按【v】键进入选择模式,然后移动光标选择你要的文本,按【u】转小写,按【U】转大写
【ga】 –  查看光标处字符的ascii码
【g8】 – 查看光标处字符的utf-8编码
【gf】  - 打开光标处所指的文件 (这个命令在打到#include头文件时挺好用的,当然,仅限于有路径的)
【>>】向右给它进当前行 【<<】向左缩进当前行
【=】  - 缩进当前行 (和上面不一样的是,它会对齐缩进)
【=%】 – 把光标位置移到语句块的括号上,然后按=%,缩进整个语句块(%是括号匹配)
【G=gg】 或是 【gg=G】  - 缩进整个文件(G是到文件结尾,gg是到文件开头)

关键字补全

Ctrl + X 和 Ctrl + D 宏定义补齐
Ctrl + X 和 Ctrl + ] 是Tag 补齐
Ctrl + X 和 Ctrl + F 是文件名 补齐
Ctrl + X 和 Ctrl + I 也是关键词补齐,但是关键后会有个文件名,告诉你这个关键词在哪个文件中
Ctrl + X 和 Ctrl +V 是表达式补齐
Ctrl + X 和 Ctrl +L 这可以对整个行补齐,



分屏



插件:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在完成了前面的配置之后,我们的vim应该已经很好用了.不过还是有些问题没有解决.没有自动补全.

这时候就要出马啦.

1. omni complete

omni complete是一个很好用的自动补全工具,支持很多语言,能自动的进行一些补全.在编译安装了vim73后,就自带了.我们要在vimrc下打开

set nocpfiletype plugin onset ofu=syntaxcomplete#Complete

第一句是关闭兼容模式,第二句则是打开匹配文件类型.一定要加上

打开了之后,就能发现很多代码可以自动补全了.比如css,html等都能很好的工作,

使用方法是<ctrl+x><ctrl+o>

不过这还是不够,对于c/c++程序员来说,我们还需要更强大的工具.类成员变量,类的方法也要补全出来!

所以omnicppcomplete就登场了

下载: http://www.vim.org/scripts/script.php?script_id=1520

cp omnicppcomplete-0.41.zip ~/.vimcd ~/.vimunzip omnicppcomplete-0.41.zip

之后打开vimrc,添加下列几段

复制代码
" OmniCppCompleteset completeopt=menu,longest,menuonelet OmniCpp_NamespaceSearch = 2let OmniCpp_GlobalScopeSearch = 1let OmniCpp_ShowAccess = 1let OmniCpp_ShowPrototypeInAbbr = 1 let OmniCpp_MayCompleteDot = 1   let OmniCpp_MayCompleteArrow = 1 let OmniCpp_MayCompleteScope = 1 let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]let OmniCpp_SelectFirstItem = 2let OmniCpp_DisplayMode=1au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
复制代码

再次打开vim,omnicpp就安装上了.

不过,这类成员变量还是不出来啊.

原来omnicpp利用的是tag来判断的,因此我们需要利用ctags来生成

首先要保证机器里有ctags,而且最好要5.4以上.好像是之前的有bug.

进入所在的cpp的目录,

运行

ctags --c-kinds=+px --c++-kinds=+px --fields=+iafksS --extra=+qf your_file.cpp

这会生成一个tag文件,打开vim,运行

:set tags += tags

就会加载了.

使用的时候,在遇到->和.的时候就会自动弹出.

不过吧,这样还是麻烦.每次还得自己运行一遍ctags,然后把tags加载进来,而且,那意味着我们的有些库的头文件也不能自动补全么?

首先是自动加载tags,在vimrc中加入

set tags+=tagsset tags+=/home/summer/tags/lib_tags

对于我们平常用到的头文件,可以自己手动生成一份,放到固定的文件夹下,之后写代码就方便了.

比如我的lib_tags就是编译了linux的头文件生成的

ctags --c-kinds=+px --c++-kinds=+px --fields=+iafksS --extra=+qf -R /usr/include/*

有了这个tag,还可以发挥vim的跳转功能.记得--extra一定要+f,这样遇到头文件我们也能跳转进头文件了.

另外我加入了当前目录下的tags,这样当我们生成一个tag之后,vim就回自动加载了.

而对于自动生成tags.事实上,还有人写了一个方便的工具,下面介绍

2. omnitags

这个是国人写的vim插件,下载地址

http://www.vim.org/scripts/script.php?script_id=2870

下载最新的版本放到~/.vim/plugin目录下即可.

再修改vimrc

nmap <silent><leader>t :OmniTagsLoad ./tags<CR>nmap <leader>u :OmniTagsUpdate

重启vim,在需要自动生成tags的时候,首先加载

<leader>t//如果提示没有tag,则会要求创建,选择y即可<leader>u your_files//即可把该文件加入到本目录的tag中,//之后凡是用:w保存,tag都会被更新

现在,配合起omnicppcomplete,写代码就很方便了.

不过感觉提示还是不智能,而且每次要补全了还得自己手动按ctrl+x ctrl+o.不爽不爽

3. autocomplpop

这个插件就是解决我们的烦恼的

下载: http://www.vim.org/scripts/script.php?script_id=1879

同样的

cp vim-autocomplpop.zip ~/.vimunzip vim-autocomplpop.zip

就好了.

这个插件非常强大,自动弹出也满足了我们很多功能.比如自动弹出文件路径等等.

这个插件的默认是keyword completion.而由于咱们已经有了omnicppcomplete,所以其实就够了.

其对于keyword的补全实力非常强大.不过可能有人觉得,还是全部都用omni comp比较好.

于是就在网上搜了这么一段代码

let g:AutoComplPop_Behavior = { \ 'c': [ {'command' : "\<C-x>\<C-o>",\ 'pattern' : ".",\ 'repeat' : 0}\ ] \}

事实上这个是没有用的,要想使用的话,有两个方式

1. 下载2.6或者更老版本的autocomplpop

从2.7开始,autocomplpop就修改了配置方式,所以之前老的版本已经无效了

2. 修改写法

let g:acp_behavior = {    'command' : "\<C-x>\<C-o>",    'meets': mycppfunc    'repeat':0    }

在~/.vim/autoLoad/acp.vim中增加函数

照着里头acp#meetsForKeyword的函数写就可以了..

function mycppfunc(context)    return 1endfunction

不过这个在项目大了之后非常非常慢,所以不大推荐.默认的方法就挺好.效率也很高

4. NERDTreeToggle

这个是一个显示文件树形结构的插件,挺方便,一般大家也用

下载:http://www.vim.org/scripts/script.php?script_id=1658

老方法,cp后unzip在~/.vim下即可

在vimrc下加入下面语句

nmap <F2> :NERDTreeToggle<CR>

以后按F2就可以掉出来,很方便

5. taglist

taglist是利用ctags来读取目前文件下的函数列表,变量等,很方便,推荐使用

下载:http://www.vim.org/scripts/script.php?script_id=273

还是cp后unzip在~/.vim就可以使用了

在vimrc下加入

复制代码
let Tlist_Ctags_Cmd='~/bin/ctags' //这个修改成安装ctags的目录let Tlist_Show_One_File=1let Tlist_OnlyWindow=1let Tlist_Use_Right_Window=0let Tlist_Sort_Type='name'let Tlist_Exit_OnlyWindow=1let Tlist_Show_Menu=1let Tlist_Max_Submenu_Items=10let Tlist_Max_Tag_length=20let Tlist_Use_SingleClick=0let Tlist_Auto_Open=0let Tlist_Close_On_Select=0let Tlist_File_Fold_Auto_Close=1let Tlist_GainFocus_On_ToggleOpen=1let Tlist_Process_File_Always=1let Tlist_WinHeight=10let Tlist_WinWidth=45let Tlist_Use_Horiz_Window=0nmap <F3> :Tlist<CR>
复制代码

之后就可以使用F3调出来了

6. stl

vim对于c++的高亮提示的不好,尤其是stl很多方法和容器都没有高亮,看着很是郁闷,这时候stl就派上用场了

下载:http://www.vim.org/scripts/script.php?script_id=2224

有了这个,vim就能对stl进行高亮了.

用法: 

$ mkdir -p ~/.vim/after/syntax/cpp 
$ cp stl.vim ~/.vim/after/syntax/cpp/

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------













0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 花呗地区限制怎么办 支付宝花呗账单错误怎么办 台球厅生意惨淡怎么办 退货少了东西怎么办 微店注册id怎么办 卖红酒没有客源怎么办 来姨妈10天没走怎么办 京东违反广告法怎么办 支付宝定位错误怎么办 银行账户未年审怎么办 淘宝集运禁运品 怎么办 物流显示禁运品怎么办 淘宝禁运品怎么办呢 货物退回日本了怎么办 淘宝卖家寄多了衣服怎么办 集运地址选错怎么办 淘宝卖韩国化妆品退货怎么办 去韩国留学手机怎么办 韩国办无线网怎么办 淘宝卖家被骗怎么办 淘宝买软件被骗怎么办 被淘宝店诈骗怎么办? 支付宝被骗2000怎么办 给私人打款后不发货怎么办 毕业证寄丢了怎么办 微商下单返现被骗一千四怎么办 淘宝买东西卡里多扣钱怎么办 付款了卖家不发货怎么办 淘宝客服不解决问题怎么办 淘宝未付款订单怎么办 淘宝被限制购买怎么办 苹果官换机维修过怎么办 iphone x官换机坏了怎么办 小娃不要大人睡怎么办? 深度睡眠太少怎么办 踏板摩托车淹缸怎么办 电喷摩托车淹缸怎么办 踏板摩托不过油怎么办 火花塞被汽油淹怎么办 踏板车淹缸了怎么办 电喷汽车淹缸怎么办